Assorted fixes...

Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
Neil Brown 2006-01-27 01:44:47 +00:00
parent d2cd3ffc02
commit 838acbc272
6 changed files with 33 additions and 3 deletions

View File

@ -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",

View File

@ -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;

19
TODO
View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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;