summaryrefslogtreecommitdiff
path: root/Create.c
diff options
context:
space:
mode:
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/Create.c b/Create.c
index 1717240b..e1b17373 100644
--- a/Create.c
+++ b/Create.c
@@ -34,7 +34,8 @@
int Create(struct supertype *st, char *mddev, int mdfd,
int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks,
int subdevs, mddev_dev_t devlist,
- int runstop, int verbose, int force)
+ int runstop, int verbose, int force,
+ char *bitmap_file, int bitmap_chunk, int delay)
{
/*
* Create a new raid array.
@@ -66,6 +67,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
int pass;
int vers;
int rv;
+ int bitmap_fd;
mdu_array_info_t array;
@@ -358,6 +360,26 @@ int Create(struct supertype *st, char *mddev, int mdfd,
return 1;
}
+ if (bitmap_file) {
+ int uuid[4];
+ st->ss->uuid_from_super(uuid, super);
+ if (CreateBitmap(bitmap_file, force, (char*)uuid, bitmap_chunk, delay,
+ array.size*2ULL /* FIXME wrong for raid10 */)) {
+ return 1;
+ }
+ bitmap_fd = open(bitmap_file, O_RDWR);
+ if (bitmap_fd < 0) {
+ fprintf(stderr, Name ": weird: %s cannot be openned\n",
+ bitmap_file);
+ return 1;
+ }
+ if (ioctl(mdfd, SET_BITMAP_FILE, bitmap_fd) < 0) {
+ fprintf(stderr, Name ": Cannot set bitmap file for %s: %s\n",
+ mddev, strerror(errno));
+ return 1;
+ }
+ }
+
for (pass=1; pass <=2 ; pass++) {