]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Assorted fixes...
authorNeil Brown <neilb@suse.de>
Fri, 27 Jan 2006 01:44:47 +0000 (01:44 +0000)
committerNeil Brown <neilb@suse.de>
Fri, 27 Jan 2006 01:44:47 +0000 (01:44 +0000)
Signed-off-by: Neil Brown <neilb@suse.de>
Assemble.c
Create.c
TODO
bitmap.c
mdadm.h
super1.c

index 05558545ca08a8364bb4809c2bc2aefc4e027da1..cc906db51bcfb09e296e7f98e829e1fca28bf69a 100644 (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",
index dc01df5f4f2b1abc811b4f3617d01bfa18560936..0399732bd286c1399840f9702f1f8b9a7b9ff39b 100644 (file)
--- 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 a282744a95f0b37a1076beaccd0e5b4ad439fbc7..f79163b88ca434065232034381af3a27aff23c25 100644 (file)
--- 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
index bdfd40556535f35282d83db7b6a08b187436c131..afa10cf00d21cc67b48debf2be35174a69424f05 100644 (file)
--- 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 32b3e241a39fcefec93e7a1cf7397c5c2e91200e..b643eada974a796d8d0f757044edbf737abfd589 100644 (file)
--- 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
index e4a5e0d12568e2cbff7a38905859899afb3be070..75f0c8ae121fbc5a1d068cc11cdd7160f775687e 100644 (file)
--- 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;