1 // SPDX-License-Identifier: GPL-2.0-only
4 * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 08/23/2000
5 * - get rid of some verify_areas and use __copy*user and __get/put_user
6 * for the ones that remain
8 #include <linux/module.h>
9 #include <linux/blkdev.h>
10 #include <linux/interrupt.h>
11 #include <linux/errno.h>
12 #include <linux/kernel.h>
13 #include <linux/sched.h>
15 #include <linux/string.h>
16 #include <linux/uaccess.h>
17 #include <linux/cdrom.h>
19 #include <scsi/scsi.h>
20 #include <scsi/scsi_cmnd.h>
21 #include <scsi/scsi_device.h>
22 #include <scsi/scsi_eh.h>
23 #include <scsi/scsi_host.h>
24 #include <scsi/scsi_ioctl.h>
26 #include <scsi/scsi_dbg.h>
28 #include "scsi_logging.h"
30 #define NORMAL_RETRIES 5
31 #define IOCTL_NORMAL_TIMEOUT (10 * HZ)
33 #define MAX_BUF PAGE_SIZE
36 * ioctl_probe -- return host identification
37 * @host: host to identify
38 * @buffer: userspace buffer for identification
41 * * if successful, %1 and an identifying string at @buffer, if @buffer
42 * is non-NULL, filling to the length stored at * (int *) @buffer.
43 * * <0 error code on failure.
45 static int ioctl_probe(struct Scsi_Host
*host
, void __user
*buffer
)
47 unsigned int len
, slen
;
51 if (get_user(len
, (unsigned int __user
*) buffer
))
54 if (host
->hostt
->info
)
55 string
= host
->hostt
->info(host
);
57 string
= host
->hostt
->name
;
59 slen
= strlen(string
);
62 if (copy_to_user(buffer
, string
, len
))
69 static int ioctl_internal_command(struct scsi_device
*sdev
, char *cmd
,
70 int timeout
, int retries
)
73 struct scsi_sense_hdr sshdr
;
74 const struct scsi_exec_args exec_args
= {
78 SCSI_LOG_IOCTL(1, sdev_printk(KERN_INFO
, sdev
,
79 "Trying ioctl with scsi command %d\n", *cmd
));
81 result
= scsi_execute_cmd(sdev
, cmd
, REQ_OP_DRV_IN
, NULL
, 0, timeout
,
84 SCSI_LOG_IOCTL(2, sdev_printk(KERN_INFO
, sdev
,
85 "Ioctl returned 0x%x\n", result
));
89 if (scsi_sense_valid(&sshdr
)) {
90 switch (sshdr
.sense_key
) {
92 if (cmd
[0] == ALLOW_MEDIUM_REMOVAL
)
95 sdev_printk(KERN_INFO
, sdev
,
96 "ioctl_internal_command: "
98 "asc=0x%x ascq=0x%x\n",
99 sshdr
.asc
, sshdr
.ascq
);
101 case NOT_READY
: /* This happens if there is no disc in drive */
106 if (sdev
->removable
) {
108 result
= 0; /* This is no longer considered an error */
111 fallthrough
; /* for non-removable media */
113 sdev_printk(KERN_INFO
, sdev
,
114 "ioctl_internal_command return code = %x\n",
116 scsi_print_sense_hdr(sdev
, NULL
, &sshdr
);
121 SCSI_LOG_IOCTL(2, sdev_printk(KERN_INFO
, sdev
,
122 "IOCTL Releasing command\n"));
127 * scsi_set_medium_removal() - send command to allow or prevent medium removal
128 * @sdev: target scsi device
129 * @state: removal state to set (prevent or allow)
132 * * %0 if @sdev is not removable or not lockable or successful.
133 * * non-%0 is a SCSI result code if > 0 or kernel error code if < 0.
134 * * Sets @sdev->locked to the new state on success.
136 int scsi_set_medium_removal(struct scsi_device
*sdev
, char state
)
138 char scsi_cmd
[MAX_COMMAND_SIZE
];
141 if (!sdev
->removable
|| !sdev
->lockable
)
144 scsi_cmd
[0] = ALLOW_MEDIUM_REMOVAL
;
151 ret
= ioctl_internal_command(sdev
, scsi_cmd
,
152 IOCTL_NORMAL_TIMEOUT
, NORMAL_RETRIES
);
154 sdev
->locked
= (state
== SCSI_REMOVAL_PREVENT
);
157 EXPORT_SYMBOL(scsi_set_medium_removal
);
160 * The scsi_ioctl_get_pci() function places into arg the value
161 * pci_dev::slot_name (8 characters) for the PCI device (if any).
162 * Returns: 0 on success
163 * -ENXIO if there isn't a PCI device pointer
164 * (could be because the SCSI driver hasn't been
165 * updated yet, or because it isn't a SCSI
167 * any copy_to_user() error on failure there
169 static int scsi_ioctl_get_pci(struct scsi_device
*sdev
, void __user
*arg
)
171 struct device
*dev
= scsi_get_device(sdev
->host
);
177 name
= dev_name(dev
);
179 /* compatibility with old ioctl which only returned
181 return copy_to_user(arg
, name
, min(strlen(name
), (size_t)20))
185 static int sg_get_version(int __user
*p
)
187 static const int sg_version_num
= 30527;
188 return put_user(sg_version_num
, p
);
191 static int sg_set_timeout(struct scsi_device
*sdev
, int __user
*p
)
193 int timeout
, err
= get_user(timeout
, p
);
196 sdev
->sg_timeout
= clock_t_to_jiffies(timeout
);
201 static int sg_get_reserved_size(struct scsi_device
*sdev
, int __user
*p
)
203 int val
= min(sdev
->sg_reserved_size
,
204 queue_max_bytes(sdev
->request_queue
));
206 return put_user(val
, p
);
209 static int sg_set_reserved_size(struct scsi_device
*sdev
, int __user
*p
)
211 int size
, err
= get_user(size
, p
);
219 sdev
->sg_reserved_size
= min_t(unsigned int, size
,
220 queue_max_bytes(sdev
->request_queue
));
225 * will always return that we are ATAPI even for a real SCSI drive, I'm not
226 * so sure this is worth doing anything about (why would you care??)
228 static int sg_emulated_host(struct request_queue
*q
, int __user
*p
)
230 return put_user(1, p
);
233 static int scsi_get_idlun(struct scsi_device
*sdev
, void __user
*argp
)
235 struct scsi_idlun v
= {
236 .dev_id
= (sdev
->id
& 0xff) +
237 ((sdev
->lun
& 0xff) << 8) +
238 ((sdev
->channel
& 0xff) << 16) +
239 ((sdev
->host
->host_no
& 0xff) << 24),
240 .host_unique_id
= sdev
->host
->unique_id
242 if (copy_to_user(argp
, &v
, sizeof(struct scsi_idlun
)))
247 static int scsi_send_start_stop(struct scsi_device
*sdev
, int data
)
249 u8 cdb
[MAX_COMMAND_SIZE
] = { };
253 return ioctl_internal_command(sdev
, cdb
, START_STOP_TIMEOUT
,
258 * scsi_cmd_allowed() - Check if the given command is allowed.
259 * @cmd: SCSI command to check
260 * @open_for_write: is the file / block device opened for writing?
262 * Only a subset of commands are allowed for unprivileged users. Commands used
263 * to format the media, update the firmware, etc. are not permitted.
265 * Return: %true if the cmd is allowed, otherwise @false.
267 bool scsi_cmd_allowed(unsigned char *cmd
, bool open_for_write
)
269 /* root can do any command. */
270 if (capable(CAP_SYS_RAWIO
))
273 /* Anybody who can open the device can do a read-safe command */
275 /* Basic read-only commands */
276 case TEST_UNIT_READY
:
283 case READ_DEFECT_DATA
:
284 case READ_CAPACITY
: /* also GPCMD_READ_CDVD_CAPACITY */
291 case GPCMD_VERIFY_10
:
294 case SERVICE_ACTION_IN_16
:
295 case RECEIVE_DIAGNOSTIC
:
296 case MAINTENANCE_IN
: /* also GPCMD_SEND_KEY, which is a write command */
297 case GPCMD_READ_BUFFER_CAPACITY
:
298 /* Audio CD commands */
300 case GPCMD_PLAY_AUDIO_10
:
301 case GPCMD_PLAY_AUDIO_MSF
:
302 case GPCMD_PLAY_AUDIO_TI
:
303 case GPCMD_PAUSE_RESUME
:
304 /* CD/DVD data reading */
306 case GPCMD_READ_CD_MSF
:
307 case GPCMD_READ_DISC_INFO
:
308 case GPCMD_READ_DVD_STRUCTURE
:
309 case GPCMD_READ_HEADER
:
310 case GPCMD_READ_TRACK_RZONE_INFO
:
311 case GPCMD_READ_SUBCHANNEL
:
312 case GPCMD_READ_TOC_PMA_ATIP
:
313 case GPCMD_REPORT_KEY
:
315 case GPCMD_GET_CONFIGURATION
:
316 case GPCMD_READ_FORMAT_CAPACITIES
:
317 case GPCMD_GET_EVENT_STATUS_NOTIFICATION
:
318 case GPCMD_GET_PERFORMANCE
:
320 case GPCMD_STOP_PLAY_SCAN
:
324 /* Basic writing commands */
329 case WRITE_VERIFY_12
:
337 case GPCMD_MODE_SELECT_10
:
341 case GPCMD_CLOSE_TRACK
:
342 case GPCMD_FLUSH_CACHE
:
343 case GPCMD_FORMAT_UNIT
:
344 case GPCMD_REPAIR_RZONE_TRACK
:
345 case GPCMD_RESERVE_RZONE_TRACK
:
346 case GPCMD_SEND_DVD_STRUCTURE
:
347 case GPCMD_SEND_EVENT
:
349 case GPCMD_SEND_CUE_SHEET
:
350 case GPCMD_SET_SPEED
:
351 case GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL
:
352 case GPCMD_LOAD_UNLOAD
:
353 case GPCMD_SET_STREAMING
:
354 case GPCMD_SET_READ_AHEAD
:
357 return open_for_write
;
362 EXPORT_SYMBOL(scsi_cmd_allowed
);
364 static int scsi_fill_sghdr_rq(struct scsi_device
*sdev
, struct request
*rq
,
365 struct sg_io_hdr
*hdr
, bool open_for_write
)
367 struct scsi_cmnd
*scmd
= blk_mq_rq_to_pdu(rq
);
369 if (hdr
->cmd_len
< 6)
371 if (copy_from_user(scmd
->cmnd
, hdr
->cmdp
, hdr
->cmd_len
))
373 if (!scsi_cmd_allowed(scmd
->cmnd
, open_for_write
))
375 scmd
->cmd_len
= hdr
->cmd_len
;
377 rq
->timeout
= msecs_to_jiffies(hdr
->timeout
);
379 rq
->timeout
= sdev
->sg_timeout
;
381 rq
->timeout
= BLK_DEFAULT_SG_TIMEOUT
;
382 if (rq
->timeout
< BLK_MIN_SG_TIMEOUT
)
383 rq
->timeout
= BLK_MIN_SG_TIMEOUT
;
388 static int scsi_complete_sghdr_rq(struct request
*rq
, struct sg_io_hdr
*hdr
,
391 struct scsi_cmnd
*scmd
= blk_mq_rq_to_pdu(rq
);
395 * fill in all the output members
397 hdr
->status
= scmd
->result
& 0xff;
398 hdr
->masked_status
= sg_status_byte(scmd
->result
);
399 hdr
->msg_status
= COMMAND_COMPLETE
;
400 hdr
->host_status
= host_byte(scmd
->result
);
401 hdr
->driver_status
= 0;
402 if (scsi_status_is_check_condition(hdr
->status
))
403 hdr
->driver_status
= DRIVER_SENSE
;
405 if (hdr
->masked_status
|| hdr
->host_status
|| hdr
->driver_status
)
406 hdr
->info
|= SG_INFO_CHECK
;
407 hdr
->resid
= scmd
->resid_len
;
410 if (scmd
->sense_len
&& hdr
->sbp
) {
411 int len
= min((unsigned int) hdr
->mx_sb_len
, scmd
->sense_len
);
413 if (!copy_to_user(hdr
->sbp
, scmd
->sense_buffer
, len
))
414 hdr
->sb_len_wr
= len
;
419 r
= blk_rq_unmap_user(bio
);
426 static int sg_io(struct scsi_device
*sdev
, struct sg_io_hdr
*hdr
,
429 unsigned long start_time
;
434 struct scsi_cmnd
*scmd
;
437 if (hdr
->interface_id
!= 'S')
440 if (hdr
->dxfer_len
> (queue_max_hw_sectors(sdev
->request_queue
) << 9))
444 switch (hdr
->dxfer_direction
) {
447 case SG_DXFER_TO_DEV
:
450 case SG_DXFER_TO_FROM_DEV
:
451 case SG_DXFER_FROM_DEV
:
454 if (hdr
->flags
& SG_FLAG_Q_AT_HEAD
)
457 rq
= scsi_alloc_request(sdev
->request_queue
, writing
?
458 REQ_OP_DRV_OUT
: REQ_OP_DRV_IN
, 0);
461 scmd
= blk_mq_rq_to_pdu(rq
);
463 if (hdr
->cmd_len
> sizeof(scmd
->cmnd
)) {
465 goto out_put_request
;
468 ret
= scsi_fill_sghdr_rq(sdev
, rq
, hdr
, open_for_write
);
470 goto out_put_request
;
472 ret
= blk_rq_map_user_io(rq
, NULL
, hdr
->dxferp
, hdr
->dxfer_len
,
473 GFP_KERNEL
, hdr
->iovec_count
&& hdr
->dxfer_len
,
474 hdr
->iovec_count
, 0, rq_data_dir(rq
));
476 goto out_put_request
;
481 start_time
= jiffies
;
483 blk_execute_rq(rq
, at_head
);
485 hdr
->duration
= jiffies_to_msecs(jiffies
- start_time
);
487 ret
= scsi_complete_sghdr_rq(rq
, hdr
, bio
);
490 blk_mq_free_request(rq
);
495 * sg_scsi_ioctl -- handle deprecated SCSI_IOCTL_SEND_COMMAND ioctl
496 * @q: request queue to send scsi commands down
497 * @open_for_write: is the file / block device opened for writing?
498 * @sic: userspace structure describing the command to perform
500 * Send down the scsi command described by @sic to the device below
501 * the request queue @q.
504 * - This interface is deprecated - users should use the SG_IO
505 * interface instead, as this is a more flexible approach to
506 * performing SCSI commands on a device.
507 * - The SCSI command length is determined by examining the 1st byte
508 * of the given command. There is no way to override this.
509 * - Data transfers are limited to PAGE_SIZE
510 * - The length (x + y) must be at least OMAX_SB_LEN bytes long to
511 * accommodate the sense buffer when an error occurs.
512 * The sense buffer is truncated to OMAX_SB_LEN (16) bytes so that
513 * old code will not be surprised.
514 * - If a Unix error occurs (e.g. ENOMEM) then the user will receive
515 * a negative return and the Unix error code in 'errno'.
516 * If the SCSI command succeeds then 0 is returned.
517 * Positive numbers returned are the compacted SCSI error codes (4
518 * bytes in one int) where the lowest byte is the SCSI status.
520 static int sg_scsi_ioctl(struct request_queue
*q
, bool open_for_write
,
521 struct scsi_ioctl_command __user
*sic
)
525 unsigned int in_len
, out_len
, bytes
, opcode
, cmdlen
;
526 struct scsi_cmnd
*scmd
;
533 * get in an out lengths, verify they don't exceed a page worth of data
535 if (get_user(in_len
, &sic
->inlen
))
537 if (get_user(out_len
, &sic
->outlen
))
539 if (in_len
> PAGE_SIZE
|| out_len
> PAGE_SIZE
)
541 if (get_user(opcode
, &sic
->data
[0]))
544 bytes
= max(in_len
, out_len
);
546 buffer
= kzalloc(bytes
, GFP_NOIO
| GFP_USER
| __GFP_NOWARN
);
552 rq
= scsi_alloc_request(q
, in_len
? REQ_OP_DRV_OUT
: REQ_OP_DRV_IN
, 0);
555 goto error_free_buffer
;
557 scmd
= blk_mq_rq_to_pdu(rq
);
559 cmdlen
= COMMAND_SIZE(opcode
);
562 * get command and data to send to device, if any
565 scmd
->cmd_len
= cmdlen
;
566 if (copy_from_user(scmd
->cmnd
, sic
->data
, cmdlen
))
569 if (in_len
&& copy_from_user(buffer
, sic
->data
+ cmdlen
, in_len
))
573 if (!scsi_cmd_allowed(scmd
->cmnd
, open_for_write
))
576 /* default. possible overridden later */
580 case SEND_DIAGNOSTIC
:
582 rq
->timeout
= FORMAT_UNIT_TIMEOUT
;
586 rq
->timeout
= START_STOP_TIMEOUT
;
589 rq
->timeout
= MOVE_MEDIUM_TIMEOUT
;
591 case READ_ELEMENT_STATUS
:
592 rq
->timeout
= READ_ELEMENT_STATUS_TIMEOUT
;
594 case READ_DEFECT_DATA
:
595 rq
->timeout
= READ_DEFECT_DATA_TIMEOUT
;
599 rq
->timeout
= BLK_DEFAULT_SG_TIMEOUT
;
604 err
= blk_rq_map_kern(q
, rq
, buffer
, bytes
, GFP_NOIO
);
609 blk_execute_rq(rq
, false);
611 err
= scmd
->result
& 0xff; /* only 8 bit SCSI status */
613 if (scmd
->sense_len
&& scmd
->sense_buffer
) {
614 /* limit sense len for backward compatibility */
615 if (copy_to_user(sic
->data
, scmd
->sense_buffer
,
616 min(scmd
->sense_len
, 16U)))
620 if (copy_to_user(sic
->data
, buffer
, out_len
))
625 blk_mq_free_request(rq
);
633 int put_sg_io_hdr(const struct sg_io_hdr
*hdr
, void __user
*argp
)
636 if (in_compat_syscall()) {
637 struct compat_sg_io_hdr hdr32
= {
638 .interface_id
= hdr
->interface_id
,
639 .dxfer_direction
= hdr
->dxfer_direction
,
640 .cmd_len
= hdr
->cmd_len
,
641 .mx_sb_len
= hdr
->mx_sb_len
,
642 .iovec_count
= hdr
->iovec_count
,
643 .dxfer_len
= hdr
->dxfer_len
,
644 .dxferp
= (uintptr_t)hdr
->dxferp
,
645 .cmdp
= (uintptr_t)hdr
->cmdp
,
646 .sbp
= (uintptr_t)hdr
->sbp
,
647 .timeout
= hdr
->timeout
,
649 .pack_id
= hdr
->pack_id
,
650 .usr_ptr
= (uintptr_t)hdr
->usr_ptr
,
651 .status
= hdr
->status
,
652 .masked_status
= hdr
->masked_status
,
653 .msg_status
= hdr
->msg_status
,
654 .sb_len_wr
= hdr
->sb_len_wr
,
655 .host_status
= hdr
->host_status
,
656 .driver_status
= hdr
->driver_status
,
658 .duration
= hdr
->duration
,
662 if (copy_to_user(argp
, &hdr32
, sizeof(hdr32
)))
669 if (copy_to_user(argp
, hdr
, sizeof(*hdr
)))
674 EXPORT_SYMBOL(put_sg_io_hdr
);
676 int get_sg_io_hdr(struct sg_io_hdr
*hdr
, const void __user
*argp
)
679 struct compat_sg_io_hdr hdr32
;
681 if (in_compat_syscall()) {
682 if (copy_from_user(&hdr32
, argp
, sizeof(hdr32
)))
685 *hdr
= (struct sg_io_hdr
) {
686 .interface_id
= hdr32
.interface_id
,
687 .dxfer_direction
= hdr32
.dxfer_direction
,
688 .cmd_len
= hdr32
.cmd_len
,
689 .mx_sb_len
= hdr32
.mx_sb_len
,
690 .iovec_count
= hdr32
.iovec_count
,
691 .dxfer_len
= hdr32
.dxfer_len
,
692 .dxferp
= compat_ptr(hdr32
.dxferp
),
693 .cmdp
= compat_ptr(hdr32
.cmdp
),
694 .sbp
= compat_ptr(hdr32
.sbp
),
695 .timeout
= hdr32
.timeout
,
696 .flags
= hdr32
.flags
,
697 .pack_id
= hdr32
.pack_id
,
698 .usr_ptr
= compat_ptr(hdr32
.usr_ptr
),
699 .status
= hdr32
.status
,
700 .masked_status
= hdr32
.masked_status
,
701 .msg_status
= hdr32
.msg_status
,
702 .sb_len_wr
= hdr32
.sb_len_wr
,
703 .host_status
= hdr32
.host_status
,
704 .driver_status
= hdr32
.driver_status
,
705 .resid
= hdr32
.resid
,
706 .duration
= hdr32
.duration
,
714 if (copy_from_user(hdr
, argp
, sizeof(*hdr
)))
719 EXPORT_SYMBOL(get_sg_io_hdr
);
722 struct compat_cdrom_generic_command
{
723 unsigned char cmd
[CDROM_PACKET_SIZE
];
724 compat_caddr_t buffer
;
725 compat_uint_t buflen
;
727 compat_caddr_t sense
;
728 unsigned char data_direction
;
729 unsigned char pad
[3];
731 compat_int_t timeout
;
732 compat_caddr_t unused
;
736 static int scsi_get_cdrom_generic_arg(struct cdrom_generic_command
*cgc
,
737 const void __user
*arg
)
740 if (in_compat_syscall()) {
741 struct compat_cdrom_generic_command cgc32
;
743 if (copy_from_user(&cgc32
, arg
, sizeof(cgc32
)))
746 *cgc
= (struct cdrom_generic_command
) {
747 .buffer
= compat_ptr(cgc32
.buffer
),
748 .buflen
= cgc32
.buflen
,
750 .sense
= compat_ptr(cgc32
.sense
),
751 .data_direction
= cgc32
.data_direction
,
752 .quiet
= cgc32
.quiet
,
753 .timeout
= cgc32
.timeout
,
754 .unused
= compat_ptr(cgc32
.unused
),
756 memcpy(&cgc
->cmd
, &cgc32
.cmd
, CDROM_PACKET_SIZE
);
760 if (copy_from_user(cgc
, arg
, sizeof(*cgc
)))
766 static int scsi_put_cdrom_generic_arg(const struct cdrom_generic_command
*cgc
,
770 if (in_compat_syscall()) {
771 struct compat_cdrom_generic_command cgc32
= {
772 .buffer
= (uintptr_t)(cgc
->buffer
),
773 .buflen
= cgc
->buflen
,
775 .sense
= (uintptr_t)(cgc
->sense
),
776 .data_direction
= cgc
->data_direction
,
778 .timeout
= cgc
->timeout
,
779 .unused
= (uintptr_t)(cgc
->unused
),
781 memcpy(&cgc32
.cmd
, &cgc
->cmd
, CDROM_PACKET_SIZE
);
783 if (copy_to_user(arg
, &cgc32
, sizeof(cgc32
)))
789 if (copy_to_user(arg
, cgc
, sizeof(*cgc
)))
795 static int scsi_cdrom_send_packet(struct scsi_device
*sdev
, bool open_for_write
,
798 struct cdrom_generic_command cgc
;
799 struct sg_io_hdr hdr
;
802 err
= scsi_get_cdrom_generic_arg(&cgc
, arg
);
806 cgc
.timeout
= clock_t_to_jiffies(cgc
.timeout
);
807 memset(&hdr
, 0, sizeof(hdr
));
808 hdr
.interface_id
= 'S';
809 hdr
.cmd_len
= sizeof(cgc
.cmd
);
810 hdr
.dxfer_len
= cgc
.buflen
;
811 switch (cgc
.data_direction
) {
812 case CGC_DATA_UNKNOWN
:
813 hdr
.dxfer_direction
= SG_DXFER_UNKNOWN
;
816 hdr
.dxfer_direction
= SG_DXFER_TO_DEV
;
819 hdr
.dxfer_direction
= SG_DXFER_FROM_DEV
;
822 hdr
.dxfer_direction
= SG_DXFER_NONE
;
828 hdr
.dxferp
= cgc
.buffer
;
831 hdr
.mx_sb_len
= sizeof(struct request_sense
);
832 hdr
.timeout
= jiffies_to_msecs(cgc
.timeout
);
833 hdr
.cmdp
= ((struct cdrom_generic_command __user
*) arg
)->cmd
;
834 hdr
.cmd_len
= sizeof(cgc
.cmd
);
836 err
= sg_io(sdev
, &hdr
, open_for_write
);
844 cgc
.buflen
= hdr
.resid
;
845 if (scsi_put_cdrom_generic_arg(&cgc
, arg
))
851 static int scsi_ioctl_sg_io(struct scsi_device
*sdev
, bool open_for_write
,
854 struct sg_io_hdr hdr
;
857 error
= get_sg_io_hdr(&hdr
, argp
);
860 error
= sg_io(sdev
, &hdr
, open_for_write
);
861 if (error
== -EFAULT
)
863 if (put_sg_io_hdr(&hdr
, argp
))
869 * scsi_ioctl - Dispatch ioctl to scsi device
870 * @sdev: scsi device receiving ioctl
871 * @open_for_write: is the file / block device opened for writing?
872 * @cmd: which ioctl is it
873 * @arg: data associated with ioctl
875 * Description: The scsi_ioctl() function differs from most ioctls in that it
876 * does not take a major/minor number as the dev field. Rather, it takes
877 * a pointer to a &struct scsi_device.
879 * Return: varies depending on the @cmd
881 int scsi_ioctl(struct scsi_device
*sdev
, bool open_for_write
, int cmd
,
884 struct request_queue
*q
= sdev
->request_queue
;
885 struct scsi_sense_hdr sense_hdr
;
887 /* Check for deprecated ioctls ... all the ioctls which don't
888 * follow the new unique numbering scheme are deprecated */
890 case SCSI_IOCTL_SEND_COMMAND
:
891 case SCSI_IOCTL_TEST_UNIT_READY
:
892 case SCSI_IOCTL_BENCHMARK_COMMAND
:
893 case SCSI_IOCTL_SYNC
:
894 case SCSI_IOCTL_START_UNIT
:
895 case SCSI_IOCTL_STOP_UNIT
:
896 printk(KERN_WARNING
"program %s is using a deprecated SCSI "
897 "ioctl, please convert it to SG_IO\n", current
->comm
);
904 case SG_GET_VERSION_NUM
:
905 return sg_get_version(arg
);
907 return sg_set_timeout(sdev
, arg
);
909 return jiffies_to_clock_t(sdev
->sg_timeout
);
910 case SG_GET_RESERVED_SIZE
:
911 return sg_get_reserved_size(sdev
, arg
);
912 case SG_SET_RESERVED_SIZE
:
913 return sg_set_reserved_size(sdev
, arg
);
914 case SG_EMULATED_HOST
:
915 return sg_emulated_host(q
, arg
);
917 return scsi_ioctl_sg_io(sdev
, open_for_write
, arg
);
918 case SCSI_IOCTL_SEND_COMMAND
:
919 return sg_scsi_ioctl(q
, open_for_write
, arg
);
920 case CDROM_SEND_PACKET
:
921 return scsi_cdrom_send_packet(sdev
, open_for_write
, arg
);
923 return scsi_send_start_stop(sdev
, 3);
925 return scsi_send_start_stop(sdev
, 2);
926 case SCSI_IOCTL_GET_IDLUN
:
927 return scsi_get_idlun(sdev
, arg
);
928 case SCSI_IOCTL_GET_BUS_NUMBER
:
929 return put_user(sdev
->host
->host_no
, (int __user
*)arg
);
930 case SCSI_IOCTL_PROBE_HOST
:
931 return ioctl_probe(sdev
->host
, arg
);
932 case SCSI_IOCTL_DOORLOCK
:
933 return scsi_set_medium_removal(sdev
, SCSI_REMOVAL_PREVENT
);
934 case SCSI_IOCTL_DOORUNLOCK
:
935 return scsi_set_medium_removal(sdev
, SCSI_REMOVAL_ALLOW
);
936 case SCSI_IOCTL_TEST_UNIT_READY
:
937 return scsi_test_unit_ready(sdev
, IOCTL_NORMAL_TIMEOUT
,
938 NORMAL_RETRIES
, &sense_hdr
);
939 case SCSI_IOCTL_START_UNIT
:
940 return scsi_send_start_stop(sdev
, 1);
941 case SCSI_IOCTL_STOP_UNIT
:
942 return scsi_send_start_stop(sdev
, 0);
943 case SCSI_IOCTL_GET_PCI
:
944 return scsi_ioctl_get_pci(sdev
, arg
);
946 return scsi_ioctl_reset(sdev
, arg
);
950 if (in_compat_syscall()) {
951 if (!sdev
->host
->hostt
->compat_ioctl
)
953 return sdev
->host
->hostt
->compat_ioctl(sdev
, cmd
, arg
);
956 if (!sdev
->host
->hostt
->ioctl
)
958 return sdev
->host
->hostt
->ioctl(sdev
, cmd
, arg
);
960 EXPORT_SYMBOL(scsi_ioctl
);
963 * scsi_ioctl_block_when_processing_errors - prevent commands from being queued
964 * @sdev: target scsi device
965 * @cmd: which ioctl is it
966 * @ndelay: no delay (non-blocking)
968 * We can process a reset even when a device isn't fully operable.
970 * Return: %0 on success, <0 error code.
972 int scsi_ioctl_block_when_processing_errors(struct scsi_device
*sdev
, int cmd
,
975 if (cmd
== SG_SCSI_RESET
&& ndelay
) {
976 if (scsi_host_in_recovery(sdev
->host
))
979 if (!scsi_block_when_processing_errors(sdev
))
985 EXPORT_SYMBOL_GPL(scsi_ioctl_block_when_processing_errors
);