Messages in this thread | | | Date | Tue, 6 Aug 2002 13:12:24 +0200 | From | Jens Axboe <> | Subject | Re: [PATCH] 2.5.30 IDE 113 |
| |
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
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |