summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-03-29 02:57:48 +0000
committerNeil Brown <neilb@suse.de>2006-03-29 02:57:48 +0000
commit7ef02d01432952ee677beca7b0f90b653b3d336b (patch)
treea3288a38053ede6c2a24051f53cb115f3a1813cb
parent2ae555c3d97336365063b5f6937646818667c482 (diff)
downloadmdadm-7ef02d01432952ee677beca7b0f90b653b3d336b.tar.gz
mdadm-7ef02d01432952ee677beca7b0f90b653b3d336b.tar.xz
mdadm-7ef02d01432952ee677beca7b0f90b653b3d336b.zip
Support 'bitmap=' in mdadm.conf for auto-assembling arrays with write-intent bitmaps in separate files.
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r--Assemble.c16
-rw-r--r--ChangeLog2
-rw-r--r--config.c8
-rw-r--r--mdadm.c1
-rw-r--r--mdadm.conf.512
-rw-r--r--mdadm.h1
6 files changed, 39 insertions, 1 deletions
diff --git a/Assemble.c b/Assemble.c
index f38b1a1..a856456 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -623,8 +623,22 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
fprintf(stderr, Name ": SET_BITMAP_FILE failed.\n");
return 1;
}
+ } else if (ident->bitmap_file) {
+ /* From config file */
+ int bmfd = open(ident->bitmap_file, O_RDWR);
+ if (bmfd < 0) {
+ fprintf(stderr, Name ": Could not open bitmap file %s\n",
+ ident->bitmap_file);
+ return 1;
+ }
+ if (ioctl(mdfd, SET_BITMAP_FILE, bmfd) != 0) {
+ fprintf(stderr, Name ": Failed to set bitmapfile for %s\n", mddev);
+ close(bmfd);
+ return 1;
+ }
+ close(bmfd);
}
-
+
/* First, add the raid disks, but add the chosen one last */
for (i=0; i<= bestcnt; i++) {
int j;
diff --git a/ChangeLog b/ChangeLog
index ae7ea25..3b7c62e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,8 @@ Changes Prior to 2.4 release
- Handle symlinks in /dev better
- Fix mess in --detail output which a device is missing.
- Manpage tidyup
+ - Support 'bitmap=' in mdadm.conf for auto-assembling arrays with
+ write-intent bitmaps in separate files.
Changes Prior to 2.3.1 release
- Fixed -O2 compile so I could make and RPM.
diff --git a/config.c b/config.c
index 1408b25..bb22b0e 100644
--- a/config.c
+++ b/config.c
@@ -281,6 +281,7 @@ void arrayline(char *line)
mis.next = NULL;
mis.st = NULL;
mis.bitmap_fd = -1;
+ mis.bitmap_file = NULL;
mis.name[0] = 0;
for (w=dl_next(line); w!=line; w=dl_next(w)) {
@@ -321,6 +322,13 @@ void arrayline(char *line)
else
strcpy(mis.name, w+5);
+ } else if (strncasecmp(w, "bitmap=", 7) == 0) {
+ if (mis.bitmap_file)
+ fprintf(stderr, Name ": only specify bitmap file once. %s ignored\n",
+ w);
+ else
+ mis.bitmap_file = w+7;
+
} else if (strncasecmp(w, "devices=", 8 ) == 0 ) {
if (mis.devices)
fprintf(stderr, Name ": only specify devices once (use a comma separated list). %s ignored\n",
diff --git a/mdadm.c b/mdadm.c
index 6a5fac3..05784e1 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -112,6 +112,7 @@ int main(int argc, char *argv[])
ident.autof = 0;
ident.st = NULL;
ident.bitmap_fd = -1;
+ ident.bitmap_file = NULL;
ident.name[0] = 0;
while ((option_index = -1) ,
diff --git a/mdadm.conf.5 b/mdadm.conf.5
index 09e9132..9181465 100644
--- a/mdadm.conf.5
+++ b/mdadm.conf.5
@@ -151,6 +151,18 @@ also have a number appended to indicate how many partitions to create
device files for, e.g.
.BR auto=mdp5 .
The default is 4.
+
+.TP
+.B bitmap=
+The option specifies a file in which a write-intent bitmap should be
+found. When assembling the array,
+.I mdadm
+will provide this file to the
+.B md
+driver as the bitmap file. This has the same function as the
+.B --bitmap-file
+option to
+.BR --assemble .
.RE
.TP
diff --git a/mdadm.h b/mdadm.h
index b16c75a..74672f7 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -147,6 +147,7 @@ typedef struct mddev_ident_s {
struct supertype *st;
int autof; /* 1 for normal, 2 for partitioned */
char *spare_group;
+ char *bitmap_file;
int bitmap_fd;
struct mddev_ident_s *next;