summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
111d01f)
Allow specifying metadata type when creating arrays etc.
int rv;
int bitmap_fd;
unsigned long long bitmapsize;
int rv;
int bitmap_fd;
unsigned long long bitmapsize;
struct mdinfo info;
int major_num = BITMAP_MAJOR_HI;
struct mdinfo info;
int major_num = BITMAP_MAJOR_HI;
+ sra = sysfs_read(mdfd, 0, 0);
- if ((vers % 100) >= 1) { /* can use different versions */
+ if (st->ss->external) {
+ char ver[100];
+ strcat(strcpy(ver, "external:"), st->ss->text_version);
+ if ((vers % 100) < 2 ||
+ sra == NULL ||
+ sysfs_set_str(sra, NULL, "metadata_version",
+ ver) < 0) {
+ fprintf(stderr, Name ": This kernel does not "
+ "support external metadata.\n");
+ return 1;
+ }
+ rv = 0;
+ } else if ((vers % 100) >= 1) { /* can use different versions */
mdu_array_info_t inf;
memset(&inf, 0, sizeof(inf));
inf.major_version = st->ss->major;
mdu_array_info_t inf;
memset(&inf, 0, sizeof(inf));
inf.major_version = st->ss->major;
for (pass=1; pass <=2 ; pass++) {
mddev_dev_t moved_disk = NULL; /* the disk that was moved out of the insert point */
for (pass=1; pass <=2 ; pass++) {
mddev_dev_t moved_disk = NULL; /* the disk that was moved out of the insert point */
- if (ioctl(mdfd, ADD_NEW_DISK, &info.disk)) {
- fprintf(stderr, Name ": ADD_NEW_DISK for %s failed: %s\n",
+ if (st->ss->external) {
+ char dv[100];
+ sprintf(dv, "%d:%d\n",
+ info.disk.major,
+ info.disk.minor);
+ sysfs_set_str(sra, NULL, "new_dev", dv);
+ /* FIXME check error */
+ /*FIXME find that device and set it up*/
+ } else if (ioctl(mdfd, ADD_NEW_DISK,
+ &info.disk)) {
+ fprintf(stderr,
+ Name ": ADD_NEW_DISK for %s "
+ "failed: %s\n",
dv->devname, strerror(errno));
st->ss->free_super(st);
return 1;
}
dv->devname, strerror(errno));
st->ss->free_super(st);
return 1;
}
break;
}
if (dv == moved_disk && dnum != insert_point) break;
break;
}
if (dv == moved_disk && dnum != insert_point) break;
int chunk, unsigned long long size,
char *subdev, unsigned long long *freesize);
int major;
int chunk, unsigned long long size,
char *subdev, unsigned long long *freesize);
int major;
int swapuuid; /* true if uuid is bigending rather than hostendian */
int swapuuid; /* true if uuid is bigending rather than hostendian */
} super0, super1, *superlist[];
struct supertype {
} super0, super1, *superlist[];
struct supertype {
- if (st->minor_version == -1)
+ if (st->ss->text_version)
+ strcpy(version, st->ss->text_version);
+ else if (st->minor_version == -1)
sprintf(version, "%d", st->ss->major);
else
sprintf(version, "%d.%d", st->ss->major, st->minor_version);
sprintf(version, "%d", st->ss->major);
else
sprintf(version, "%d.%d", st->ss->major, st->minor_version);