Re: [patch] My AMD IDE driver, v2.7

Linus Torvalds
2002-03-12T04:33:07Z

On Mon, 11 Mar 2002, Linus Torvalds wrote:
>
> - attach to one or more request queue(s). Notice that you should not have
> _one_ module that handles all request queues, because the filter module
> obviously has to be different for an ATA disk than for a SCSI disk, and
> in fact it might be different for an IBM ATA disk than for a Maxtor ATA
> disk, for example.

Btw, to tie this back to the other IDE thread, namely the suspend/resume
thing, I think things like that should also just push commands down the
request list. In particular, instead of waiting until the handler is NULL,
it should do something like

- create a "sync" request
- do the equivalent of

DECLARE_COMPLETION(wait);
rq->waiting = &wait;
q->elevator.elevator_add_req_fn(q, rq, queue_head);
wait_for_completion(&wait);

which automatically synchronizes with any outstanding requests (simply
by virtue of the elevator knowing not to re-order/merge special requests,
so when the sync command in finished, we know all other commands have
finished too).

Note that this should be the same code as for a shutdown as well - we
should finish with a flush buffers request and wait for it to have
completed.

I'd like a _lot_ of stuff to stop using "do_xxx_command()", and move toa
higher layer so that more code can be shared between different subsystems
(all of these "sync" issues are really completely generic, and should
_not_ be duplicated across drivers or subsystems).

Linus