Subject: Re: More on se0
To: Leo Weppelman <leo@wau.mis.ah.nl>
From: Julian Coleman <J.D.Coleman@newcastle.ac.uk>
List: port-atari
Date: 08/11/1998 23:04:56
> Uhm, before the call to tsleep in the SUCCESSFULLY_QUEUED case, there are
> the lines:
> 	if ((xs->flags & (SCSI_NOSLEEP | SCSI_POLL)) == SCSI_NOSLEEP)
> 		return (EJUSTRETURN);
> 
> In other words, it should never get to the point of calling tsleep...

Hmm, I'm a little confused that scsipi_done() (i.e. wakeup()) gets called 
before tsleep(), but ...

Anyway, the problem is that the SCSI_NOSLEEP flag is set in scsipi_done()
but is not set by the time the test in SUCCESSFULLY_QUEUED is made.  In
scsipi_free_xs(), there is the call :

	pool_put(&scsipi_pool_xfer_pool, xs);

Before this call, SCSI_NOSLEEP is set, but afterward it is not.

J

-- 
    1024/55A5BC19        0F 3F 62 56 18 10 8B 84  43 8F F4 94 93 37 76 AA

S.E.P.