Re: floppy driver 2.6.3 question

From: Jens Axboe
Date: Thu Mar 18 2004 - 08:34:05 EST


On Thu, Mar 18 2004, Peter T. Breuer wrote:
> "Also sprach Jens Axboe:"
> > > Good idea. rl is inviolate, but I set at least |=REQ_NOMERGE sometimes
> > > on flags. And I pass ioctl information in fake requests by setting
> >
> > May I ask on what commands you set that bit?
>
> I set it on requests I have gotten myself via blk_get_request(..., WRITE,
> GFP_ATOMIC) and which are destined to be passed onto the drivers request
> queue and treated by the request function. The request function will
> know what to do with them. The bit I mention below is also set on them:

Ok, sounds fine.

> > > the bit just beyond the edge of those currently used (__REQ_BITS) to
> > > indicate its an ioctl and treating it specially in end request. Maybe
> > > on error I forgot to remove the extra bit before doing put_blk_request
> >
> > Ugh, that sounds like very bad practice... The 'standard' way of doing
> > something like that is to flag REQ_SPECIAL and put whatever structure
> > you want in ->special.
>
> Hmm .. I though SPECIAL was "just" to ensure ordering of requests and
> I went to some lengths to ensure that if I receive a request then we
> start diverting incoming requests to an alternate queue until we have
> treated all the requests already on the device queue! Then we ack the
> special and pass the requests back from the alternate queue. You are
> telling me that I needn't have bothered since I'm the only one who
> could generate a special? Owww.

No, ->special is for the driver receiving the request, I don't know what
kind of bastard driver you are trying to create :-). If you pass it on,
you cannot use it.

But your code just using the after-last bit is still severly broken, you
must not play tricks like that.

Actually, sounds like you are attempting to create an io stack at the
wrong level. Why aren't you just hooking into ->make_request_fn()
instead? You are in for all sorts of pains doing what you describe
above.

--
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/