kpartx: recognize DASD on loop devices again
authorMartin Wilck <mwilck@suse.com>
Tue, 9 Jul 2019 07:40:02 +0000 (07:40 +0000)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 1 Oct 2019 20:23:14 +0000 (22:23 +0200)
Since 4d57b868, DASD partition tables are only recognized on
DASD hardware. This turns out to break certain software that works
e.g. with DASD partition tables on loop devices. The problem that
4d57b868 attempted to fix was that "unlabeled disk" format has
no signature at all and is detected on any volume, including
empty ones.

With this patch, DASD partition table formats other than "unlabeled
disk" are detected on non-DASD devices again.

Fixes: 4d57b868 "kpartx: only recognize dasd part table on DASD"
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
kpartx/dasd.c

index d95d8ca..4e7e474 100644 (file)
@@ -133,9 +133,6 @@ read_dasd_pt(int fd, struct slice all, struct slice *sp, int ns)
                        /* Couldn't open the device */
                        return -1;
                }
-       } else if ((unsigned int)major(sbuf.st_rdev) != 94) {
-                       /* Not a DASD */
-                       return -1;
        } else {
                fd_dasd = dup(fd);
                if (fd_dasd < 0)
@@ -279,6 +276,10 @@ read_dasd_pt(int fd, struct slice all, struct slice *sp, int ns)
                        size = disksize;
                        if (fmt_size < size)
                                size = fmt_size;
+               } else if ((unsigned int)major(sbuf.st_rdev) != 94) {
+                       /* Not a DASD */
+                       retval = -1;
+                       goto out;
                } else
                        size = disksize;