Frame should be freed in fc_tm_done, this is an updated patch on the one
initially submitted by Hillf Danton.

Signed-off-by: Hillf Danton <[email protected]>
Signed-off-by: Yi Zou <[email protected]>
---

 drivers/scsi/libfc/fc_fcp.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 00b38ab..4c9e934 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -1316,27 +1316,27 @@ static void fc_tm_done(struct fc_seq *seq, struct 
fc_frame *fp, void *arg)
                 *
                 * scsi-eh will escalate for when either happens.
                 */
-               return;
+               goto out;
        }
 
        if (fc_fcp_lock_pkt(fsp))
-               return;
+               goto out;
 
        /*
         * raced with eh timeout handler.
         */
-       if (!fsp->seq_ptr || !fsp->wait_for_comp) {
-               spin_unlock_bh(&fsp->scsi_pkt_lock);
-               return;
-       }
+       if (!fsp->seq_ptr || !fsp->wait_for_comp)
+               goto out_unlock;
 
        fh = fc_frame_header_get(fp);
        if (fh->fh_type != FC_TYPE_BLS)
                fc_fcp_resp(fsp, fp);
        fsp->seq_ptr = NULL;
        fsp->lp->tt.exch_done(seq);
-       fc_frame_free(fp);
+out_unlock:
        fc_fcp_unlock_pkt(fsp);
+out:
+       fc_frame_free(fp);
 }
 
 /**

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to