summaryrefslogtreecommitdiffstats
path: root/Create.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-06-07 23:03:47 +0000
committerNeil Brown <neilb@suse.de>2005-06-07 23:03:47 +0000
commit55935d51800231d7c4ee26fafe5553f8a1471d09 (patch)
treeba5714b8195ff6ccaf4913a7d29024ce98ac2b9c /Create.c
parente793c2e583740e9364c1285f61e14e687a1fbca1 (diff)
downloadmdadm-55935d51800231d7c4ee26fafe5553f8a1471d09.tar.gz
mdadm-55935d51800231d7c4ee26fafe5553f8a1471d09.tar.xz
mdadm-55935d51800231d7c4ee26fafe5553f8a1471d09.zip
Add support for internal bitmaps
For version 0.90 superblocks, an internal bitmap can be specified at create. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/Create.c b/Create.c
index de9a44f..5a359ee 100644
--- a/Create.c
+++ b/Create.c
@@ -341,11 +341,26 @@ int Create(struct supertype *st, char *mddev, int mdfd,
array.nr_disks = array.working_disks + array.failed_disks;
array.layout = layout;
array.chunk_size = chunk*1024;
- printf("VERS = %d\n", vers);
+
if (!st->ss->init_super(&super, &array))
return 1;
+ if (bitmap_file && strcmp(bitmap_file, "internal")==0) {
+ if ((vers%100) < 2) {
+ fprintf(stderr, Name ": internal bitmaps not supported by this kernel.\n");
+ return 1;
+ }
+ if (!st->ss->add_internal_bitmap(super, bitmap_chunk, delay,
+ size ? size : maxsize)) {
+ fprintf(stderr, Name ": Given bitmap chunk size not supported.\n");
+ return 1;
+ }
+ bitmap_file = NULL;
+ }
+
+
+
if ((vers % 100) >= 1) { /* can use different versions */
mdu_array_info_t inf;
memset(&inf, 0, sizeof(inf));
@@ -362,6 +377,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
if (bitmap_file) {
int uuid[4];
+
+ if (bitmap_chunk == UnSet)
+ bitmap_chunk = DEFAULT_BITMAP_CHUNK;
+
st->ss->uuid_from_super(uuid, super);
if (CreateBitmap(bitmap_file, force, (char*)uuid, bitmap_chunk, delay,
array.size*2ULL /* FIXME wrong for raid10 */)) {