[kernel] r16610 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Mon Nov 29 01:39:40 UTC 2010


Author: benh
Date: Mon Nov 29 01:39:38 2010
New Revision: 16610

Log:
dm: Deal with merge_bvec_fn in component devices better (Closes: #604457)

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/base

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Mon Nov 29 01:38:32 2010	(r16609)
+++ dists/trunk/linux-2.6/debian/changelog	Mon Nov 29 01:39:38 2010	(r16610)
@@ -21,6 +21,7 @@
     explicitly loaded or aliased on systems where they are wanted.
   * debian/rules: Change 'clean' rule to remove package build directories
     even after a version bump, thanks to Timo Juhani Lindfors
+  * dm: Deal with merge_bvec_fn in component devices better (Closes: #604457)
 
  -- maximilian attems <max at stro.at>  Wed, 31 Oct 2010 13:23:11 +0200
 

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch	Mon Nov 29 01:39:38 2010	(r16610)
@@ -0,0 +1,57 @@
+From b31595992e52f94bd87c122dfad9cc37f15f82dc Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 28 Nov 2010 23:46:46 +0000
+Subject: [PATCH] dm: Deal with merge_bvec_fn in component devices better
+
+This is analogous to commit 627a2d3c29427637f4c5d31ccc7fcbd8d312cd71,
+which does the same for md-devices at the top of the stack.  The
+following explanation is taken from that commit.  Thanks to Neil Brown
+<neilb at suse.de> for the advice.
+
+If a component device has a merge_bvec_fn then as we never call it
+we must ensure we never need to.  Currently this is done by setting
+max_sector to 1 PAGE, however this does not stop a bio being created
+with several sub-page iovecs that would violate the merge_bvec_fn.
+
+So instead set max_segments to 1 and set the segment boundary to the
+same as a page boundary to ensure there is only ever one single-page
+segment of IO requested at a time.
+
+This can particularly be an issue when 'xen' is used as it is
+known to submit multiple small buffers in a single bio.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ drivers/md/dm-table.c |   14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
+index 90267f8..776734d 100644
+--- a/drivers/md/dm-table.c
++++ b/drivers/md/dm-table.c
+@@ -511,15 +511,15 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
+ 		       (unsigned long long) start << SECTOR_SHIFT);
+ 
+ 	/*
+-	 * Check if merge fn is supported.
+-	 * If not we'll force DM to use PAGE_SIZE or
+-	 * smaller I/O, just to be safe.
++	 * If we don't call merge_bvec_fn, we must never risk
++	 * violating it, so limit max_phys_segments to 1 lying within
++	 * a single page.
+ 	 */
++	if (q->merge_bvec_fn && !ti->type->merge) {
++		limits->max_segments = 1;
++		limits->seg_boundary_mask = PAGE_CACHE_SIZE - 1;
++	}
+ 
+-	if (q->merge_bvec_fn && !ti->type->merge)
+-		limits->max_sectors =
+-			min_not_zero(limits->max_sectors,
+-				     (unsigned int) (PAGE_SIZE >> 9));
+ 	return 0;
+ }
+ EXPORT_SYMBOL_GPL(dm_set_device_limits);
+-- 
+1.7.2.3
+

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Mon Nov 29 01:38:32 2010	(r16609)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Mon Nov 29 01:39:38 2010	(r16610)
@@ -39,3 +39,4 @@
 + bugfix/x86/Skip-looking-for-ioapic-overrides-when-ioapics-are-not-present.patch
 + bugfix/arm/ixp4xx-add-missing-export.patch
 + features/arm/asoc-openrd-ultimate.patch
++ bugfix/all/dm-Deal-with-merge_bvec_fn-in-component-devices-bett.patch



More information about the Kernel-svn-changes mailing list