diff options
author | Artur Paszkiewicz <artur.paszkiewicz@intel.com> | 2017-05-08 05:56:55 -0400 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-05-08 13:32:59 -0400 |
commit | 2214c260c72b0bd94e6c1c19bf451686212025d3 (patch) | |
tree | 829a3494857d6bd61c38171a39e2e207de585e38 /drivers/md/raid1.c | |
parent | 3d05f3aed5d721c2c77d20288c29ab26c6193ed5 (diff) |
md: don't return -EAGAIN in md_allow_write for external metadata arrays
This essentially reverts commit b5470dc5fc18 ("md: resolve external
metadata handling deadlock in md_allow_write") with some adjustments.
Since commit 6791875e2e53 ("md: make reconfig_mutex optional for writes
to md sysfs files.") changing array_state to 'active' does not use
mddev_lock() and will not cause a deadlock with md_allow_write(). This
revert simplifies userspace tools that write to sysfs attributes like
"stripe_cache_size" or "consistency_policy" because it removes the need
for special handling for external metadata arrays, checking for EAGAIN
and retrying the write.
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r-- | drivers/md/raid1.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 7ed59351fe97..7c1f73398800 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -3197,7 +3197,7 @@ static int raid1_reshape(struct mddev *mddev) | |||
3197 | struct r1conf *conf = mddev->private; | 3197 | struct r1conf *conf = mddev->private; |
3198 | int cnt, raid_disks; | 3198 | int cnt, raid_disks; |
3199 | unsigned long flags; | 3199 | unsigned long flags; |
3200 | int d, d2, err; | 3200 | int d, d2; |
3201 | 3201 | ||
3202 | /* Cannot change chunk_size, layout, or level */ | 3202 | /* Cannot change chunk_size, layout, or level */ |
3203 | if (mddev->chunk_sectors != mddev->new_chunk_sectors || | 3203 | if (mddev->chunk_sectors != mddev->new_chunk_sectors || |
@@ -3209,11 +3209,8 @@ static int raid1_reshape(struct mddev *mddev) | |||
3209 | return -EINVAL; | 3209 | return -EINVAL; |
3210 | } | 3210 | } |
3211 | 3211 | ||
3212 | if (!mddev_is_clustered(mddev)) { | 3212 | if (!mddev_is_clustered(mddev)) |
3213 | err = md_allow_write(mddev); | 3213 | md_allow_write(mddev); |
3214 | if (err) | ||
3215 | return err; | ||
3216 | } | ||
3217 | 3214 | ||
3218 | raid_disks = mddev->raid_disks + mddev->delta_disks; | 3215 | raid_disks = mddev->raid_disks + mddev->delta_disks; |
3219 | 3216 | ||