| From 3eccfdb01da58fbd0f789ae6ca61cee3769e26de Mon Sep 17 00:00:00 2001 |
| From: Shlomo Pongratz <shlomop@mellanox.com> |
| Date: Sun, 5 May 2013 17:36:26 +0300 |
| Subject: iscsi-target: Fix processing of OOO commands |
| |
| From: Shlomo Pongratz <shlomop@mellanox.com> |
| |
| commit 3eccfdb01da58fbd0f789ae6ca61cee3769e26de upstream. |
| |
| Fix two issues in OOO commands processing done at iscsit_attach_ooo_cmdsn. |
| |
| Handle command serial numbers wrap around by using iscsi_sna_lt and not regular comparisson. |
| |
| The routine iterates until it finds an entry whose serial number is greater than the serial number of |
| the new one, thus the new entry should be inserted before that entry and not after. |
| |
| Signed-off-by: Shlomo Pongratz <shlomop@mellanox.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/target/iscsi/iscsi_target_erl1.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/target/iscsi/iscsi_target_erl1.c |
| +++ b/drivers/target/iscsi/iscsi_target_erl1.c |
| @@ -819,7 +819,7 @@ static int iscsit_attach_ooo_cmdsn( |
| /* |
| * CmdSN is greater than the tail of the list. |
| */ |
| - if (ooo_tail->cmdsn < ooo_cmdsn->cmdsn) |
| + if (iscsi_sna_lt(ooo_tail->cmdsn, ooo_cmdsn->cmdsn)) |
| list_add_tail(&ooo_cmdsn->ooo_list, |
| &sess->sess_ooo_cmdsn_list); |
| else { |
| @@ -829,11 +829,12 @@ static int iscsit_attach_ooo_cmdsn( |
| */ |
| list_for_each_entry(ooo_tmp, &sess->sess_ooo_cmdsn_list, |
| ooo_list) { |
| - if (ooo_tmp->cmdsn < ooo_cmdsn->cmdsn) |
| + if (iscsi_sna_lt(ooo_tmp->cmdsn, ooo_cmdsn->cmdsn)) |
| continue; |
| |
| + /* Insert before this entry */ |
| list_add(&ooo_cmdsn->ooo_list, |
| - &ooo_tmp->ooo_list); |
| + ooo_tmp->ooo_list.prev); |
| break; |
| } |
| } |