Currently, if you request a reset through ioctl and it fails,
the kernel escalates like it does for scsi_abort_eh_cmnd:
        bus device reset ->
                target reset ->
                        bus reset ->
                                host reset

This is from scsi_error.c scsi_ioctl_reset:

        switch (val) {
        case SG_SCSI_RESET_NOTHING:
                break;
        case SG_SCSI_RESET_DEVICE:
                rtn = scsi_try_bus_device_reset(scmd);
                if (rtn == SUCCESS)
                        break;
                /* FALLTHROUGH */
        case SG_SCSI_RESET_TARGET:
                rtn = scsi_try_target_reset(scmd);
                if (rtn == SUCCESS)
                        break;
                /* FALLTHROUGH */
        case SG_SCSI_RESET_BUS:
                rtn = scsi_try_bus_reset(scmd);
                if (rtn == SUCCESS)
                        break;
                /* FALLTHROUGH */
        case SG_SCSI_RESET_HOST:
                rtn = scsi_try_host_reset(scmd);
                if (rtn == SUCCESS)
                        break;
        default:
                /* FALLTHROUGH */
                error = -EIO;
                break;
        }

Those stronger reset levels affect multiple devices,
which may or may not be desired.

sg-reset includes a --no-esc option to ask the kernel
to not escalate resets, based on a February 2013 thread,
but the matching kernel changes were never merged.

Original issue:
http://marc.info/?l=linux-scsi&m=136000904311597&w=2

Suggested fix:
http://marc.info/?l=linux-scsi&m=136095718729372&w=2

Could that fix be revived?

---
Rob Elliott    HP Server Storage


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to