On Thu, 30 Apr 2015 11:34:05 +0800 Guoqing Jiang <jgq516@xxxxxxxxx> wrote: > NeilBrown wrote: > > On Fri, 24 Apr 2015 15:30:40 +0800 gqjiang@xxxxxxxx wrote: > > > > > >> From: Guoqing Jiang <gqjiang@xxxxxxxx> > >> > >> This extends nodes option for assemble mode, make the num of > >> cluster node could be change by user. > >> > >> Signed-off-by: Guoqing Jiang <gqjiang@xxxxxxxx> > >> --- > >> Assemble.c | 4 ++++ > >> ReadMe.c | 2 +- > >> mdadm.c | 3 +++ > >> mdadm.h | 1 + > >> super1.c | 6 ++++++ > >> 5 files changed, 15 insertions(+), 1 deletion(-) > >> > >> diff --git a/Assemble.c b/Assemble.c > >> index e1b846c..22042a9 100644 > >> --- a/Assemble.c > >> +++ b/Assemble.c > >> @@ -649,6 +649,10 @@ static int load_devices(struct devs *devices, char *devmap, > >> devname, 0, 0, c->homecluster); > >> tst->ss->write_bitmap(tst, dfd, NameUpdate); > >> } > >> + if (strcmp(c->update, "nodes") == 0) { > >> + tst->nodes = c->nodes; > >> + tst->ss->write_bitmap(tst, dfd, NodeNumUpdate); > >> + } > >> > > > > Doesn't there need to be some test that there is enough free space on all > > devices to store the extra bitmaps (when nodes is increasing)?? > > > > > Agree, could you pls elaborate more about the test? I guess the test > need to be run > before write_bitmap1call the awrite(&afd, buf, n). Normally we don't increase the size of a bitmap while it is alive. When an array is reshaped, bitmap_resize in the kernel actually changes the bitmap chunk size if necessary so that the bitmap will fit in the available space. To make the bitmap larger, the only current approach is to delete the bitmap and add a new one. This is handled by add_internal_bitmap1 in mdadm. So make the bitmap bigger you will need to perform similar calculations taht add_internal_bitmap1 performs, though instead of choosing a size or chunksize, you see need to check if the space is sufficient. Hope that helps, NeilBrown
Attachment:
pgpXLVmufx3h1.pgp
Description: OpenPGP digital signature