Messages in this thread | | | Date | Wed, 7 Mar 2001 19:51:52 +0100 | From | Jens Axboe <> |
| |
On Wed, Mar 07 2001, Stephen C. Tweedie wrote: > > Yep, it's much harder than it seems. Especially because for the barrier > > to be really useful, having inter-request dependencies becomes a > > requirement. So you can say something like 'flush X and Y, but don't > > flush Y before X is done'. > > Yes. Fortunately, the simplest possible barrier is just a matter of > marking a request as non-reorderable, and then making sure that you > both flush the elevator queue before servicing that request, and defer > any subsequent requests until the barrier request has been satisfied. > One it has gone through, you can let through the deferred requests (in > order, up to the point at which you encounter another barrier).
The above should have been inter-queue dependencies. For one queue it's not a big issue, you basically described the whole sequence above. Either sequence it as zero for a non-empty queue and make sure the low level driver orders or flushes, or just hand it directly to the device.
My bigger concern is when the journalled fs has a log on a different queue.
> Only if the queue is empty can you give a barrier request directly to > the driver. The special optimisation you can do in this case with > SCSI is to continue to allow new requests through even before the > barrier has completed if the disk supports ordered queue tags.
Yep, IDE will have to pay the price of a flush.
-- 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/
| |