Re: [PATCH] 2.5.30 IDE 113

Jens Axboe
2002-08-06T11:08:51Z

On Tue, Aug 06 2002, Marcin Dalecki wrote:
> Uz.ytkownik Jens Axboe napisa?:
>
> >Agrh god no. So you'll spin waiting for the ioctl to complete?
> >
> >>From ide_raw_taskfile(), the right way to do it is:
> >
> > struct request *rq = blk_get_request(...);
> >
> >This gets _everything_ right.
> >
> >BTW, _glad to see you got rid of the horrible insert-and-execute stuff
> >in ide_raw_taskfile(). That was a layering violation.
> >
> >
> >>OK?
> >
> >
> >Not likely :-)
>
> Argh. Yes. Thank's for the back-head slap.
> I was looking too much at the SCSI code again and got it wrong.
> But some time ago I was already thinking about blk_get_request().
> How could I maintain that the blk_get_request() really returns?
> blk_get_request() does only drain up to maximum queue depth as
> far as I can read the code and then bad things wil happen :-).
> Or should I just not worry?

You can make it do what you want. From ioctl etc context (or basically
anyone calling ide_raw_taskfile() since that will block too), you can
use a blocking call to blk_get_request(). So

rq = blk_get_request(q, WRITE, __GFP_WAIT);

will _never_ return NULL. You are basically throttling on the freelist
of the queue, just like any other submitter of I/O. And that, is a Good
Thing :-)

--
Jens Axboe