All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] dm: Fix alignment stacking on partitioned devices
@ 2009-12-23 18:07 Mike Snitzer
  2009-12-23 19:21 ` Mike Snitzer
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Mike Snitzer @ 2009-12-23 18:07 UTC (permalink / raw)
  To: dm-devel; +Cc: Martin K. Petersen

From: Martin K. Petersen <martin.petersen@oracle.com> 

The DM device limits function passes the start offset within the block
device to the block layer stacking function.  The stacking function
expects the provided start offset to be relative to start of the disk
(request_queue).  Until now DM was passing a start offset that was
relative to beginning of the partition (block_device), resulting in
incorrect alignment stacking.

Add the partition offset to the values passed to blk_stack_limits().

Also clarify, in the DMWARN message, that the device which caused
blk_stack_limits() to return failure isn't necessarily misaligned
itself.  It caused the top-level (DM) device to have inconsistent
alignment when taken in combination with all previously stacked
device(s).

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
---
 drivers/md/dm-table.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index be62547..44527c1 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -495,6 +495,7 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
 	struct queue_limits *limits = data;
 	struct block_device *bdev = dev->bdev;
 	struct request_queue *q = bdev_get_queue(bdev);
+	sector_t offset = (get_start_sect(bdev) + start) << 9;
 	char b[BDEVNAME_SIZE];
 
 	if (unlikely(!q)) {
@@ -503,15 +504,15 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
 		return 0;
 	}
 
-	if (blk_stack_limits(limits, &q->limits, start << 9) < 0)
-		DMWARN("%s: target device %s is misaligned: "
+	if (blk_stack_limits(limits, &q->limits, offset) < 0)
+		DMWARN("%s: adding target device %s caused an alignment inconsistency: "
 		       "physical_block_size=%u, logical_block_size=%u, "
 		       "alignment_offset=%u, start=%llu",
 		       dm_device_name(ti->table->md), bdevname(bdev, b),
 		       q->limits.physical_block_size,
 		       q->limits.logical_block_size,
 		       q->limits.alignment_offset,
-		       (unsigned long long) start << 9);
+		       (unsigned long long) offset);
 
 
 	/*

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2010-01-09  0:01 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-23 18:07 [PATCH v2] dm: Fix alignment stacking on partitioned devices Mike Snitzer
2009-12-23 19:21 ` Mike Snitzer
2010-01-05 18:04 ` Alasdair G Kergon
2010-01-05 18:27 ` Alasdair G Kergon
2010-01-06  2:23   ` Martin K. Petersen
2010-01-06  2:57     ` Mike Snitzer
2010-01-06  3:03       ` Mike Snitzer
2010-01-06  3:24       ` Martin K. Petersen
2010-01-06  4:10         ` Mike Snitzer
2010-01-06  4:16           ` Martin K. Petersen
2010-01-06  5:16             ` Mike Snitzer
2010-01-06  8:39               ` Martin K. Petersen
2010-01-06 13:25                 ` Mike Snitzer
2010-01-07 17:15                   ` Martin K. Petersen
2010-01-07 18:55                     ` Mike Snitzer
2010-01-08 18:41                       ` Martin K. Petersen
2010-01-08 20:28                         ` Mike Snitzer
2010-01-09  0:01                   ` [PATCH] block: bdev_stack_limits wrapper and DM topology fixes Mike Snitzer
2010-01-06 13:55                 ` [PATCH v2] dm: Fix alignment stacking on partitioned devices Alasdair G Kergon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.