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
-
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/