Commit 25f7fd47 authored by NeilBrown's avatar NeilBrown

md: fix bug in handling of new_data_offset

commit c6563a8c
    md: add possibility to change data-offset for devices.

introduced a 'new_data_offset' attribute which should normally
be the same as 'data_offset', but can be explicitly set to a different
value to allow a reshape operation to move the data.

Unfortunately when the 'data_offset' is explicitly set through
sysfs, the new_data_offset is not also set, so the two would become
out-of-sync incorrectly.

One result of this is that trying to set the 'size' after the
'data_offset' would fail because it is not permitted to set the size
when the 'data_offset' and 'new_data_offset' are different - as that
can be confusing.
Consequently when mdadm tried to do this while assembling an IMSM
array it would fail.

This bug was introduced in 3.5-rc1.
Reported-by: default avatarBrian Downing <bdowning@lavos.net>
Bisected-by: default avatarBrian Downing <bdowning@lavos.net>
Tested-by: default avatarBrian Downing <bdowning@lavos.net>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 84a1caf1
...@@ -2931,6 +2931,7 @@ offset_store(struct md_rdev *rdev, const char *buf, size_t len) ...@@ -2931,6 +2931,7 @@ offset_store(struct md_rdev *rdev, const char *buf, size_t len)
* can be sane */ * can be sane */
return -EBUSY; return -EBUSY;
rdev->data_offset = offset; rdev->data_offset = offset;
rdev->new_data_offset = offset;
return len; return len;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment