/*
* mdadm - manage Linux "md" devices aka RAID arrays.
*
- * Copyright (C) 2001-2006 Neil Brown <neilb@suse.de>
+ * Copyright (C) 2001-2009 Neil Brown <neilb@suse.de>
*
*
* This program is free software; you can redistribute it and/or modify
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Neil Brown
- * Email: <neilb@cse.unsw.edu.au>
- * Paper: Neil Brown
- * School of Computer Science and Engineering
- * The University of New South Wales
- * Sydney, 2052
- * Australia
+ * Email: <neilb@suse.de>
*/
#include "mdadm.h"
int Build(char *mddev, int chunk, int level, int layout,
int raiddisks, mddev_dev_t devlist, int assume_clean,
char *bitmap_file, int bitmap_chunk, int write_behind,
- int delay, int verbose, int autof)
+ int delay, int verbose, int autof, unsigned long long size)
{
/* Build a linear or raid0 arrays without superblocks
* We cannot really do any checks, we just do it.
int subdevs = 0, missing_disks = 0;
mddev_dev_t dv;
int bitmap_fd;
- unsigned long long size = ~0ULL;
unsigned long long bitmapsize;
int mdfd;
+ char chosen_name[1024];
+ int uuid[4] = {0,0,0,0};
+ struct map_ent *map = NULL;
/* scan all devices, make sure they really are block devices */
for (dv = devlist; dv; dv=dv->next) {
}
/* We need to create the device. It can have no name. */
- mdfd = create_mddev(mddev, NULL, autof, LOCAL, NULL);
- if (mdfd < 0)
+ map_lock(&map);
+ mdfd = create_mddev(mddev, NULL, autof, LOCAL,
+ chosen_name);
+ if (mdfd < 0) {
+ map_unlock(&map);
return 1;
+ }
+ mddev = chosen_name;
+
+ map_update(&map, fd2devnum(mdfd), "none", uuid, chosen_name);
+ map_unlock(&map);
vers = md_get_version(mdfd);
if (vers >= 9000) {
mdu_array_info_t array;
array.level = level;
- array.size = 0;
+ array.size = size;
array.nr_disks = raiddisks;
array.raid_disks = raiddisks;
array.md_minor = 0;
(size == 0 || dsize < size))
size = dsize;
close(fd);
- if (vers>= 9000) {
+ if (vers >= 9000) {
mdu_disk_info_t disk;
disk.number = i;
disk.raid_disk = i;
if (verbose >= 0)
fprintf(stderr, Name ": array %s built and started.\n",
mddev);
+ wait_for(mddev, mdfd);
close(mdfd);
return 0;