Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] don't mess with file in scsi_nonblockable_ioctl()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 83ff6fe8 633a08b8

+9 -6
+2 -2
drivers/scsi/scsi_ioctl.c
··· 277 277 * @filp: either NULL or a &struct file which must have the O_NONBLOCK flag. 278 278 */ 279 279 int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, 280 - void __user *arg, struct file *filp) 280 + void __user *arg, int ndelay) 281 281 { 282 282 int val, result; 283 283 284 284 /* The first set of iocts may be executed even if we're doing 285 285 * error processing, as long as the device was opened 286 286 * non-blocking */ 287 - if (filp && (filp->f_flags & O_NONBLOCK)) { 287 + if (ndelay) { 288 288 if (scsi_host_in_recovery(sdev->host)) 289 289 return -ENODEV; 290 290 } else if (!scsi_block_when_processing_errors(sdev))
+2 -1
drivers/scsi/sd.c
··· 761 761 * may try and take the device offline, in which case all further 762 762 * access to the device is prohibited. 763 763 */ 764 - error = scsi_nonblockable_ioctl(sdp, cmd, p, filp); 764 + error = scsi_nonblockable_ioctl(sdp, cmd, p, 765 + filp ? filp->f_flags & O_NDELAY : 0); 765 766 if (!scsi_block_when_processing_errors(sdp) || !error) 766 767 return error; 767 768
+2 -1
drivers/scsi/sr.c
··· 524 524 * case fall through to scsi_ioctl, which will return ENDOEV again 525 525 * if it doesn't recognise the ioctl 526 526 */ 527 - ret = scsi_nonblockable_ioctl(sdev, cmd, argp, NULL); 527 + ret = scsi_nonblockable_ioctl(sdev, cmd, argp, 528 + file ? file->f_flags & O_NDELAY : 0); 528 529 if (ret != -ENODEV) 529 530 return ret; 530 531 return scsi_ioctl(sdev, cmd, argp);
+2 -1
drivers/scsi/st.c
··· 3263 3263 * may try and take the device offline, in which case all further 3264 3264 * access to the device is prohibited. 3265 3265 */ 3266 - retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p, file); 3266 + retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p, 3267 + file->f_flags & O_NDELAY); 3267 3268 if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV) 3268 3269 goto out; 3269 3270 retval = 0;
+1 -1
include/scsi/scsi_ioctl.h
··· 42 42 43 43 extern int scsi_ioctl(struct scsi_device *, int, void __user *); 44 44 extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, 45 - void __user *arg, struct file *filp); 45 + void __user *arg, int ndelay); 46 46 47 47 #endif /* __KERNEL__ */ 48 48 #endif /* _SCSI_IOCTL_H */