From 838acbc2724c57f9dc1facec201d20f09a81d375 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Fri, 27 Jan 2006 01:44:47 +0000 Subject: [PATCH] Assorted fixes... Signed-off-by: Neil Brown --- Assemble.c | 4 +++- Create.c | 2 +- TODO | 19 +++++++++++++++++++ bitmap.c | 5 +++++ mdadm.h | 4 ++++ super1.c | 2 +- 6 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Assemble.c b/Assemble.c index 05558545..cc906db5 100644 --- a/Assemble.c +++ b/Assemble.c @@ -219,7 +219,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd, } if (dfd >= 0) close(dfd); - if (ident->uuid_set && (!update && strcmp(update, "uuid")!= 0) && + if (ident->uuid_set && (!update || strcmp(update, "uuid")!= 0) && (!super || same_uuid(info.uuid, ident->uuid, tst->ss->swapuuid)==0)) { if ((inargv && verbose >= 0) || verbose > 0) fprintf(stderr, Name ": %s has wrong uuid.\n", @@ -266,6 +266,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd, free(first_super); return 1; } + + st = tst; /* commit to this format, if haven't already */ if (st->ss->compare_super(&first_super, super)) { fprintf(stderr, Name ": superblock on %s doesn't match others - assembly aborted\n", diff --git a/Create.c b/Create.c index dc01df5f..0399732b 100644 --- a/Create.c +++ b/Create.c @@ -364,7 +364,7 @@ int Create(struct supertype *st, char *mddev, int mdfd, array.nr_disks = array.working_disks + array.failed_disks; array.layout = layout; array.chunk_size = chunk*1024; - + array.major_version = st->ss->major; if (!st->ss->init_super(st, &super, &array, name)) return 1; diff --git a/TODO b/TODO index a282744a..f79163b8 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,22 @@ +2005-dec-20 + Want an incremental assembly mode to work nicely with udev. + Core usage would be something like + mdadm --incr-assemble /dev/newdevice + This would + - examine the device to determine uuid etc. + - look for a match in /etc/mdadm.conf, abort if not found + - find that device and collect current contents + - perform an 'assemble' analysis to make sure we have the best set of devices. + - remove or add devices as appropriate + - possibly start the array if it was complete + + Other usages could involve + - specify which array to auto-add to. + This requires an existing array for uuid matching... is there any point? + + - + + 2004-june-02 * Don't print 'errors' flag, it is meaningless. DONE * Handle new superblock format diff --git a/bitmap.c b/bitmap.c index bdfd4055..afa10cf0 100644 --- a/bitmap.c +++ b/bitmap.c @@ -126,8 +126,13 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief) info = malloc(sizeof(*info)); if (info == NULL) { +#if __GNUC__ < 3 + fprintf(stderr, Name ": failed to allocate %d bytes\n", + (int)sizeof(*info)); +#else fprintf(stderr, Name ": failed to allocate %zd bytes\n", sizeof(*info)); +#endif return NULL; } diff --git a/mdadm.h b/mdadm.h index 32b3e241..b643eada 100644 --- a/mdadm.h +++ b/mdadm.h @@ -211,6 +211,10 @@ struct supertype { extern struct supertype *super_by_version(int vers, int minor); extern struct supertype *guess_super(int fd); +#if __GNUC__ < 3 +struct stat64; +#endif + #ifdef UCLIBC struct FTW {}; # define FTW_PHYS 1 diff --git a/super1.c b/super1.c index e4a5e0d1..75f0c8ae 100644 --- a/super1.c +++ b/super1.c @@ -396,7 +396,7 @@ static int update_super1(struct mdinfo *info, void *sbv, char *update, char *dev sb->resync_offset = ~0ULL; } if (strcmp(update, "uuid") == 0) - memcmp(sb->set_uuid, info->uuid, 16); + memcpy(sb->set_uuid, info->uuid, 16); sb->sb_csum = calc_sb_1_csum(sb); return rv; -- 2.39.2