[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