task->task_state_flags &=
                ~(SAS_TASK_STATE_PENDING | SAS_TASK_AT_INITIATOR);
-       task->task_state_flags |= SAS_TASK_STATE_DONE;
 
        memset(ts, 0, sizeof(*ts));
        ts->resp = SAS_TASK_COMPLETE;
                (!(complete_hdr->dw0 & CMPLT_HDR_RSPNS_XFRD_MSK))) {
 
                slot_err_v2_hw(hisi_hba, task, slot);
-               if (unlikely(slot->abort)) {
-                       queue_work(hisi_hba->wq, &slot->abort_slot);
-                       /* immediately return and do not complete */
+
+               if (unlikely(slot->abort))
                        return ts->stat;
-               }
                goto out;
        }
 
        }
 
 out:
-
+       task->task_state_flags |= SAS_TASK_STATE_DONE;
        hisi_sas_slot_task_free(hisi_hba, task, slot);
        sts = ts->stat;