Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83ff6fe8 authored by Al Viro's avatar Al Viro
Browse files

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



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 633a08b8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -277,14 +277,14 @@ EXPORT_SYMBOL(scsi_ioctl);
 * @filp: either NULL or a &struct file which must have the O_NONBLOCK flag.
 */
int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
			    void __user *arg, struct file *filp)
			    void __user *arg, int ndelay)
{
	int val, result;

	/* The first set of iocts may be executed even if we're doing
	 * error processing, as long as the device was opened
	 * non-blocking */
	if (filp && (filp->f_flags & O_NONBLOCK)) {
	if (ndelay) {
		if (scsi_host_in_recovery(sdev->host))
			return -ENODEV;
	} else if (!scsi_block_when_processing_errors(sdev))
+2 −1
Original line number Diff line number Diff line
@@ -761,7 +761,8 @@ static int sd_ioctl(struct inode * inode, struct file * filp,
	 * may try and take the device offline, in which case all further
	 * access to the device is prohibited.
	 */
	error = scsi_nonblockable_ioctl(sdp, cmd, p, filp);
	error = scsi_nonblockable_ioctl(sdp, cmd, p,
					filp ? filp->f_flags & O_NDELAY : 0);
	if (!scsi_block_when_processing_errors(sdp) || !error)
		return error;

+2 −1
Original line number Diff line number Diff line
@@ -524,7 +524,8 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
	 * case fall through to scsi_ioctl, which will return ENDOEV again
	 * if it doesn't recognise the ioctl
	 */
	ret = scsi_nonblockable_ioctl(sdev, cmd, argp, NULL);
	ret = scsi_nonblockable_ioctl(sdev, cmd, argp,
					file ? file->f_flags & O_NDELAY : 0);
	if (ret != -ENODEV)
		return ret;
	return scsi_ioctl(sdev, cmd, argp);
+2 −1
Original line number Diff line number Diff line
@@ -3263,7 +3263,8 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
	 * may try and take the device offline, in which case all further
	 * access to the device is prohibited.
	 */
	retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p, file);
	retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p,
					file->f_flags & O_NDELAY);
	if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV)
		goto out;
	retval = 0;
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ typedef struct scsi_fctargaddress {

extern int scsi_ioctl(struct scsi_device *, int, void __user *);
extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
				   void __user *arg, struct file *filp);
				   void __user *arg, int ndelay);

#endif /* __KERNEL__ */
#endif /* _SCSI_IOCTL_H */