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 _______________________________________________ linux-lvm mailing list linux-lvm@sistina.com http://lists.sistina.com/mailman/listinfo/linux-lvm read the LVM HOW-TO at http://www.sistina.com/lvm/Pages/howto.html