Support 'bitmap=' in mdadm.conf for auto-assembling arrays with write-intent bitmaps in separate files.

Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
Neil Brown 2006-03-29 02:57:48 +00:00
parent 2ae555c3d9
commit 7ef02d0143
6 changed files with 39 additions and 1 deletions

View File

@ -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;

View File

@ -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.

View File

@ -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",

View File

@ -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) ,

View File

@ -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

View File

@ -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;