From 7ef02d01432952ee677beca7b0f90b653b3d336b Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 29 Mar 2006 02:57:48 +0000 Subject: [PATCH] Support 'bitmap=' in mdadm.conf for auto-assembling arrays with write-intent bitmaps in separate files. Signed-off-by: Neil Brown --- Assemble.c | 16 +++++++++++++++- ChangeLog | 2 ++ config.c | 8 ++++++++ mdadm.c | 1 + mdadm.conf.5 | 12 ++++++++++++ mdadm.h | 1 + 6 files changed, 39 insertions(+), 1 deletion(-) diff --git a/Assemble.c b/Assemble.c index f38b1a14..a856456c 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 ae7ea25b..3b7c62ef 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 1408b252..bb22b0eb 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 6a5fac3f..05784e1d 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 09e91327..91814650 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 b16c75a9..74672f7c 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; -- 2.39.2