]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
md: check mddev->pers before calling md_set_readonly()
authorLi Nan <linan122@huawei.com>
Mon, 26 Feb 2024 03:14:44 +0000 (11:14 +0800)
committerSong Liu <song@kernel.org>
Mon, 26 Feb 2024 18:22:22 +0000 (10:22 -0800)
If 'mddev->pers' is NULL, there is nothing to do in md_set_readonly().
Except for md_ioctl(), the other two callers of md_set_readonly() have
already checked 'mddev->pers'. To simplify the code, move the check of
'mddev->pers' to the caller.

Signed-off-by: Li Nan <linan122@huawei.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20240226031444.3606764-10-linan666@huaweicloud.com
drivers/md/md.c

index 9b61e4cf796be6c4e9e6ce72375259b4cbee7fb5..48ae2b1cb57af565df369f47b199869f36a96d0e 100644 (file)
@@ -6420,6 +6420,7 @@ void md_stop(struct mddev *mddev)
 
 EXPORT_SYMBOL_GPL(md_stop);
 
+/* ensure 'mddev->pers' exist before calling md_set_readonly() */
 static int md_set_readonly(struct mddev *mddev)
 {
        int err = 0;
@@ -6444,20 +6445,18 @@ static int md_set_readonly(struct mddev *mddev)
                goto out;
        }
 
-       if (mddev->pers) {
-               __md_stop_writes(mddev);
-
-               if (mddev->ro == MD_RDONLY) {
-                       err  = -ENXIO;
-                       goto out;
-               }
+       __md_stop_writes(mddev);
 
-               mddev->ro = MD_RDONLY;
-               set_disk_ro(mddev->gendisk, 1);
+       if (mddev->ro == MD_RDONLY) {
+               err  = -ENXIO;
+               goto out;
        }
 
+       mddev->ro = MD_RDONLY;
+       set_disk_ro(mddev->gendisk, 1);
+
 out:
-       if ((mddev->pers && !err) || did_freeze) {
+       if (!err || did_freeze) {
                clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
                set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
                sysfs_notify_dirent_safe(mddev->sysfs_state);
@@ -7730,7 +7729,8 @@ static int md_ioctl(struct block_device *bdev, blk_mode_t mode,
                goto unlock;
 
        case STOP_ARRAY_RO:
-               err = md_set_readonly(mddev);
+               if (mddev->pers)
+                       err = md_set_readonly(mddev);
                goto unlock;
 
        case HOT_REMOVE_DISK: