We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 8876391 commit 3de59bbCopy full SHA for 3de59bb
drivers/md/raid1.c
@@ -1809,6 +1809,17 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
1809
struct md_rdev *repl =
1810
conf->mirrors[conf->raid_disks + number].rdev;
1811
freeze_array(conf, 0);
1812
+ if (atomic_read(&repl->nr_pending)) {
1813
+ /* It means that some queued IO of retry_list
1814
+ * hold repl. Thus, we cannot set replacement
1815
+ * as NULL, avoiding rdev NULL pointer
1816
+ * dereference in sync_request_write and
1817
+ * handle_write_finished.
1818
+ */
1819
+ err = -EBUSY;
1820
+ unfreeze_array(conf);
1821
+ goto abort;
1822
+ }
1823
clear_bit(Replacement, &repl->flags);
1824
p->rdev = repl;
1825
conf->mirrors[conf->raid_disks + number].rdev = NULL;
0 commit comments