diff options
author | Neil Brown <neilb@suse.de> | 2005-06-07 23:03:47 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2005-06-07 23:03:47 +0000 |
commit | 55935d51800231d7c4ee26fafe5553f8a1471d09 (patch) | |
tree | ba5714b8195ff6ccaf4913a7d29024ce98ac2b9c /Create.c | |
parent | e793c2e583740e9364c1285f61e14e687a1fbca1 (diff) | |
download | mdadm-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.c | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -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 */)) { |