diff options
author | Guoqing Jiang <gqjiang@suse.com> | 2015-06-10 13:42:09 +0800 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2015-06-17 09:24:41 +1000 |
commit | 7c25f4d706ac14165fd8d85b169f491f1f14b7cc (patch) | |
tree | 5099a4c7b5e6c612b94f444472217a6738a2bdb8 | |
parent | 4de90913020923b69515630b8f19094d2e0d1d5a (diff) | |
download | mdadm-7c25f4d706ac14165fd8d85b169f491f1f14b7cc.tar.gz |
Convert a bitmap=none device to clustered
This adds the ability to convert a regular md without bitmap
(--bitmap=none) to a clustered device (--bitmap=clustered).
To convert a device with --bitmap=internal or --bitmap=external,
you have to convert to --bitmap=none and then re-execute the
command with --bitmap=clustered.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Grow.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -330,8 +330,7 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s) } return 0; } - pr_err("Internal bitmap already present on %s\n", - devname); + pr_err("%s bitmap already present on %s\n", s->bitmap_file, devname); return 1; } @@ -375,7 +374,8 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s) free(st); return 1; } - if (strcmp(s->bitmap_file, "internal") == 0) { + if (strcmp(s->bitmap_file, "internal") == 0 || + strcmp(s->bitmap_file, "clustered") == 0) { int rv; int d; int offset_setable = 0; @@ -384,6 +384,8 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s) pr_err("Internal bitmaps not supported with %s metadata\n", st->ss->name); return 1; } + st->nodes = c->nodes; + st->cluster_name = c->homecluster; mdi = sysfs_read(fd, NULL, GET_BITMAP_LOCATION); if (mdi) offset_setable = 1; @@ -426,6 +428,8 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s) rv = sysfs_set_num_signed(mdi, NULL, "bitmap/location", mdi->bitmap_offset); } else { + if (strcmp(s->bitmap_file, "clustered") == 0) + array.state |= (1<<MD_SB_CLUSTERED); array.state |= (1<<MD_SB_BITMAP_PRESENT); rv = ioctl(fd, SET_ARRAY_INFO, &array); } |