]> Git Repo - linux.git/commitdiff
dm mpath: fix stalls when handling invalid ioctls
authorHannes Reinecke <[email protected]>
Wed, 26 Feb 2014 09:07:04 +0000 (10:07 +0100)
committerMike Snitzer <[email protected]>
Wed, 26 Feb 2014 14:44:44 +0000 (09:44 -0500)
An invalid ioctl will never be valid, irrespective of whether multipath
has active paths or not.  So for invalid ioctls we do not have to wait
for multipath to activate any paths, but can rather return an error
code immediately.  This fix resolves numerous instances of:

 udevd[]: worker [] unexpectedly returned with status 0x0100

that have been seen during testing.

Signed-off-by: Hannes Reinecke <[email protected]>
Signed-off-by: Mike Snitzer <[email protected]>
Cc: [email protected]
drivers/md/dm-mpath.c

index 6eb9dc9ef8f36c4b709df6f3b46170598964e88d..422a9fdeb53e641d97acec4793ab00747dde9b1d 100644 (file)
@@ -1626,8 +1626,11 @@ static int multipath_ioctl(struct dm_target *ti, unsigned int cmd,
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (!r && ti->len != i_size_read(bdev->bd_inode) >> SECTOR_SHIFT)
-               r = scsi_verify_blk_ioctl(NULL, cmd);
+       if (!bdev || ti->len != i_size_read(bdev->bd_inode) >> SECTOR_SHIFT) {
+               int err = scsi_verify_blk_ioctl(NULL, cmd);
+               if (err)
+                       r = err;
+       }
 
        if (r == -ENOTCONN && !fatal_signal_pending(current))
                queue_work(kmultipathd, &m->process_queued_ios);
This page took 0.056095 seconds and 4 git commands to generate.