scsi: remove the gendisk argument to scsi_ioctl

Now that blk_execute_rq does not take a gendisk argument there is no need
to pass it through the scsi_ioctl callchain either.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20211126121802.2090656-6-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Christoph Hellwig 2021-11-26 13:18:02 +01:00 committed by Jens Axboe
parent b84ba30b6c
commit a30e344132
7 changed files with 24 additions and 34 deletions

View File

@ -877,7 +877,7 @@ static long ch_ioctl(struct file *file,
} }
default: default:
return scsi_ioctl(ch->device, NULL, file->f_mode, cmd, argp); return scsi_ioctl(ch->device, file->f_mode, cmd, argp);
} }
} }

View File

@ -408,8 +408,7 @@ static int scsi_complete_sghdr_rq(struct request *rq, struct sg_io_hdr *hdr,
return ret; return ret;
} }
static int sg_io(struct scsi_device *sdev, struct gendisk *disk, static int sg_io(struct scsi_device *sdev, struct sg_io_hdr *hdr, fmode_t mode)
struct sg_io_hdr *hdr, fmode_t mode)
{ {
unsigned long start_time; unsigned long start_time;
ssize_t ret = 0; ssize_t ret = 0;
@ -499,19 +498,12 @@ out_put_request:
/** /**
* sg_scsi_ioctl -- handle deprecated SCSI_IOCTL_SEND_COMMAND ioctl * sg_scsi_ioctl -- handle deprecated SCSI_IOCTL_SEND_COMMAND ioctl
* @q: request queue to send scsi commands down * @q: request queue to send scsi commands down
* @disk: gendisk to operate on (option)
* @mode: mode used to open the file through which the ioctl has been * @mode: mode used to open the file through which the ioctl has been
* submitted * submitted
* @sic: userspace structure describing the command to perform * @sic: userspace structure describing the command to perform
* *
* Send down the scsi command described by @sic to the device below * Send down the scsi command described by @sic to the device below
* the request queue @q. If @file is non-NULL it's used to perform * the request queue @q.
* fine-grained permission checks that allow users to send down
* non-destructive SCSI commands. If the caller has a struct gendisk
* available it should be passed in as @disk to allow the low level
* driver to use the information contained in it. A non-NULL @disk
* is only allowed if the caller knows that the low level driver doesn't
* need it (e.g. in the scsi subsystem).
* *
* Notes: * Notes:
* - This interface is deprecated - users should use the SG_IO * - This interface is deprecated - users should use the SG_IO
@ -530,8 +522,8 @@ out_put_request:
* Positive numbers returned are the compacted SCSI error codes (4 * Positive numbers returned are the compacted SCSI error codes (4
* bytes in one int) where the lowest byte is the SCSI status. * bytes in one int) where the lowest byte is the SCSI status.
*/ */
static int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, static int sg_scsi_ioctl(struct request_queue *q, fmode_t mode,
fmode_t mode, struct scsi_ioctl_command __user *sic) struct scsi_ioctl_command __user *sic)
{ {
enum { OMAX_SB_LEN = 16 }; /* For backward compatibility */ enum { OMAX_SB_LEN = 16 }; /* For backward compatibility */
struct request *rq; struct request *rq;
@ -806,8 +798,8 @@ static int scsi_put_cdrom_generic_arg(const struct cdrom_generic_command *cgc,
return 0; return 0;
} }
static int scsi_cdrom_send_packet(struct scsi_device *sdev, struct gendisk *disk, static int scsi_cdrom_send_packet(struct scsi_device *sdev, fmode_t mode,
fmode_t mode, void __user *arg) void __user *arg)
{ {
struct cdrom_generic_command cgc; struct cdrom_generic_command cgc;
struct sg_io_hdr hdr; struct sg_io_hdr hdr;
@ -847,7 +839,7 @@ static int scsi_cdrom_send_packet(struct scsi_device *sdev, struct gendisk *disk
hdr.cmdp = ((struct cdrom_generic_command __user *) arg)->cmd; hdr.cmdp = ((struct cdrom_generic_command __user *) arg)->cmd;
hdr.cmd_len = sizeof(cgc.cmd); hdr.cmd_len = sizeof(cgc.cmd);
err = sg_io(sdev, disk, &hdr, mode); err = sg_io(sdev, &hdr, mode);
if (err == -EFAULT) if (err == -EFAULT)
return -EFAULT; return -EFAULT;
@ -862,8 +854,8 @@ static int scsi_cdrom_send_packet(struct scsi_device *sdev, struct gendisk *disk
return err; return err;
} }
static int scsi_ioctl_sg_io(struct scsi_device *sdev, struct gendisk *disk, static int scsi_ioctl_sg_io(struct scsi_device *sdev, fmode_t mode,
fmode_t mode, void __user *argp) void __user *argp)
{ {
struct sg_io_hdr hdr; struct sg_io_hdr hdr;
int error; int error;
@ -871,7 +863,7 @@ static int scsi_ioctl_sg_io(struct scsi_device *sdev, struct gendisk *disk,
error = get_sg_io_hdr(&hdr, argp); error = get_sg_io_hdr(&hdr, argp);
if (error) if (error)
return error; return error;
error = sg_io(sdev, disk, &hdr, mode); error = sg_io(sdev, &hdr, mode);
if (error == -EFAULT) if (error == -EFAULT)
return error; return error;
if (put_sg_io_hdr(&hdr, argp)) if (put_sg_io_hdr(&hdr, argp))
@ -882,7 +874,6 @@ static int scsi_ioctl_sg_io(struct scsi_device *sdev, struct gendisk *disk,
/** /**
* scsi_ioctl - Dispatch ioctl to scsi device * scsi_ioctl - Dispatch ioctl to scsi device
* @sdev: scsi device receiving ioctl * @sdev: scsi device receiving ioctl
* @disk: disk receiving the ioctl
* @mode: mode the block/char device is opened with * @mode: mode the block/char device is opened with
* @cmd: which ioctl is it * @cmd: which ioctl is it
* @arg: data associated with ioctl * @arg: data associated with ioctl
@ -891,8 +882,8 @@ static int scsi_ioctl_sg_io(struct scsi_device *sdev, struct gendisk *disk,
* does not take a major/minor number as the dev field. Rather, it takes * does not take a major/minor number as the dev field. Rather, it takes
* a pointer to a &struct scsi_device. * a pointer to a &struct scsi_device.
*/ */
int scsi_ioctl(struct scsi_device *sdev, struct gendisk *disk, fmode_t mode, int scsi_ioctl(struct scsi_device *sdev, fmode_t mode, int cmd,
int cmd, void __user *arg) void __user *arg)
{ {
struct request_queue *q = sdev->request_queue; struct request_queue *q = sdev->request_queue;
struct scsi_sense_hdr sense_hdr; struct scsi_sense_hdr sense_hdr;
@ -927,11 +918,11 @@ int scsi_ioctl(struct scsi_device *sdev, struct gendisk *disk, fmode_t mode,
case SG_EMULATED_HOST: case SG_EMULATED_HOST:
return sg_emulated_host(q, arg); return sg_emulated_host(q, arg);
case SG_IO: case SG_IO:
return scsi_ioctl_sg_io(sdev, disk, mode, arg); return scsi_ioctl_sg_io(sdev, mode, arg);
case SCSI_IOCTL_SEND_COMMAND: case SCSI_IOCTL_SEND_COMMAND:
return sg_scsi_ioctl(q, disk, mode, arg); return sg_scsi_ioctl(q, mode, arg);
case CDROM_SEND_PACKET: case CDROM_SEND_PACKET:
return scsi_cdrom_send_packet(sdev, disk, mode, arg); return scsi_cdrom_send_packet(sdev, mode, arg);
case CDROMCLOSETRAY: case CDROMCLOSETRAY:
return scsi_send_start_stop(sdev, 3); return scsi_send_start_stop(sdev, 3);
case CDROMEJECT: case CDROMEJECT:

View File

@ -1574,7 +1574,7 @@ static int sd_ioctl(struct block_device *bdev, fmode_t mode,
if (is_sed_ioctl(cmd)) if (is_sed_ioctl(cmd))
return sed_ioctl(sdkp->opal_dev, cmd, p); return sed_ioctl(sdkp->opal_dev, cmd, p);
return scsi_ioctl(sdp, disk, mode, cmd, p); return scsi_ioctl(sdp, mode, cmd, p);
} }
static void set_media_not_present(struct scsi_disk *sdkp) static void set_media_not_present(struct scsi_disk *sdkp)

View File

@ -1109,7 +1109,7 @@ sg_ioctl_common(struct file *filp, Sg_device *sdp, Sg_fd *sfp,
case SCSI_IOCTL_SEND_COMMAND: case SCSI_IOCTL_SEND_COMMAND:
if (atomic_read(&sdp->detaching)) if (atomic_read(&sdp->detaching))
return -ENODEV; return -ENODEV;
return scsi_ioctl(sdp->device, NULL, filp->f_mode, cmd_in, p); return scsi_ioctl(sdp->device, filp->f_mode, cmd_in, p);
case SG_SET_DEBUG: case SG_SET_DEBUG:
result = get_user(val, ip); result = get_user(val, ip);
if (result) if (result)
@ -1165,7 +1165,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p); ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
if (ret != -ENOIOCTLCMD) if (ret != -ENOIOCTLCMD)
return ret; return ret;
return scsi_ioctl(sdp->device, NULL, filp->f_mode, cmd_in, p); return scsi_ioctl(sdp->device, filp->f_mode, cmd_in, p);
} }
static __poll_t static __poll_t

View File

@ -561,8 +561,7 @@ static void sr_block_release(struct gendisk *disk, fmode_t mode)
static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
unsigned long arg) unsigned long arg)
{ {
struct gendisk *disk = bdev->bd_disk; struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
struct scsi_cd *cd = scsi_cd(disk);
struct scsi_device *sdev = cd->device; struct scsi_device *sdev = cd->device;
void __user *argp = (void __user *)arg; void __user *argp = (void __user *)arg;
int ret; int ret;
@ -584,7 +583,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
if (ret != -ENOSYS) if (ret != -ENOSYS)
goto put; goto put;
} }
ret = scsi_ioctl(sdev, disk, mode, cmd, argp); ret = scsi_ioctl(sdev, mode, cmd, argp);
put: put:
scsi_autopm_put_device(sdev); scsi_autopm_put_device(sdev);

View File

@ -3829,7 +3829,7 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
break; break;
} }
retval = scsi_ioctl(STp->device, NULL, file->f_mode, cmd_in, p); retval = scsi_ioctl(STp->device, file->f_mode, cmd_in, p);
if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) {
/* unload */ /* unload */
STp->rew_at_close = 0; STp->rew_at_close = 0;

View File

@ -45,8 +45,8 @@ typedef struct scsi_fctargaddress {
int scsi_ioctl_block_when_processing_errors(struct scsi_device *sdev, int scsi_ioctl_block_when_processing_errors(struct scsi_device *sdev,
int cmd, bool ndelay); int cmd, bool ndelay);
int scsi_ioctl(struct scsi_device *sdev, struct gendisk *disk, fmode_t mode, int scsi_ioctl(struct scsi_device *sdev, fmode_t mode, int cmd,
int cmd, void __user *arg); void __user *arg);
int get_sg_io_hdr(struct sg_io_hdr *hdr, const void __user *argp); int get_sg_io_hdr(struct sg_io_hdr *hdr, const void __user *argp);
int put_sg_io_hdr(const struct sg_io_hdr *hdr, void __user *argp); int put_sg_io_hdr(const struct sg_io_hdr *hdr, void __user *argp);
bool scsi_cmd_allowed(unsigned char *cmd, fmode_t mode); bool scsi_cmd_allowed(unsigned char *cmd, fmode_t mode);