Messages in this thread | | | Date | Thu, 4 Jul 2002 08:45:34 +0100 | Subject | Re: [linux-lvm] LVM2 modifies the buffer_head struct? | From | Joe Thornber <> |
| |
On Thu, Jul 04, 2002 at 02:46:20PM +1000, Neil Brown wrote: > I think this can work sanely and is something I have considered for > raid1-read and multipath in md. > > struct privatebit { > bio_end_io_t *oldend; > void *oldprivate; > ...other...stuff; > }; > > make_request(struct request_queue_t *q, struct buffer_head *bh, int rw) > { > > struct privatebit *pb = kmalloc(...); > > pb->oldend = bh->b_end_io; > pb->oldprivate = bh->b_private; > bh->b_private = pb; > bh->b_end_io = my_end_handler; > > ..remap b_rdev, b_rsector ... > > generic_make_request(bh, rw); > > } > > Then my_end_handler have do some local cleanup, > re-instate oldend and oldprivate, and pass the bh back up. > For raid1/multipath it would arrange to resubmit the request if there > as an error. > > This stacks nicely and allows for the extra bit to be alloced to be > minimal.
This is exactly what I'm doing in device-mapper :)
> Ofcourse this ceases to be an issue in 2.5 because the filesys uses > pages or buffer_heads and the device driver uses bios.
y, 2.5 is fine.
- Joe - 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/
| |