aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/md.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 1db88d79549a..a612b9f83069 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6925,6 +6925,7 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
6925 void __user *argp = (void __user *)arg; 6925 void __user *argp = (void __user *)arg;
6926 struct mddev *mddev = NULL; 6926 struct mddev *mddev = NULL;
6927 int ro; 6927 int ro;
6928 bool did_set_md_closing = false;
6928 6929
6929 if (!md_ioctl_valid(cmd)) 6930 if (!md_ioctl_valid(cmd))
6930 return -ENOTTY; 6931 return -ENOTTY;
@@ -7014,7 +7015,9 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
7014 err = -EBUSY; 7015 err = -EBUSY;
7015 goto out; 7016 goto out;
7016 } 7017 }
7018 WARN_ON_ONCE(test_bit(MD_CLOSING, &mddev->flags));
7017 set_bit(MD_CLOSING, &mddev->flags); 7019 set_bit(MD_CLOSING, &mddev->flags);
7020 did_set_md_closing = true;
7018 mutex_unlock(&mddev->open_mutex); 7021 mutex_unlock(&mddev->open_mutex);
7019 sync_blockdev(bdev); 7022 sync_blockdev(bdev);
7020 } 7023 }
@@ -7207,6 +7210,8 @@ unlock:
7207 mddev->hold_active = 0; 7210 mddev->hold_active = 0;
7208 mddev_unlock(mddev); 7211 mddev_unlock(mddev);
7209out: 7212out:
7213 if(did_set_md_closing)
7214 clear_bit(MD_CLOSING, &mddev->flags);
7210 return err; 7215 return err;
7211} 7216}
7212#ifdef CONFIG_COMPAT 7217#ifdef CONFIG_COMPAT