mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 16:20:55 +07:00
[PATCH] don't mess with file in scsi_nonblockable_ioctl()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
633a08b812
commit
83ff6fe858
@ -277,14 +277,14 @@ EXPORT_SYMBOL(scsi_ioctl);
|
|||||||
* @filp: either NULL or a &struct file which must have the O_NONBLOCK flag.
|
* @filp: either NULL or a &struct file which must have the O_NONBLOCK flag.
|
||||||
*/
|
*/
|
||||||
int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
|
int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
|
||||||
void __user *arg, struct file *filp)
|
void __user *arg, int ndelay)
|
||||||
{
|
{
|
||||||
int val, result;
|
int val, result;
|
||||||
|
|
||||||
/* The first set of iocts may be executed even if we're doing
|
/* The first set of iocts may be executed even if we're doing
|
||||||
* error processing, as long as the device was opened
|
* error processing, as long as the device was opened
|
||||||
* non-blocking */
|
* non-blocking */
|
||||||
if (filp && (filp->f_flags & O_NONBLOCK)) {
|
if (ndelay) {
|
||||||
if (scsi_host_in_recovery(sdev->host))
|
if (scsi_host_in_recovery(sdev->host))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
} else if (!scsi_block_when_processing_errors(sdev))
|
} else if (!scsi_block_when_processing_errors(sdev))
|
||||||
|
@ -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
|
* may try and take the device offline, in which case all further
|
||||||
* access to the device is prohibited.
|
* 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)
|
if (!scsi_block_when_processing_errors(sdp) || !error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
@ -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
|
* case fall through to scsi_ioctl, which will return ENDOEV again
|
||||||
* if it doesn't recognise the ioctl
|
* 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)
|
if (ret != -ENODEV)
|
||||||
return ret;
|
return ret;
|
||||||
return scsi_ioctl(sdev, cmd, argp);
|
return scsi_ioctl(sdev, cmd, argp);
|
||||||
|
@ -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
|
* may try and take the device offline, in which case all further
|
||||||
* access to the device is prohibited.
|
* 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)
|
if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV)
|
||||||
goto out;
|
goto out;
|
||||||
retval = 0;
|
retval = 0;
|
||||||
|
@ -42,7 +42,7 @@ typedef struct scsi_fctargaddress {
|
|||||||
|
|
||||||
extern int scsi_ioctl(struct scsi_device *, int, void __user *);
|
extern int scsi_ioctl(struct scsi_device *, int, void __user *);
|
||||||
extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
|
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 /* __KERNEL__ */
|
||||||
#endif /* _SCSI_IOCTL_H */
|
#endif /* _SCSI_IOCTL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user