md-bitmap: create and destroy wb_info_pool with the change of backlog
Since we can enable write-behind mode by write backlog node, so create wb_info_pool if the mode is just enabled, also call call md_bitmap_update_sb to make user aware the write-behind mode is enabled. Conversely, wb_info_pool should be destroyed when write-behind mode is disabled. Beside above, it is better to update bitmap sb if we change the number of max_write_behind. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Song Liu <songliubraving@fb.com>
This commit is contained in:
parent
963c555e75
commit
10c92fca63
1 changed files with 14 additions and 0 deletions
|
@ -2462,12 +2462,26 @@ static ssize_t
|
||||||
backlog_store(struct mddev *mddev, const char *buf, size_t len)
|
backlog_store(struct mddev *mddev, const char *buf, size_t len)
|
||||||
{
|
{
|
||||||
unsigned long backlog;
|
unsigned long backlog;
|
||||||
|
unsigned long old_mwb = mddev->bitmap_info.max_write_behind;
|
||||||
int rv = kstrtoul(buf, 10, &backlog);
|
int rv = kstrtoul(buf, 10, &backlog);
|
||||||
if (rv)
|
if (rv)
|
||||||
return rv;
|
return rv;
|
||||||
if (backlog > COUNTER_MAX)
|
if (backlog > COUNTER_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
mddev->bitmap_info.max_write_behind = backlog;
|
mddev->bitmap_info.max_write_behind = backlog;
|
||||||
|
if (!backlog && mddev->wb_info_pool) {
|
||||||
|
/* wb_info_pool is not needed if backlog is zero */
|
||||||
|
mempool_destroy(mddev->wb_info_pool);
|
||||||
|
mddev->wb_info_pool = NULL;
|
||||||
|
} else if (backlog && !mddev->wb_info_pool) {
|
||||||
|
/* wb_info_pool is needed since backlog is not zero */
|
||||||
|
struct md_rdev *rdev;
|
||||||
|
|
||||||
|
rdev_for_each(rdev, mddev)
|
||||||
|
mddev_create_wb_pool(mddev, rdev, false);
|
||||||
|
}
|
||||||
|
if (old_mwb != backlog)
|
||||||
|
md_bitmap_update_sb(mddev->bitmap);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue