[4621] in linux-scsi channel archive
Unneccessary fat removal (scsi_ioctl.c)
daemon@ATHENA.MIT.EDU (Pavel Machek)
Sat Aug 29 12:38:04 1998
Date: Fri, 28 Aug 1998 21:45:34 +0200
From: Pavel Machek <pavel@bug.ucw.cz>
To: linux-scsi@vger.rutgers.edu
--- clean/drivers/scsi/scsi_ioctl.c Tue Jun 9 22:36:09 1998
+++ linux/drivers/scsi/scsi_ioctl.c Sat Aug 1 13:40:39 1998
@@ -364,10 +364,7 @@
* may try and take the device offline, in which case all further
* access to the device is prohibited.
*/
- if( !scsi_block_when_processing_errors(dev) )
- {
- return -ENODEV;
- }
+ if( !scsi_block_when_processing_errors(dev) ) return -ENODEV;
switch (cmd) {
case SCSI_IOCTL_GET_IDLUN:
@@ -387,16 +384,11 @@
put_user( dev->host->host_no, (int *) arg);
return 0;
case SCSI_IOCTL_TAGGED_ENABLE:
- if(!capable(CAP_SYS_ADMIN)) return -EACCES;
- if(!dev->tagged_supported) return -EINVAL;
- dev->tagged_queue = 1;
- dev->current_tag = 1;
- return 0;
case SCSI_IOCTL_TAGGED_DISABLE:
if(!capable(CAP_SYS_ADMIN)) return -EACCES;
if(!dev->tagged_supported) return -EINVAL;
- dev->tagged_queue = 0;
- dev->current_tag = 0;
+ dev->tagged_queue = dev->current_tag =
+ (cmd == SCSI_IOCTL_TAGGED_ENABLE);
return 0;
case SCSI_IOCTL_PROBE_HOST:
return ioctl_probe(dev->host, arg);
@@ -405,43 +397,29 @@
return scsi_ioctl_send_command((Scsi_Device *) dev,
(Scsi_Ioctl_Command *) arg);
case SCSI_IOCTL_DOORLOCK:
- if (!dev->removable || !dev->lockable) return 0;
- scsi_cmd[0] = ALLOW_MEDIUM_REMOVAL;
- scsi_cmd[1] = dev->lun << 5;
- scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
- scsi_cmd[4] = SCSI_REMOVAL_PREVENT;
- return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
- NORMAL_TIMEOUT, NORMAL_RETRIES);
- break;
case SCSI_IOCTL_DOORUNLOCK:
if (!dev->removable || !dev->lockable) return 0;
scsi_cmd[0] = ALLOW_MEDIUM_REMOVAL;
scsi_cmd[1] = dev->lun << 5;
scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
- scsi_cmd[4] = SCSI_REMOVAL_ALLOW;
+ scsi_cmd[4] = (cmd == SCSI_IOCTL_DOORLOCK) ?
+ SCSI_REMOVAL_PREVENT : SCSI_REMOVAL_ALLOW;
return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
NORMAL_TIMEOUT, NORMAL_RETRIES);
+ break;
case SCSI_IOCTL_TEST_UNIT_READY:
scsi_cmd[0] = TEST_UNIT_READY;
scsi_cmd[1] = dev->lun << 5;
- scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
- scsi_cmd[4] = 0;
+ scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = 0;
return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
NORMAL_TIMEOUT, NORMAL_RETRIES);
break;
case SCSI_IOCTL_START_UNIT:
- scsi_cmd[0] = START_STOP;
- scsi_cmd[1] = dev->lun << 5;
- scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
- scsi_cmd[4] = 1;
- return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
- START_STOP_TIMEOUT, NORMAL_RETRIES);
- break;
case SCSI_IOCTL_STOP_UNIT:
scsi_cmd[0] = START_STOP;
scsi_cmd[1] = dev->lun << 5;
scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
- scsi_cmd[4] = 0;
+ scsi_cmd[4] = (cmd == SCSI_IOCTL_START_UNIT);
return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
START_STOP_TIMEOUT, NORMAL_RETRIES);
break;
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu