summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-01-27 01:44:47 +0000
committerNeil Brown <neilb@suse.de>2006-01-27 01:44:47 +0000
commit838acbc2724c57f9dc1facec201d20f09a81d375 (patch)
tree1a677a68c68492d43e7c870cd3193bd79fa35642
parentd2cd3ffc026ae8dbc09d5243ec60694afe26e81b (diff)
downloadmdadm-838acbc2724c57f9dc1facec201d20f09a81d375.tar.gz
mdadm-838acbc2724c57f9dc1facec201d20f09a81d375.tar.xz
mdadm-838acbc2724c57f9dc1facec201d20f09a81d375.zip
Assorted fixes...
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r--Assemble.c4
-rw-r--r--Create.c2
-rw-r--r--TODO19
-rw-r--r--bitmap.c5
-rw-r--r--mdadm.h4
-rw-r--r--super1.c2
6 files changed, 33 insertions, 3 deletions
diff --git a/Assemble.c b/Assemble.c
index 0555854..cc906db 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 dc01df5..0399732 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 a282744..f79163b 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 bdfd405..afa10cf 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 32b3e24..b643ead 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 e4a5e0d..75f0c8a 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;