}
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",
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",
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;
+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
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;
}
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
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;