Document this...
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
This commit is contained in:
parent
bea93430e8
commit
fbf8a0b7a6
13
Assemble.c
13
Assemble.c
|
@ -473,6 +473,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
||||||
if (!devices[j].uptodate)
|
if (!devices[j].uptodate)
|
||||||
continue;
|
continue;
|
||||||
info.disk.number = i;
|
info.disk.number = i;
|
||||||
|
info.disk.raid_disk = i;
|
||||||
info.disk.state = desired_state;
|
info.disk.state = desired_state;
|
||||||
|
|
||||||
if (devices[j].uptodate &&
|
if (devices[j].uptodate &&
|
||||||
|
@ -526,7 +527,17 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
||||||
|
|
||||||
/* Almost ready to actually *do* something */
|
/* Almost ready to actually *do* something */
|
||||||
if (!old_linux) {
|
if (!old_linux) {
|
||||||
if (ioctl(mdfd, SET_ARRAY_INFO, NULL) != 0) {
|
int rv;
|
||||||
|
if ((vers % 100) >= 1) { /* can use different versions */
|
||||||
|
mdu_array_info_t inf;
|
||||||
|
memset(&inf, 0, sizeof(inf));
|
||||||
|
inf.major_version = st->ss->major;
|
||||||
|
inf.minor_version = st->minor_version;
|
||||||
|
rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
|
||||||
|
} else
|
||||||
|
rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);
|
||||||
|
|
||||||
|
if (rv) {
|
||||||
fprintf(stderr, Name ": SET_ARRAY_INFO failed for %s: %s\n",
|
fprintf(stderr, Name ": SET_ARRAY_INFO failed for %s: %s\n",
|
||||||
mddev, strerror(errno));
|
mddev, strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
33
Query.c
33
Query.c
|
@ -105,26 +105,31 @@ int Query(char *dev)
|
||||||
if (superror == 0) {
|
if (superror == 0) {
|
||||||
/* array might be active... */
|
/* array might be active... */
|
||||||
st->ss->getinfo_super(&info, super);
|
st->ss->getinfo_super(&info, super);
|
||||||
mddev = get_md_name(info.array.md_minor);
|
if (st->ss->major == 0) {
|
||||||
disc.number = info.disk.number;
|
mddev = get_md_name(info.array.md_minor);
|
||||||
activity = "undetected";
|
disc.number = info.disk.number;
|
||||||
if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
|
activity = "undetected";
|
||||||
if (md_get_version(fd) >= 9000 &&
|
if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
|
||||||
ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {
|
if (md_get_version(fd) >= 9000 &&
|
||||||
if (ioctl(fd, GET_DISK_INFO, &disc) >= 0 &&
|
ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {
|
||||||
makedev((unsigned)disc.major,(unsigned)disc.minor) == stb.st_rdev)
|
if (ioctl(fd, GET_DISK_INFO, &disc) >= 0 &&
|
||||||
activity = "active";
|
makedev((unsigned)disc.major,(unsigned)disc.minor) == stb.st_rdev)
|
||||||
else
|
activity = "active";
|
||||||
activity = "mismatch";
|
else
|
||||||
|
activity = "mismatch";
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
}
|
}
|
||||||
close(fd);
|
} else {
|
||||||
|
activity = "unknown";
|
||||||
|
mddev = "array";
|
||||||
}
|
}
|
||||||
printf("%s: device %d in %d device %s %s md%d. Use mdadm --examine for more detail.\n",
|
printf("%s: device %d in %d device %s %s %s. Use mdadm --examine for more detail.\n",
|
||||||
dev,
|
dev,
|
||||||
info.disk.number, info.array.raid_disks,
|
info.disk.number, info.array.raid_disks,
|
||||||
activity,
|
activity,
|
||||||
map_num(pers, info.array.level),
|
map_num(pers, info.array.level),
|
||||||
info.array.md_minor);
|
mddev);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
2
mdadm.h
2
mdadm.h
|
@ -73,7 +73,7 @@ struct mdinfo {
|
||||||
mdu_array_info_t array;
|
mdu_array_info_t array;
|
||||||
mdu_disk_info_t disk;
|
mdu_disk_info_t disk;
|
||||||
__u64 events;
|
__u64 events;
|
||||||
unsigned int uuid[4];
|
int uuid[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define Name "mdadm"
|
#define Name "mdadm"
|
||||||
|
|
1
super0.c
1
super0.c
|
@ -205,6 +205,7 @@ static void getinfo_super0(struct mdinfo *info, void *sbv)
|
||||||
info->disk.major = sb->this_disk.major;
|
info->disk.major = sb->this_disk.major;
|
||||||
info->disk.minor = sb->this_disk.minor;
|
info->disk.minor = sb->this_disk.minor;
|
||||||
info->disk.raid_disk = sb->this_disk.raid_disk;
|
info->disk.raid_disk = sb->this_disk.raid_disk;
|
||||||
|
info->disk.number = sb->this_disk.number;
|
||||||
|
|
||||||
info->events = md_event(sb);
|
info->events = md_event(sb);
|
||||||
|
|
||||||
|
|
4
super1.c
4
super1.c
|
@ -278,7 +278,7 @@ static void getinfo_super1(struct mdinfo *info, void *sbv)
|
||||||
|
|
||||||
info->disk.major = 0;
|
info->disk.major = 0;
|
||||||
info->disk.minor = 0;
|
info->disk.minor = 0;
|
||||||
|
info->disk.number = __le32_to_cpu(sb->dev_number);
|
||||||
if (__le32_to_cpu(sb->dev_number) >= __le32_to_cpu(sb->max_dev) ||
|
if (__le32_to_cpu(sb->dev_number) >= __le32_to_cpu(sb->max_dev) ||
|
||||||
__le32_to_cpu(sb->max_dev) > 512)
|
__le32_to_cpu(sb->max_dev) > 512)
|
||||||
role = 0xfffe;
|
role = 0xfffe;
|
||||||
|
@ -303,7 +303,7 @@ static void getinfo_super1(struct mdinfo *info, void *sbv)
|
||||||
|
|
||||||
for (i=0; i< __le32_to_cpu(sb->max_dev); i++) {
|
for (i=0; i< __le32_to_cpu(sb->max_dev); i++) {
|
||||||
role = __le16_to_cpu(sb->dev_roles[i]);
|
role = __le16_to_cpu(sb->dev_roles[i]);
|
||||||
if (role == 0xFFFF || role < info->array.raid_disks)
|
if (/*role == 0xFFFF || */role < info->array.raid_disks)
|
||||||
working++;
|
working++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue