summaryrefslogtreecommitdiff
path: root/Create.c
diff options
context:
space:
mode:
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/Create.c b/Create.c
index 9e65d0a..385d9a9 100644
--- a/Create.c
+++ b/Create.c
@@ -37,7 +37,8 @@ int Create(struct supertype *st, char *mddev, int mdfd,
char *name, char *homehost, int *uuid,
int subdevs, mddev_dev_t devlist,
int runstop, int verbose, int force, int assume_clean,
- char *bitmap_file, int bitmap_chunk, int write_behind, int delay)
+ char *bitmap_file, int bitmap_chunk, int write_behind, int delay,
+ unsigned long reserve_space)
{
/*
* Create a new raid array.
@@ -235,7 +236,8 @@ int Create(struct supertype *st, char *mddev, int mdfd,
*/
int i;
char *name = "default";
- if (level >= 1 && ldsize > (0x7fffffffULL<<10))
+ if (reserve_space ||
+ (level >= 1 && ldsize > (0x7fffffffULL<<10)))
name = "default/large";
for(i=0; !st && superlist[i]; i++)
st = superlist[i]->match_metadata_desc(name);
@@ -251,7 +253,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
st->ss->major,
st->minor_version);
}
- freesize = st->ss->avail_size(st, ldsize >> 9);
+ freesize = st->ss->avail_size(st, ldsize >> 9, reserve_space);
if (freesize == 0) {
fprintf(stderr, Name ": %s is too small: %luK\n",
dname, (unsigned long)(ldsize>>10));
@@ -450,7 +452,8 @@ int Create(struct supertype *st, char *mddev, int mdfd,
name += 2;
}
}
- if (!st->ss->init_super(st, &info.array, size, name, homehost, uuid))
+ if (!st->ss->init_super(st, &info.array, size, name, homehost,
+ uuid, reserve_space))
return 1;
if (bitmap_file && vers < 9003) {