/*
* mdadm - manage Linux "md" devices aka RAID arrays.
*
- * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
+ * Copyright (C) 2001-2006 Neil Brown <neilb@suse.de>
*
*
* This program is free software; you can redistribute it and/or modify
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 *name, char *homehost,
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)
array.chunk_size = chunk*1024;
array.major_version = st->ss->major;
- if (!st->ss->init_super(st, &super, &array, size, name))
+ if (name == NULL || *name == 0) {
+ /* base name on mddev */
+ name = strrchr(mddev, '/');
+ if (name) {
+ name++;
+ if (strncmp(name, "md", 2)==0 &&
+ strlen(name) > 2 &&
+ (name-mddev) == 5 /* /dev/ */)
+ name += 2;
+ }
+ }
+ if (!st->ss->init_super(st, &super, &array, size, name, homehost))
return 1;
if (bitmap_file && vers < 9003) {
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, write_behind,
break;
case 2:
if (disk.state == 1) break;
+ Kill(dv->devname, 0, 1); /* Just be sure it is clean */
+ Kill(dv->devname, 0, 1); /* and again, there could be two superblocks */
st->ss->write_init_super(st, super, &disk, dv->devname);
if (ioctl(mdfd, ADD_NEW_DISK, &disk)) {