size_t data_in_sz = 0;
        long ret;
        u16 device_handle = MPT3SAS_INVALID_DEVICE_HANDLE;
+       int tm_ret;
 
        issue_reset = 0;
 
                        if (pcie_device && (!ioc->tm_custom_handling) &&
                            (!(mpt3sas_scsih_is_pcie_scsi_device(
                            pcie_device->device_info))))
-                               mpt3sas_scsih_issue_locked_tm(ioc,
+                               tm_ret = mpt3sas_scsih_issue_locked_tm(ioc,
                                  le16_to_cpu(mpi_request->FunctionDependent1),
                                  0, 0, 0,
                                  MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0,
                                  0, pcie_device->reset_timeout,
                        MPI26_SCSITASKMGMT_MSGFLAGS_PROTOCOL_LVL_RST_PCIE);
                        else
-                               mpt3sas_scsih_issue_locked_tm(ioc,
+                               tm_ret = mpt3sas_scsih_issue_locked_tm(ioc,
                                  le16_to_cpu(mpi_request->FunctionDependent1),
                                  0, 0, 0,
                                  MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET, 0,
                                  0, 30, MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET);
+
+                       if (tm_ret != SUCCESS) {
+                               ioc_info(ioc,
+                                        "target reset failed, issue hard reset: handle (0x%04x)\n",
+                                        le16_to_cpu(mpi_request->FunctionDependent1));
+                               mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
+                       }
                } else
                        mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
        }