diff options
author | Jayamohan Kallickal <jayamohank@gmail.com> | 2013-04-06 07:38:25 +0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-05-02 19:08:27 +0400 |
commit | 43f388b02e5c3a10a89f7163f38787a98638eb18 (patch) | |
tree | 7237beb102754fb5c2dbfa4314a754dd597b28ac /drivers/scsi/be2iscsi/be_iscsi.c | |
parent | bf9131cbb860fbd0faf5483d3df5d60b25a3f47c (diff) | |
download | linux-43f388b02e5c3a10a89f7163f38787a98638eb18.tar.xz |
[SCSI] be2iscsi: Fix freeing CXN specific driver resources.
Free CXN specific resource held by driver when login redirection
or connection retry happens. Login redirection was failing
because WRB/SGL were not allocated from the CID on which
doorbell was rung.
Fixed the issue raised by MikeC
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/be2iscsi/be_iscsi.c')
-rw-r--r-- | drivers/scsi/be2iscsi/be_iscsi.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index 461f859cfbf6..dd5beff92c61 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c @@ -990,9 +990,24 @@ static void beiscsi_put_cid(struct beiscsi_hba *phba, unsigned short cid) static void beiscsi_free_ep(struct beiscsi_endpoint *beiscsi_ep) { struct beiscsi_hba *phba = beiscsi_ep->phba; + struct beiscsi_conn *beiscsi_conn; beiscsi_put_cid(phba, beiscsi_ep->ep_cid); beiscsi_ep->phba = NULL; + + /** + * Check if any connection resource allocated by driver + * is to be freed.This case occurs when target redirection + * or connection retry is done. + **/ + if (!beiscsi_ep->conn) + return; + + beiscsi_conn = beiscsi_ep->conn; + if (beiscsi_conn->login_in_progress) { + beiscsi_free_mgmt_task_handles(beiscsi_conn); + beiscsi_conn->login_in_progress = 0; + } } /** |