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;
- 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.
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)) {
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",
ident.autof = 0;
ident.st = NULL;
ident.bitmap_fd = -1;
+ ident.bitmap_file = NULL;
ident.name[0] = 0;
while ((option_index = -1) ,
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
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;