int Create(struct supertype *st, char *mddev, int mdfd,
int chunk, int level, int layout, unsigned long long size, int raiddisks, int sparedisks,
- char *name, char *homehost,
+ 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)
dnum = 0;
for (dv=devlist; dv; dv=dv->next, dnum++) {
char *dname = dv->devname;
- unsigned long dsize;
unsigned long long ldsize, freesize;
int fd;
if (strcasecmp(dname, "missing")==0) {
fail=1;
continue;
}
-#ifdef BLKGETSIZE64
- if (ioctl(fd, BLKGETSIZE64, &ldsize)==0)
- ;
- else
-#endif
- if (ioctl(fd, BLKGETSIZE, &dsize)) {
- fprintf(stderr, Name ": Cannot get size of %s: %s\n",
- dname, strerror(errno));
+ if (!get_dev_size(fd, dname, &ldsize)) {
fail = 1;
close(fd);
continue;
}
- else {
- ldsize = dsize;
- ldsize <<= 9;
- }
if (st == NULL) {
struct createinfo *ci = conf_get_create_info();
if (ci)
name += 2;
}
}
- if (!st->ss->init_super(st, &super, &array, size, name, homehost))
+ if (!st->ss->init_super(st, &super, &array, size, name, homehost, uuid))
return 1;
if (bitmap_file && vers < 9003) {
fprintf(stderr, Name ": internal bitmaps not supported by this kernel.\n");
return 1;
}
- if (!st->ss->add_internal_bitmap(st, super, bitmap_chunk, delay, write_behind,
+ if (!st->ss->add_internal_bitmap(st, super, &bitmap_chunk,
+ delay, write_behind,
bitmapsize, 1, major)) {
fprintf(stderr, Name ": Given bitmap chunk size not supported.\n");
return 1;