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.