diff options
author | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2014-06-06 13:43:49 -0400 |
---|---|---|
committer | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-02-23 10:57:57 -0500 |
commit | f9209a323547f054c7439a3bf67c45e64a054bdd (patch) | |
tree | 74049528c1addac29ced018eca283352c33da750 /drivers/md/md.c | |
parent | 96ae923ab659e37dd5fc1e05ecbf654e2f94bcbe (diff) |
bitmap_create returns bitmap pointer
This is done to have multiple bitmaps open at the same time.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 71f655015385..630a9142a819 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -5076,10 +5076,16 @@ int md_run(struct mddev *mddev) | |||
5076 | } | 5076 | } |
5077 | if (err == 0 && pers->sync_request && | 5077 | if (err == 0 && pers->sync_request && |
5078 | (mddev->bitmap_info.file || mddev->bitmap_info.offset)) { | 5078 | (mddev->bitmap_info.file || mddev->bitmap_info.offset)) { |
5079 | err = bitmap_create(mddev); | 5079 | struct bitmap *bitmap; |
5080 | if (err) | 5080 | |
5081 | bitmap = bitmap_create(mddev, -1); | ||
5082 | if (IS_ERR(bitmap)) { | ||
5083 | err = PTR_ERR(bitmap); | ||
5081 | printk(KERN_ERR "%s: failed to create bitmap (%d)\n", | 5084 | printk(KERN_ERR "%s: failed to create bitmap (%d)\n", |
5082 | mdname(mddev), err); | 5085 | mdname(mddev), err); |
5086 | } else | ||
5087 | mddev->bitmap = bitmap; | ||
5088 | |||
5083 | } | 5089 | } |
5084 | if (err) { | 5090 | if (err) { |
5085 | mddev_detach(mddev); | 5091 | mddev_detach(mddev); |
@@ -6039,9 +6045,13 @@ static int set_bitmap_file(struct mddev *mddev, int fd) | |||
6039 | if (mddev->pers) { | 6045 | if (mddev->pers) { |
6040 | mddev->pers->quiesce(mddev, 1); | 6046 | mddev->pers->quiesce(mddev, 1); |
6041 | if (fd >= 0) { | 6047 | if (fd >= 0) { |
6042 | err = bitmap_create(mddev); | 6048 | struct bitmap *bitmap; |
6043 | if (!err) | 6049 | |
6050 | bitmap = bitmap_create(mddev, -1); | ||
6051 | if (!IS_ERR(bitmap)) { | ||
6052 | mddev->bitmap = bitmap; | ||
6044 | err = bitmap_load(mddev); | 6053 | err = bitmap_load(mddev); |
6054 | } | ||
6045 | } | 6055 | } |
6046 | if (fd < 0 || err) { | 6056 | if (fd < 0 || err) { |
6047 | bitmap_destroy(mddev); | 6057 | bitmap_destroy(mddev); |
@@ -6306,6 +6316,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info) | |||
6306 | if (mddev->recovery || mddev->sync_thread) | 6316 | if (mddev->recovery || mddev->sync_thread) |
6307 | return -EBUSY; | 6317 | return -EBUSY; |
6308 | if (info->state & (1<<MD_SB_BITMAP_PRESENT)) { | 6318 | if (info->state & (1<<MD_SB_BITMAP_PRESENT)) { |
6319 | struct bitmap *bitmap; | ||
6309 | /* add the bitmap */ | 6320 | /* add the bitmap */ |
6310 | if (mddev->bitmap) | 6321 | if (mddev->bitmap) |
6311 | return -EEXIST; | 6322 | return -EEXIST; |
@@ -6316,9 +6327,11 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info) | |||
6316 | mddev->bitmap_info.space = | 6327 | mddev->bitmap_info.space = |
6317 | mddev->bitmap_info.default_space; | 6328 | mddev->bitmap_info.default_space; |
6318 | mddev->pers->quiesce(mddev, 1); | 6329 | mddev->pers->quiesce(mddev, 1); |
6319 | rv = bitmap_create(mddev); | 6330 | bitmap = bitmap_create(mddev, -1); |
6320 | if (!rv) | 6331 | if (!IS_ERR(bitmap)) { |
6332 | mddev->bitmap = bitmap; | ||
6321 | rv = bitmap_load(mddev); | 6333 | rv = bitmap_load(mddev); |
6334 | } | ||
6322 | if (rv) | 6335 | if (rv) |
6323 | bitmap_destroy(mddev); | 6336 | bitmap_destroy(mddev); |
6324 | mddev->pers->quiesce(mddev, 0); | 6337 | mddev->pers->quiesce(mddev, 0); |