diff options
author | NeilBrown <neilb@suse.de> | 2009-05-12 09:49:45 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-05-12 09:49:45 +1000 |
commit | c7b474474c793e9a82bd0d84868fdf7367c89696 (patch) | |
tree | c622523a1beaccd8a5db9c1685ea9874b24b5d99 /Monitor.c | |
parent | 6957819fe61c0366565bfb2588982773ed010dfa (diff) | |
download | mdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.tar.gz mdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.tar.xz mdadm-c7b474474c793e9a82bd0d84868fdf7367c89696.zip |
Monitor: support spare-group manipulation for 1.x metadata.
The code for moving spares around a spare-group currently
only works for 0.90 metadata. Generalise it for 1.x metadata
as well.
Reported-by: "Garth Snyder" <garth@grsweb.us>
Signed-off-by NeilBrown <neilb@suse.de>
Diffstat (limited to 'Monitor.c')
-rw-r--r-- | Monitor.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -470,16 +470,25 @@ int Monitor(mddev_dev_t devlist, } } if (dev > 0) { - if (ioctl(fd2, HOT_REMOVE_DISK, - (unsigned long)dev) == 0) { - if (ioctl(fd1, HOT_ADD_DISK, - (unsigned long)dev) == 0) { + struct mddev_dev_s devlist; + char devname[20]; + devlist.next = NULL; + devlist.used = 0; + devlist.re_add = 0; + devlist.writemostly = 0; + devlist.devname = devname; + sprintf(devname, "%d:%d", major(dev), minor(dev)); + + devlist.disposition = 'r'; + if (Manage_subdevs(st2->devname, fd2, &devlist, -1) == 0) { + devlist.disposition = 'a'; + if (Manage_subdevs(st->devname, fd1, &devlist, -1) == 0) { alert("MoveSpare", st->devname, st2->devname, mailaddr, mailfrom, alert_cmd, dosyslog); close(fd1); close(fd2); break; } - else ioctl(fd2, HOT_ADD_DISK, (unsigned long) dev); + else Manage_subdevs(st2->devname, fd2, &devlist, -1); } } close(fd1); |