Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1
mdadm
0008-mdadm-add-the-ability-to-change-cluster-na...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0008-mdadm-add-the-ability-to-change-cluster-name.patch of Package mdadm
From d7b65ec07097024bde8e02dbc49f3f905774b152 Mon Sep 17 00:00:00 2001 From: Guoqing Jiang <gqjiang@suse.com> Date: Tue, 7 Jul 2015 14:56:49 +0800 Subject: [PATCH 08/11] mdadm: add the ability to change cluster name To support change the cluster name, the commit do the followings: 1. extend original write_bitmap function for new scenario. 2. add the scenarion to handle the modification of cluster's name in write_bitmap1. 3. let the cluster name also show in examine_super1 and detail_super1 Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: NeilBrown <neilb@suse.de> --- Assemble.c | 5 ++++- Grow.c | 2 +- bitmap.c | 2 +- mdadm.8.in | 6 ++++++ mdadm.c | 5 ++++- mdadm.h | 7 ++++++- super0.c | 4 ++-- super1.c | 23 +++++++++++++++++++++-- 8 files changed, 45 insertions(+), 9 deletions(-) diff --git a/Assemble.c b/Assemble.c index aca28be..25dfb5a 100644 --- a/Assemble.c +++ b/Assemble.c @@ -624,7 +624,10 @@ static int load_devices(struct devs *devices, char *devmap, if (strcmp(c->update, "byteorder") == 0) err = 0; - else + else if (strcmp(c->update, "home-cluster") == 0) { + tst->cluster_name = c->homecluster; + tst->ss->write_bitmap(tst, dfd, NameUpdate); + } else err = tst->ss->update_super(tst, content, c->update, devname, c->verbose, ident->uuid_set, diff --git a/Grow.c b/Grow.c index b25473f..2d785de 100644 --- a/Grow.c +++ b/Grow.c @@ -417,7 +417,7 @@ int Grow_addbitmap(char *devname, int fd, struct context *c, struct shape *s) bitmapsize, offset_setable, major) ) - st->ss->write_bitmap(st, fd2); + st->ss->write_bitmap(st, fd2, NoUpdate); else { pr_err("failed to create internal bitmap" " - chunksize problem.\n"); diff --git a/bitmap.c b/bitmap.c index 9cb93fb..c7085ee 100644 --- a/bitmap.c +++ b/bitmap.c @@ -344,7 +344,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st) 100.0 * info->dirty_bits / (info->total_bits?:1)); } else { printf(" Cluster nodes : %d\n", sb->nodes); - printf(" Cluster name : %64s\n", sb->cluster_name); + printf(" Cluster name : %-64s\n", sb->cluster_name); for (i = 0; i < (int)sb->nodes; i++) { if (i) { free(info); diff --git a/mdadm.8.in b/mdadm.8.in index 4367246..f0e3030 100644 --- a/mdadm.8.in +++ b/mdadm.8.in @@ -1113,6 +1113,7 @@ argument given to this flag can be one of .BR uuid , .BR name , .BR homehost , +.BR home-cluster , .BR resync , .BR byteorder , .BR devicesize , @@ -1175,6 +1176,11 @@ same as updating the UUID. For version-1 superblocks, this involves updating the name. The +.B home\-cluster +option will change the cluster name as recorded in the superblock and +bitmap. This option only works for clustered environment. + +The .B resync option will cause the array to be marked .I dirty diff --git a/mdadm.c b/mdadm.c index be2c5ac..694fd36 100644 --- a/mdadm.c +++ b/mdadm.c @@ -617,6 +617,7 @@ int main(int argc, char *argv[]) } continue; case O(CREATE, ClusterName): + case O(ASSEMBLE, ClusterName): c.homecluster = optarg; if (strlen(c.homecluster) > 64) { pr_err("Cluster name too big.\n"); @@ -765,6 +766,8 @@ int main(int argc, char *argv[]) continue; if (strcmp(c.update, "homehost")==0) continue; + if (strcmp(c.update, "home-cluster")==0) + continue; if (strcmp(c.update, "devicesize")==0) continue; if (strcmp(c.update, "no-bitmap")==0) @@ -806,7 +809,7 @@ int main(int argc, char *argv[]) } fprintf(outf, "Valid --update options are:\n" " 'sparc2.2', 'super-minor', 'uuid', 'name', 'resync',\n" - " 'summaries', 'homehost', 'byteorder', 'devicesize',\n" + " 'summaries', 'homehost', 'home-cluster', 'byteorder', 'devicesize',\n" " 'no-bitmap', 'metadata', 'revert-reshape'\n"); exit(outf == stdout ? 0 : 2); diff --git a/mdadm.h b/mdadm.h index a45bd03..f2eb015 100644 --- a/mdadm.h +++ b/mdadm.h @@ -355,6 +355,11 @@ enum prefix_standard { IEC }; +enum bitmap_update { + NoUpdate, + NameUpdate, +}; + /* structures read from config file */ /* List of mddevice names and identifiers * Identifiers can be: @@ -854,7 +859,7 @@ extern struct superswitch { /* if add_internal_bitmap succeeded for existing array, this * writes it out. */ - int (*write_bitmap)(struct supertype *st, int fd); + int (*write_bitmap)(struct supertype *st, int fd, enum bitmap_update update); /* Free the superblock and any other allocated data */ void (*free_super)(struct supertype *st); diff --git a/super0.c b/super0.c index a7ea78b..4093a05 100644 --- a/super0.c +++ b/super0.c @@ -904,7 +904,7 @@ static int write_init_super0(struct supertype *st) rv = store_super0(st, di->fd); if (rv == 0 && (sb->state & (1<<MD_SB_BITMAP_PRESENT))) - rv = st->ss->write_bitmap(st, di->fd); + rv = st->ss->write_bitmap(st, di->fd, NoUpdate); if (rv) pr_err("failed to write superblock to %s\n", @@ -1179,7 +1179,7 @@ static void locate_bitmap0(struct supertype *st, int fd) lseek64(fd, offset, 0); } -static int write_bitmap0(struct supertype *st, int fd) +static int write_bitmap0(struct supertype *st, int fd, enum bitmap_update update) { unsigned long long dsize; unsigned long long offset; diff --git a/super1.c b/super1.c index 78524dd..ea027aa 100644 --- a/super1.c +++ b/super1.c @@ -259,6 +259,7 @@ static int awrite(struct align_fd *afd, void *buf, int len) static void examine_super1(struct supertype *st, char *homehost) { struct mdp_superblock_1 *sb = st->sb; + bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb)+MAX_SB_SIZE); time_t atime; unsigned int d; int role; @@ -292,6 +293,8 @@ static void examine_super1(struct supertype *st, char *homehost) strncmp(sb->set_name, homehost, l) == 0) printf(" (local to host %s)", homehost); printf("\n"); + if (bms->nodes > 0) + printf(" Cluster Name : %-64s\n", bms->cluster_name); atime = __le64_to_cpu(sb->ctime) & 0xFFFFFFFFFFULL; printf(" Creation Time : %.24s\n", ctime(&atime)); c=map_num(pers, __le32_to_cpu(sb->level)); @@ -745,6 +748,7 @@ err: static void detail_super1(struct supertype *st, char *homehost) { struct mdp_superblock_1 *sb = st->sb; + bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb) + MAX_SB_SIZE); int i; int l = homehost ? strlen(homehost) : 0; @@ -753,6 +757,8 @@ static void detail_super1(struct supertype *st, char *homehost) sb->set_name[l] == ':' && strncmp(sb->set_name, homehost, l) == 0) printf(" (local to host %s)", homehost); + if (bms->nodes > 0) + printf("\n Cluster Name : %-64s", bms->cluster_name); printf("\n UUID : "); for (i=0; i<16; i++) { if ((i&3)==0 && i != 0) printf(":"); @@ -1707,7 +1713,7 @@ static int write_init_super1(struct supertype *st) sb->sb_csum = calc_sb_1_csum(sb); rv = store_super1(st, di->fd); if (rv == 0 && (__le32_to_cpu(sb->feature_map) & 1)) - rv = st->ss->write_bitmap(st, di->fd); + rv = st->ss->write_bitmap(st, di->fd, NoUpdate); close(di->fd); di->fd = -1; if (rv) @@ -2188,7 +2194,7 @@ static void locate_bitmap1(struct supertype *st, int fd) lseek64(fd, offset<<9, 0); } -static int write_bitmap1(struct supertype *st, int fd) +static int write_bitmap1(struct supertype *st, int fd, enum bitmap_update update) { struct mdp_superblock_1 *sb = st->sb; bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb)+MAX_SB_SIZE); @@ -2198,6 +2204,19 @@ static int write_bitmap1(struct supertype *st, int fd) struct align_fd afd; unsigned int i = 0; + switch (update) { + case NameUpdate: + /* update cluster name */ + if (st->cluster_name) { + memset((char *)bms->cluster_name, 0, sizeof(bms->cluster_name)); + strncpy((char *)bms->cluster_name, st->cluster_name, 64); + } + break; + case NoUpdate: + default: + break; + } + init_afd(&afd, fd); locate_bitmap1(st, fd); -- 1.7.12.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor