[dm-devel] dm-multipath: Do not stall on invalid ioctls
Mike Snitzer
snitzer at redhat.com
Wed Feb 26 14:56:27 UTC 2014
On Wed, Feb 26 2014 at 4:07am -0500,
Hannes Reinecke <hare at suse.de> wrote:
> An invalid ioctl is an invalid ioctl, irrespective on whether
> multipath has active paths or not. And for invalid ioctls
> we do not have to wait for multipath to activate any paths,
> but can rather return the error code immediately.
> This resolves numerous instances of
>
> udevd[]: worker [] unexpectedly returned with status 0x0100
>
> we have seen during testing.
>
> Signed-off-by: Hannes Reinecke <hare at suse.de>
> ---
> drivers/md/dm-mpath.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
> index 6eb9dc9..e8431fb 100644
> --- a/drivers/md/dm-mpath.c
> +++ b/drivers/md/dm-mpath.c
> @@ -1626,8 +1626,13 @@ 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;
> +
> + 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);
I've tweaked the header and code slightly, marked it for stable and
staged it here:
https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=for-next&id=a1989b330093578ea5470bea0a00f940c444c466
Should be on its way upstream on Friday.
Thanks.
More information about the dm-devel
mailing list