]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
md/md-bitmap: simplify md_bitmap_create() + md_bitmap_load()
authorYu Kuai <yukuai3@huawei.com>
Mon, 26 Aug 2024 07:44:22 +0000 (15:44 +0800)
committerSong Liu <song@kernel.org>
Tue, 27 Aug 2024 17:14:15 +0000 (10:14 -0700)
Other than internal api get_bitmap_from_slot(), all other places will
set returned bitmap to mddev->bitmap. So move the setting of
mddev->bitmap into md_bitmap_create() to simplify code.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20240826074452.1490072-13-yukuai1@huaweicloud.com
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/md-bitmap.c
drivers/md/md-bitmap.h
drivers/md/md.c

index 69d9c959fe49a81db11c1c6791a32a7df07ebe5f..2f3ff8e641217f5541e6179b40ecd1f784f52900 100644 (file)
@@ -1879,7 +1879,7 @@ void md_bitmap_destroy(struct mddev *mddev)
  * if this returns an error, bitmap_destroy must be called to do clean up
  * once mddev->bitmap is set
  */
-struct bitmap *md_bitmap_create(struct mddev *mddev, int slot)
+static struct bitmap *__bitmap_create(struct mddev *mddev, int slot)
 {
        struct bitmap *bitmap;
        sector_t blocks = mddev->resync_max_sectors;
@@ -1966,6 +1966,17 @@ struct bitmap *md_bitmap_create(struct mddev *mddev, int slot)
        return ERR_PTR(err);
 }
 
+int md_bitmap_create(struct mddev *mddev, int slot)
+{
+       struct bitmap *bitmap = __bitmap_create(mddev, slot);
+
+       if (IS_ERR(bitmap))
+               return PTR_ERR(bitmap);
+
+       mddev->bitmap = bitmap;
+       return 0;
+}
+
 int md_bitmap_load(struct mddev *mddev)
 {
        int err = 0;
@@ -2030,7 +2041,7 @@ struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot)
        int rv = 0;
        struct bitmap *bitmap;
 
-       bitmap = md_bitmap_create(mddev, slot);
+       bitmap = __bitmap_create(mddev, slot);
        if (IS_ERR(bitmap)) {
                rv = PTR_ERR(bitmap);
                return ERR_PTR(rv);
@@ -2384,7 +2395,6 @@ location_store(struct mddev *mddev, const char *buf, size_t len)
        } else {
                /* No bitmap, OK to set a location */
                long long offset;
-               struct bitmap *bitmap;
 
                if (strncmp(buf, "none", 4) == 0)
                        /* nothing to be done */;
@@ -2411,13 +2421,10 @@ location_store(struct mddev *mddev, const char *buf, size_t len)
                        }
 
                        mddev->bitmap_info.offset = offset;
-                       bitmap = md_bitmap_create(mddev, -1);
-                       if (IS_ERR(bitmap)) {
-                               rv = PTR_ERR(bitmap);
+                       rv = md_bitmap_create(mddev, -1);
+                       if (rv)
                                goto out;
-                       }
 
-                       mddev->bitmap = bitmap;
                        rv = md_bitmap_load(mddev);
                        if (rv) {
                                mddev->bitmap_info.offset = 0;
index 14c21ab42f9ed743d8ad22816722de977683b74e..d66f447f4be63a24941584b46a93e8df8e763665 100644 (file)
@@ -253,7 +253,7 @@ struct bitmap_operations {
 void mddev_set_bitmap_ops(struct mddev *mddev);
 
 /* these are used only by md/bitmap */
-struct bitmap *md_bitmap_create(struct mddev *mddev, int slot);
+int md_bitmap_create(struct mddev *mddev, int slot);
 int md_bitmap_load(struct mddev *mddev);
 void md_bitmap_flush(struct mddev *mddev);
 void md_bitmap_destroy(struct mddev *mddev);
index f86e6911318f91ae8380ca5409be63197800f4fb..7a041640c313a536f95fd0ec434a2edfe545525c 100644 (file)
@@ -6224,16 +6224,10 @@ int md_run(struct mddev *mddev)
        }
        if (err == 0 && pers->sync_request &&
            (mddev->bitmap_info.file || mddev->bitmap_info.offset)) {
-               struct bitmap *bitmap;
-
-               bitmap = md_bitmap_create(mddev, -1);
-               if (IS_ERR(bitmap)) {
-                       err = PTR_ERR(bitmap);
+               err = md_bitmap_create(mddev, -1);
+               if (err)
                        pr_warn("%s: failed to create bitmap (%d)\n",
                                mdname(mddev), err);
-               } else
-                       mddev->bitmap = bitmap;
-
        }
        if (err)
                goto bitmap_abort;
@@ -7288,14 +7282,10 @@ static int set_bitmap_file(struct mddev *mddev, int fd)
        err = 0;
        if (mddev->pers) {
                if (fd >= 0) {
-                       struct bitmap *bitmap;
-
-                       bitmap = md_bitmap_create(mddev, -1);
-                       if (!IS_ERR(bitmap)) {
-                               mddev->bitmap = bitmap;
+                       err = md_bitmap_create(mddev, -1);
+                       if (!err)
                                err = md_bitmap_load(mddev);
-                       } else
-                               err = PTR_ERR(bitmap);
+
                        if (err) {
                                md_bitmap_destroy(mddev);
                                fd = -1;
@@ -7304,6 +7294,7 @@ static int set_bitmap_file(struct mddev *mddev, int fd)
                        md_bitmap_destroy(mddev);
                }
        }
+
        if (fd < 0) {
                struct file *f = mddev->bitmap_info.file;
                if (f) {
@@ -7572,7 +7563,6 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
                        goto err;
                }
                if (info->state & (1<<MD_SB_BITMAP_PRESENT)) {
-                       struct bitmap *bitmap;
                        /* add the bitmap */
                        if (mddev->bitmap) {
                                rv = -EEXIST;
@@ -7586,12 +7576,10 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
                                mddev->bitmap_info.default_offset;
                        mddev->bitmap_info.space =
                                mddev->bitmap_info.default_space;
-                       bitmap = md_bitmap_create(mddev, -1);
-                       if (!IS_ERR(bitmap)) {
-                               mddev->bitmap = bitmap;
+                       rv = md_bitmap_create(mddev, -1);
+                       if (!rv)
                                rv = md_bitmap_load(mddev);
-                       } else
-                               rv = PTR_ERR(bitmap);
+
                        if (rv)
                                md_bitmap_destroy(mddev);
                } else {