[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f9fd39116713f17e55091868326a419190220559.camel@codethink.co.uk>
Date: Wed, 18 Dec 2019 19:57:01 +0000
From: Ben Hutchings <ben.hutchings@...ethink.co.uk>
To: Arnd Bergmann <arnd@...db.de>, Jens Axboe <axboe@...nel.dk>,
"James E.J. Bottomley" <jejb@...ux.ibm.com>,
"Martin K. Petersen" <martin.petersen@...cle.com>
Cc: linux-scsi@...r.kernel.org, linux-block@...r.kernel.org,
y2038@...ts.linaro.org, linux-kernel@...r.kernel.org,
Christoph Hellwig <hch@....de>, linux-doc@...r.kernel.org,
corbet@....net, viro@...iv.linux.org.uk,
linux-fsdevel@...r.kernel.org
Subject: Re: [PATCH v2 18/27] compat_ioctl: scsi: move ioctl handling into
drivers
On Tue, 2019-12-17 at 23:16 +0100, Arnd Bergmann wrote:
[...]
> --- a/drivers/scsi/sr.c
> +++ b/drivers/scsi/sr.c
[...]
> @@ -598,6 +599,55 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
> return ret;
> }
>
> +#ifdef CONFIG_COMPAT
> +static int sr_block_compat_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
> + unsigned long arg)
> +{
> + struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
> + struct scsi_device *sdev = cd->device;
> + void __user *argp = compat_ptr(arg);
> + int ret;
> +
> + mutex_lock(&sr_mutex);
> +
> + ret = scsi_ioctl_block_when_processing_errors(sdev, cmd,
> + (mode & FMODE_NDELAY) != 0);
> + if (ret)
> + goto out;
> +
> + scsi_autopm_get_device(sdev);
> +
> + /*
> + * Send SCSI addressing ioctls directly to mid level, send other
> + * ioctls to cdrom/block level.
> + */
> + switch (cmd) {
> + case SCSI_IOCTL_GET_IDLUN:
> + case SCSI_IOCTL_GET_BUS_NUMBER:
> + ret = scsi_compat_ioctl(sdev, cmd, argp);
> + goto put;
> + }
> +
> + /*
> + * CDROM ioctls are handled in the block layer, but
> + * do the scsi blk ioctls here.
> + */
> + ret = scsi_cmd_blk_ioctl(bdev, mode, cmd, argp);
> + if (ret != -ENOTTY)
> + return ret;
This needs to be be "goto put;"
> + ret = scsi_compat_ioctl(sdev, cmd, argp);
> +
> +put:
> + scsi_autopm_put_device(sdev);
> +
> +out:
> + mutex_unlock(&sr_mutex);
> + return ret;
> +
> +}
> +#endif
[...]
--
Ben Hutchings, Software Developer Codethink Ltd
https://www.codethink.co.uk/ Dale House, 35 Dale Street
Manchester, M1 2HF, United Kingdom
Powered by blists - more mailing lists