Thread (9 messages) 9 messages, 2 authors, 2009-05-25

Re: [PATCH 2/6] md: Fix a bug in super_1_sync().

From: NeilBrown <hidden>
Date: 2009-05-25 09:49:30

On Mon, May 25, 2009 7:27 pm, Andre Noll wrote:
quoted hunk ↗ jump to hunk
The new_chunk fields of both struct mddev_s and struct mdp_superblock_1
are measured in bytes. However, in super_1_sync(), mddev->new_chunk
is converted to sectors before it assigned to sb->new_chunk.

This results in a too small number being stored in the in-memory
image of the superblock which could confuse the reshape process.

Signed-off-by: Andre Noll <redacted>
---
 drivers/md/md.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 48bdbdf..66e32e4 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1402,7 +1402,7 @@ static void super_1_sync(mddev_t *mddev, mdk_rdev_t
*rdev)
 		sb->new_layout = cpu_to_le32(mddev->new_layout);
 		sb->delta_disks = cpu_to_le32(mddev->delta_disks);
 		sb->new_level = cpu_to_le32(mddev->new_level);
-		sb->new_chunk = cpu_to_le32(mddev->new_chunk>>9);
+		sb->new_chunk = cpu_to_le32(mddev->new_chunk);
I think the current code is correct.
For v1.x metadata, the chunk size (both chunksize and new_chunk) is
stored in sectors.  in 0.90 it is stored in bytes. (in DDF, it is stored
as the base-2 log of sectors, but that is not relevant for the kernel).

So as mddev->new_chunk is (still) in bytes, we need to shift by 9.
??

I'll sort through the rest of the patches tomorrow, but that look fine.

Thanks,
NeilBrown

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help