]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Assemble: mask FAILFAST and WRITEMOSTLY flags when finding the most recent device
authorGioh Kim <gi-oh.kim@cloud.ionos.com>
Tue, 6 Nov 2018 15:20:17 +0000 (16:20 +0100)
committerJes Sorensen <jsorensen@fb.com>
Thu, 6 Dec 2018 12:52:08 +0000 (07:52 -0500)
If devices[].i.disk.state has MD_DISK_FAILFAST or MD_DISK_WRITEMOSTLY
flag, it cannot be the most recent device. Both flags should be masked
before checking the state.

Reviewed-by: NeilBrown <neilb@suse.com>
Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Assemble.c

index f39c9e1cdf9c37dc5158937e00f329ac86ed79c7..9f75c68c9d49b9b2a9a7daf8201e1a6de4a71657 100644 (file)
@@ -578,6 +578,7 @@ static int load_devices(struct devs *devices, char *devmap,
                struct supertype *tst;
                int i;
                int dfd;
+               int disk_state;
 
                if (tmpdev->used != 1)
                        continue;
@@ -711,7 +712,9 @@ static int load_devices(struct devs *devices, char *devmap,
                devices[devcnt].i.disk.major = major(stb.st_rdev);
                devices[devcnt].i.disk.minor = minor(stb.st_rdev);
 
-               if (devices[devcnt].i.disk.state == 6) {
+               disk_state = devices[devcnt].i.disk.state & ~((1<<MD_DISK_FAILFAST) |
+                                                             (1<<MD_DISK_WRITEMOSTLY));
+               if (disk_state == ((1<<MD_DISK_ACTIVE) | (1<<MD_DISK_SYNC))) {
                        if (most_recent < 0 ||
                            devices[devcnt].i.events
                            > devices[most_recent].i.events) {