Messages in this thread Patch in this message | | | Date | Tue, 15 Jan 2002 14:08:52 +0100 | From | Jens Axboe <> | Subject | Re: [PATCH] O_DIRECT with hardware blocksize alignment |
| |
On Tue, Jan 15 2002, Andrea Arcangeli wrote: > actually we could also forbid merging at the ll_rw_block layer if b_size > is not equal, maybe that's the simpler solution to that problem after > all, merging between kiovec I/O and buffered I/O probably doesn't > matter.
Agreed, this is also what I suggested.
--- /opt/kernel/linux-2.4.18-pre3/drivers/block/ll_rw_blk.c Tue Jan 15 14:06:13 2002 +++ drivers/block/ll_rw_blk.c Tue Jan 15 14:07:23 2002 @@ -694,10 +694,11 @@ switch (el_ret) { case ELEVATOR_BACK_MERGE: - if (!q->back_merge_fn(q, req, bh, max_segments)) { - insert_here = &req->queue; + insert_here = &req->queue; + if (!q->back_merge_fn(q, req, bh, max_segments)) + break; + if (req->current_nr_sectors != (bh->b_size >> 9)) break; - } elevator->elevator_merge_cleanup_fn(q, req, count); req->bhtail->b_reqnext = bh; req->bhtail = bh; @@ -708,10 +709,11 @@ goto out; case ELEVATOR_FRONT_MERGE: - if (!q->front_merge_fn(q, req, bh, max_segments)) { - insert_here = req->queue.prev; + insert_here = req->queue.prev; + if (!q->front_merge_fn(q, req, bh, max_segments)) + break; + if (req->current_nr_sectors != (bh->b_size >> 9)) break; - } elevator->elevator_merge_cleanup_fn(q, req, count); bh->b_reqnext = req->bh; req->bh = bh; -- 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/
| |