static void __iscsi_put_ctask(struct iscsi_cmd_task *ctask)
{
- struct iscsi_conn *conn = ctask->conn;
-
- if (atomic_dec_and_test(&ctask->refcount)) {
- conn->session->tt->cleanup_cmd_task(conn, ctask);
+ if (atomic_dec_and_test(&ctask->refcount))
iscsi_complete_command(ctask);
- }
}
static void iscsi_put_ctask(struct iscsi_cmd_task *ctask)
sc = ctask->sc;
if (!sc)
return;
+
+ conn->session->tt->cleanup_cmd_task(conn, ctask);
iscsi_ctask_mtask_cleanup(ctask);
sc->result = err;
sc->resid = sc->request_bufflen;
+ /* release ref from queuecommand */
__iscsi_put_ctask(ctask);
}