md: check mddev->pers before calling md_set_readonly()
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
This commit is contained in:
+11
-11
@@ -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);
|
||||
__md_stop_writes(mddev);
|
||||
|
||||
if (mddev->ro == MD_RDONLY) {
|
||||
err = -ENXIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user