[PATCH v2 2/5] md/md-bitmap: add an extra sysfs argument to md_bitmap_create and destroy
Su Yue <[email protected]>
| Newsgroups | gmane.linux.raid |
|---|---|
| Message-ID | <[email protected]> |
For further use, no functional change. Signed-off-by: Su Yue <[email protected]> --- drivers/md/md-bitmap.c | 6 +++--- drivers/md/md.c | 36 ++++++++++++++++++------------------ drivers/md/md.h | 4 ++-- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index 2f24aae05552..ac06c9647bf0 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -2618,7 +2618,7 @@ location_store(struct mddev *mddev, const char *buf, size_t len) goto out; } - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); mddev->bitmap_info.offset = 0; if (mddev->bitmap_info.file) { struct file *f = mddev->bitmap_info.file; @@ -2659,14 +2659,14 @@ location_store(struct mddev *mddev, const char *buf, size_t len) */ mddev->bitmap_id = ID_BITMAP; mddev->bitmap_info.offset = offset; - rv = md_bitmap_create(mddev); + rv = md_bitmap_create(mddev, true); if (rv) goto out; rv = bitmap_load(mddev); if (rv) { mddev->bitmap_info.offset = 0; - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); goto out; } } diff --git a/drivers/md/md.c b/drivers/md/md.c index 8b1ecc370ad6..d3c8f77b4fe3 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -678,7 +678,7 @@ static void active_io_release(struct percpu_ref *ref) static void no_op(struct percpu_ref *r) {} -static bool mddev_set_bitmap_ops(struct mddev *mddev) +static bool mddev_set_bitmap_ops(struct mddev *mddev, bool create_sysfs) { struct bitmap_operations *old = mddev->bitmap_ops; struct md_submodule_head *head; @@ -703,7 +703,7 @@ static bool mddev_set_bitmap_ops(struct mddev *mddev) mddev->bitmap_ops = (void *)head; xa_unlock(&md_submodule); - if (!mddev_is_dm(mddev) && mddev->bitmap_ops->group) { + if (create_sysfs && !mddev_is_dm(mddev) && mddev->bitmap_ops->group) { if (sysfs_create_group(&mddev->kobj, mddev->bitmap_ops->group)) pr_warn("md: cannot register extra bitmap attributes for %s\n", mdname(mddev)); @@ -721,9 +721,9 @@ static bool mddev_set_bitmap_ops(struct mddev *mddev) return false; } -static void mddev_clear_bitmap_ops(struct mddev *mddev) +static void mddev_clear_bitmap_ops(struct mddev *mddev, bool remove_sysfs) { - if (!mddev_is_dm(mddev) && mddev->bitmap_ops && + if (remove_sysfs && !mddev_is_dm(mddev) && mddev->bitmap_ops && mddev->bitmap_ops->group) sysfs_remove_group(&mddev->kobj, mddev->bitmap_ops->group); @@ -6447,24 +6447,24 @@ static void md_safemode_timeout(struct timer_list *t) static int start_dirty_degraded; -int md_bitmap_create(struct mddev *mddev) +int md_bitmap_create(struct mddev *mddev, bool create_sysfs) { if (mddev->bitmap_id == ID_BITMAP_NONE) return -EINVAL; - if (!mddev_set_bitmap_ops(mddev)) + if (!mddev_set_bitmap_ops(mddev, create_sysfs)) return -ENOENT; return mddev->bitmap_ops->create(mddev); } -void md_bitmap_destroy(struct mddev *mddev) +void md_bitmap_destroy(struct mddev *mddev, bool remove_sysfs) { if (!md_bitmap_registered(mddev)) return; mddev->bitmap_ops->destroy(mddev); - mddev_clear_bitmap_ops(mddev); + mddev_clear_bitmap_ops(mddev, remove_sysfs); } int md_run(struct mddev *mddev) @@ -6612,7 +6612,7 @@ int md_run(struct mddev *mddev) } if (err == 0 && pers->sync_request && (mddev->bitmap_info.file || mddev->bitmap_info.offset)) { - err = md_bitmap_create(mddev); + err = md_bitmap_create(mddev, true); if (err) pr_warn("%s: failed to create bitmap (%d)\n", mdname(mddev), err); @@ -6685,7 +6685,7 @@ int md_run(struct mddev *mddev) pers->free(mddev, mddev->private); mddev->private = NULL; put_pers(pers); - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); return err; } EXPORT_SYMBOL_GPL(md_run); @@ -6702,7 +6702,7 @@ int do_md_run(struct mddev *mddev) if (md_bitmap_registered(mddev)) { err = mddev->bitmap_ops->load(mddev); if (err) { - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); goto out; } } @@ -6903,7 +6903,7 @@ static void __md_stop(struct mddev *mddev) { struct md_personality *pers = mddev->pers; - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); mddev_detach(mddev); spin_lock(&mddev->lock); mddev->pers = NULL; @@ -7680,16 +7680,16 @@ static int set_bitmap_file(struct mddev *mddev, int fd) err = 0; if (mddev->pers) { if (fd >= 0) { - err = md_bitmap_create(mddev); + err = md_bitmap_create(mddev, true); if (!err) err = mddev->bitmap_ops->load(mddev); if (err) { - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); fd = -1; } } else if (fd < 0) { - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); } } @@ -7996,12 +7996,12 @@ 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; - rv = md_bitmap_create(mddev); + rv = md_bitmap_create(mddev, true); if (!rv) rv = mddev->bitmap_ops->load(mddev); if (rv) - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); } else { struct md_bitmap_stats stats; @@ -8027,7 +8027,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info) put_cluster_ops(mddev); mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY; } - md_bitmap_destroy(mddev); + md_bitmap_destroy(mddev, true); mddev->bitmap_info.offset = 0; } } diff --git a/drivers/md/md.h b/drivers/md/md.h index ed69244af00d..4aaba3d7015c 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -895,8 +895,8 @@ static inline void safe_put_page(struct page *p) int register_md_submodule(struct md_submodule_head *msh); void unregister_md_submodule(struct md_submodule_head *msh); -int md_bitmap_create(struct mddev *mddev); -void md_bitmap_destroy(struct mddev *mddev); +int md_bitmap_create(struct mddev *mddev, bool create_sysfs); +void md_bitmap_destroy(struct mddev *mddev, bool remove_sysfs); extern struct md_thread *md_register_thread( void (*run)(struct md_thread *thread), -- 2.53.0