[dm-devel] [PATCH 1/2] blkdev: fix merge_bvec_fn return value checks

Lars Ellenberg lars.ellenberg at linbit.com
Fri Mar 5 19:20:27 UTC 2010


On Fri, Mar 05, 2010 at 05:37:16PM +0000, Alasdair G Kergon wrote:
> On Thu, Mar 04, 2010 at 06:59:21PM +0100, Lars Ellenberg wrote:
> > +		/* Restricting max_sectors is not enough.
> > +		 * If someone uses bio_add_page to add 8 disjunct 512 byte
> > +		 * partial pages to a bio, it would succeed,
> > +		 * but could still cross a border of whatever restrictions
> > +		 * are below us (raid0 stripe boundary).  An attempted
> > +		 * bio_split would not succeed, because bi_vcnt is 8.
> > +		 * E.g. the xen io layer is known to trigger this.
> > +		 */
> 
> Sounds plausible.
> 
> Do you or anyone readingt his have example messages demonstrating the failure
> when this patch is not applied?

This has been an issue said two years ago when using Xen VMs on DRBD clusters.
My original summary post once the issue was understood is
http://archives.free.net.ph/message/20080523.161104.054c63ef.html

(the gmane link therein seems to be broken now, is not really of
interesst here anyways, but, just in case, equivalent with
http://archives.free.net.ph/message/20080410.212155.d9e0243d.html)

Actual error messages looked like
kernel: drbd3: bio would need to, but cannot, be split: (vcnt=8,idx=0,size=4096,sector=13113083)
kernel: drbd3: bio would need to, but cannot, be split: (vcnt=8,idx=0,size=4096,sector=13113149)
kernel: drbd3: bio would need to, but cannot, be split: (vcnt=8,idx=0,size=4096,sector=13113215)

 bi_size is only 4k, but bi_vcnt is 8.

These had been submitted by Xen virtio on a typical VM image with the
legacy 63 sector offset into the first "partition".

You'd have the exact same issue (with slightly different error printk's)
on md raid0, or any other bio consumer with boundary restrictions not
having "generic" bio split logic, but directly using bio_split(),
as that does
	BUG_ON(bi->bi_vcnt != 1);
	BUG_ON(bi->bi_idx != 0);

-- 
: Lars Ellenberg
: LINBIT | Your Way to High Availability
: DRBD/HA support and consulting http://www.linbit.com

DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.




More information about the dm-devel mailing list