Further to a January 2013 thread titled: "[PATCH] SG_SCSI_RESET ioctl should only perform requested operation" by Jeremy Linton a patch (v3) is presented that expands the existing ioctl to include "no_escalate" versions to the existing resets. This requires no changes to SCSI low level drivers (LLDs); it adds several more finely tuned reset options to the user space. For example: /* This call remains the same, with the same escalating semantics * if the device (LU) reset fail. That is: on failure to try a * target reset and if that fails, try a bus reset, and if that fails * try a host (i.e. LLD) reset. */ val = SG_SCSI_RESET_DEVICE; res = ioctl(, SG_SCSI_RESET, &val); /* What follows is a new option introduced by this patch series. Only * a device reset is attempted. If that fails then an appropriate * error code is provided. N.B. There is no reset escalation. */ val = SG_SCSI_RESET_DEVICE | SG_SCSI_RESET_NO_ESCALATE; res = ioctl(, SG_SCSI_RESET, &val); This patches applies to lk 3.17.0 and Christoph's drivers-for-3.18 tree. The sg_reset utility has been extended to use this new option since sg3_utils-1.36 package which was released on 20130531. v3 of this patch changes adding, subtracting and arithmetic comparisons to the corresponding bitwise logical operations. For example 'SG_SCSI_RESET_DEVICE + SG_SCSI_RESET_NO_ESCALATE' has been changed to 'SG_SCSI_RESET_DEVICE | SG_SCSI_RESET_NO_ESCALATE'. ChangeLog: - modify SG_SCSI_RESET ioctl so the SG_SCSI_RESET_NO_ESCALATE value may be OR-ed to the existing values. If so the existing device->target->bus->host escalation does not occur. The SG_SCSI_RESET ioctl is modified in both the sg driver and scsi_ioctl.c (so block devices can use it). - modify scsi_reset_provider() in the scsi_error.c file in a similar way to support this additional functionality. Signed-off-by: Douglas Gilbert