Re: AIC94XX discovery timeout problem details...

malahal
2006-09-19T20:59:05Z

I am planning to process port/phy events in two phases. Phase-I sets up
asd_sas_port, asd_sas_phy lists and calls the LLDD with a correct
phy_mask. Phase-II is done in the thread context by queuing to the scsi
work queue that involves setting up sysfs objects. Still there would be
just one thread setting up/tearing down sysfs objects that should avoid
any races.

Would appreciate any suggestions or issues with this approach.

Thanks, Malahal.

Luben Tuikov [ltuikov@yahoo.com] wrote:
> --- malahal@us.ibm.com wrote:
> > I chased the time out problem and found that the PORTE_BYTES_DMAED port
> > event must be responded with a call to lldd_port_formed() which will
> > update PHY_IS_UP and port-links fields in DDB 0. As there is a single
> > thread handling PHY/port events as well as discovery, we really can't
> > handle PORTE_BYTES_DMAED event until the discovery is complete. This
> > results in SCSI commands timing out in the discovery thread no matter
> > what I do! This problem may be unique to Vitesse expander, read the PS
> > section for details.
> >
> > Tried using two threads, one for events and the other for discovery.
>
> Malahal,
>
> If you go back in the archives, and take a look at the SAS Stack
> as I submitted it last year, you'll notice that this is exactly how
> the code is: there is a separate event thread and a separate
> discovery thread.
>
> That is, from inception, my code has always had two separate threads,
> one for events and one for discovery.
>
> I wasn't aware that the code had been changed such that a single
> thread handles events and discovery. This is a very naive approach,
> and a regression over the original code.
>
> > That avoided the timeout problems, but the discovery thread would die
> > after few iterations due to the event thread and the discovery thread
> > racing each other for setting up and tearing down of sysfs objects.
>
> Indeed, the situation presented in such circumstances is tricky.
> These "races" have been dealt with in my (original) code. Currently,
> I don't experience any problems with my SAS Stack, as I maintain it.
>
> If any of my original comments are still left in the code or the README
> files, that would give you a hint of how such "races" are handled.
>
> > I tried calling lldd_port_formed() with appropriate phy_mask from the
> > notify_port_event() itself. That worked fine. It is just a hack for now!