]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
md: merge mddev serialize_policy into mddev_flags
authorYu Kuai <yukuai@fnnas.com>
Wed, 14 Jan 2026 17:12:32 +0000 (01:12 +0800)
committerYu Kuai <yukuai@fnnas.com>
Mon, 26 Jan 2026 05:10:51 +0000 (13:10 +0800)
There is not need to use a separate field in struct mddev, there are no
functional changes.

Link: https://lore.kernel.org/linux-raid/20260114171241.3043364-5-yukuai@fnnas.com
Signed-off-by: Yu Kuai <yukuai@fnnas.com>
Reviewed-by: Li Nan <linan122@huawei.com>
drivers/md/md-bitmap.c
drivers/md/md.c
drivers/md/md.h
drivers/md/raid0.c
drivers/md/raid1.c
drivers/md/raid5.c

index 84b7e2af6dbaa51bb7ae2f07fe28ec37bacba54e..dbe4c4b9a1dafbf7070bd22ba3c24e62451db826 100644 (file)
@@ -2085,7 +2085,7 @@ static void bitmap_destroy(struct mddev *mddev)
                return;
 
        bitmap_wait_behind_writes(mddev);
-       if (!mddev->serialize_policy)
+       if (!test_bit(MD_SERIALIZE_POLICY, &mddev->flags))
                mddev_destroy_serial_pool(mddev, NULL);
 
        mutex_lock(&mddev->bitmap_info.mutex);
@@ -2809,7 +2809,7 @@ backlog_store(struct mddev *mddev, const char *buf, size_t len)
        mddev->bitmap_info.max_write_behind = backlog;
        if (!backlog && mddev->serial_info_pool) {
                /* serial_info_pool is not needed if backlog is zero */
-               if (!mddev->serialize_policy)
+               if (!test_bit(MD_SERIALIZE_POLICY, &mddev->flags))
                        mddev_destroy_serial_pool(mddev, NULL);
        } else if (backlog && !mddev->serial_info_pool) {
                /* serial_info_pool is needed since backlog is not zero */
index b955eba7f461baa57aaa06f69560f79ad00ff1c5..43791d72c0c3742cd6511e1ba0673deab968667f 100644 (file)
@@ -279,7 +279,8 @@ void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
 
                rdev_for_each(temp, mddev) {
                        if (!rdev) {
-                               if (!mddev->serialize_policy ||
+                               if (!test_bit(MD_SERIALIZE_POLICY,
+                                             &mddev->flags) ||
                                    !rdev_need_serial(temp))
                                        rdev_uninit_serial(temp);
                                else
@@ -5897,11 +5898,12 @@ static ssize_t serialize_policy_show(struct mddev *mddev, char *page)
        if (mddev->pers == NULL || (mddev->pers->head.id != ID_RAID1))
                return sprintf(page, "n/a\n");
        else
-               return sprintf(page, "%d\n", mddev->serialize_policy);
+               return sprintf(page, "%d\n",
+                              test_bit(MD_SERIALIZE_POLICY, &mddev->flags));
 }
 
 /*
- * Setting serialize_policy to true to enforce write IO is not reordered
+ * Setting MD_SERIALIZE_POLICY enforce write IO is not reordered
  * for raid1.
  */
 static ssize_t
@@ -5914,7 +5916,7 @@ serialize_policy_store(struct mddev *mddev, const char *buf, size_t len)
        if (err)
                return err;
 
-       if (value == mddev->serialize_policy)
+       if (value == test_bit(MD_SERIALIZE_POLICY, &mddev->flags))
                return len;
 
        err = mddev_suspend_and_lock(mddev);
@@ -5926,11 +5928,13 @@ serialize_policy_store(struct mddev *mddev, const char *buf, size_t len)
                goto unlock;
        }
 
-       if (value)
+       if (value) {
                mddev_create_serial_pool(mddev, NULL);
-       else
+               set_bit(MD_SERIALIZE_POLICY, &mddev->flags);
+       } else {
                mddev_destroy_serial_pool(mddev, NULL);
-       mddev->serialize_policy = value;
+               clear_bit(MD_SERIALIZE_POLICY, &mddev->flags);
+       }
 unlock:
        mddev_unlock_and_resume(mddev);
        return err ?: len;
@@ -6867,7 +6871,7 @@ static void __md_stop_writes(struct mddev *mddev)
                md_update_sb(mddev, 1);
        }
        /* disable policy to guarantee rdevs free resources for serialization */
-       mddev->serialize_policy = 0;
+       clear_bit(MD_SERIALIZE_POLICY, &mddev->flags);
        mddev_destroy_serial_pool(mddev, NULL);
 }
 
index 297a104fba887a82eba8cca4be03cc250e720714..6ee18045f41c3d53c4b5e11dc238460074f1174f 100644 (file)
@@ -342,6 +342,7 @@ struct md_cluster_operations;
  * @MD_DELETED: This device is being deleted
  * @MD_HAS_SUPERBLOCK: There is persistence sb in member disks.
  * @MD_FAILLAST_DEV: Allow last rdev to be removed.
+ * @MD_SERIALIZE_POLICY: Enforce write IO is not reordered, just used by raid1.
  *
  * change UNSUPPORTED_MDDEV_FLAGS for each array type if new flag is added
  */
@@ -360,6 +361,7 @@ enum mddev_flags {
        MD_DELETED,
        MD_HAS_SUPERBLOCK,
        MD_FAILLAST_DEV,
+       MD_SERIALIZE_POLICY,
 };
 
 enum mddev_sb_flags {
@@ -626,8 +628,6 @@ struct mddev {
 
        /* The sequence number for sync thread */
        atomic_t sync_seq;
-
-       bool    serialize_policy:1;
 };
 
 enum recovery_flags {
index 4d567fcf6a7ca7ff28338e2dafb6592cc745727c..d83b2b1c004984a3d857b474a0c9723953bed5ef 100644 (file)
@@ -28,7 +28,8 @@ module_param(default_layout, int, 0644);
         (1L << MD_FAILFAST_SUPPORTED) |\
         (1L << MD_HAS_PPL) |           \
         (1L << MD_HAS_MULTIPLE_PPLS) | \
-        (1L << MD_FAILLAST_DEV))
+        (1L << MD_FAILLAST_DEV) |      \
+        (1L << MD_SERIALIZE_POLICY))
 
 /*
  * inform the user of the raid configuration
index 98b5c93810bb93b9c0598d9911cdb0f9948d0885..f4c7004888afb250e1924844b7f897b682d96ec1 100644 (file)
@@ -542,7 +542,7 @@ static void raid1_end_write_request(struct bio *bio)
                                call_bio_endio(r1_bio);
                        }
                }
-       } else if (rdev->mddev->serialize_policy)
+       } else if (test_bit(MD_SERIALIZE_POLICY, &rdev->mddev->flags))
                remove_serial(rdev, lo, hi);
        if (r1_bio->bios[mirror] == NULL)
                rdev_dec_pending(rdev, conf->mddev);
@@ -1644,7 +1644,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
                        mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO,
                                               &mddev->bio_set);
 
-                       if (mddev->serialize_policy)
+                       if (test_bit(MD_SERIALIZE_POLICY, &mddev->flags))
                                wait_for_serialization(rdev, r1_bio);
                }
 
index 055293e56a7e2c9f95a21d1d8d185673f043bf24..6d44609f62f301b402a776b9df62c1c5db7e1062 100644 (file)
@@ -58,7 +58,8 @@
 
 #define UNSUPPORTED_MDDEV_FLAGS                \
        ((1L << MD_FAILFAST_SUPPORTED) |        \
-        (1L << MD_FAILLAST_DEV))
+        (1L << MD_FAILLAST_DEV) |              \
+        (1L << MD_SERIALIZE_POLICY))
 
 
 #define cpu_to_group(cpu) cpu_to_node(cpu)