Re: [PATCH 2/3] iscsi-target: iscsi: Fix exp_statsn handling to use iSCSI serial number arithmetic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Roland & Steve,

On Mon, 2012-11-05 at 18:02 -0800, Roland Dreier wrote:
> From: Steve Hodgson <steve@xxxxxxxxxxxxxxx>
> 
> Signed-off-by: Steve Hodgson <steve@xxxxxxxxxxxxxxx>
> Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx>
> ---
>  drivers/target/iscsi/iscsi_target.c      |    2 +-
>  drivers/target/iscsi/iscsi_target_erl2.c |    2 +-
>  drivers/target/iscsi/iscsi_target_tmr.c  |    4 ++--
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 

I don't see anything in RFC-3720 about the ExpStatSN being handled using
serial number arithmetic..

The only value in RFC-3720 that explictly mentioned SNA is CmdSN

3.2.2.1.  Command Numbering and Acknowledging

   ....

   The command number is carried by the iSCSI PDU as CmdSN
   (Command Sequence Number).  The numbering is session-wide.  Outgoing
   iSCSI PDUs carry this number.  The iSCSI initiator allocates CmdSNs
   with a 32-bit unsigned counter (modulo 2**32).  Comparisons and
   arithmetic on CmdSN use Serial Number Arithmetic as defined in
   [RFC1982] where SERIAL_BITS = 32.

Is there an actual bug this patch fixes, or some initiator that expects
ExpStatSN to be using SNA..?   (CC'ing mnc + hare)

> diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
> index 035c2c7..6de6584 100644
> --- a/drivers/target/iscsi/iscsi_target.c
> +++ b/drivers/target/iscsi/iscsi_target.c
> @@ -735,7 +735,7 @@ static void iscsit_ack_from_expstatsn(struct iscsi_conn *conn, u32 exp_statsn)
>  	list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
>  		spin_lock(&cmd->istate_lock);
>  		if ((cmd->i_state == ISTATE_SENT_STATUS) &&
> -		    (cmd->stat_sn < exp_statsn)) {
> +		    iscsi_sna_lt(cmd->stat_sn, exp_statsn)) {
>  			cmd->i_state = ISTATE_REMOVE;
>  			spin_unlock(&cmd->istate_lock);
>  			iscsit_add_cmd_to_immediate_queue(cmd, conn,
> diff --git a/drivers/target/iscsi/iscsi_target_erl2.c b/drivers/target/iscsi/iscsi_target_erl2.c
> index 17d8c20..9ac4c151 100644
> --- a/drivers/target/iscsi/iscsi_target_erl2.c
> +++ b/drivers/target/iscsi/iscsi_target_erl2.c
> @@ -372,7 +372,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
>  		 * made generic here.
>  		 */
>  		if (!(cmd->cmd_flags & ICF_OOO_CMDSN) && !cmd->immediate_cmd &&
> -		     (cmd->cmd_sn >= conn->sess->exp_cmd_sn)) {
> +		     iscsi_sna_gte(cmd->stat_sn, conn->sess->exp_cmd_sn)) {
>  			list_del(&cmd->i_conn_node);
>  			spin_unlock_bh(&conn->cmd_lock);
>  			iscsit_free_cmd(cmd);
> diff --git a/drivers/target/iscsi/iscsi_target_tmr.c b/drivers/target/iscsi/iscsi_target_tmr.c
> index 4a99820..9d4417a 100644
> --- a/drivers/target/iscsi/iscsi_target_tmr.c
> +++ b/drivers/target/iscsi/iscsi_target_tmr.c
> @@ -50,8 +50,8 @@ u8 iscsit_tmr_abort_task(
>  	if (!ref_cmd) {
>  		pr_err("Unable to locate RefTaskTag: 0x%08x on CID:"
>  			" %hu.\n", hdr->rtt, conn->cid);
> -		return (be32_to_cpu(hdr->refcmdsn) >= conn->sess->exp_cmd_sn &&
> -			be32_to_cpu(hdr->refcmdsn) <= conn->sess->max_cmd_sn) ?
> +		return (iscsi_sna_gte(be32_to_cpu(hdr->refcmdsn), conn->sess->exp_cmd_sn) &&
> +			iscsi_sna_lte(be32_to_cpu(hdr->refcmdsn), conn->sess->max_cmd_sn)) ?
>  			ISCSI_TMF_RSP_COMPLETE : ISCSI_TMF_RSP_NO_TASK;
>  	}
>  	if (ref_cmd->cmd_sn != be32_to_cpu(hdr->refcmdsn)) {


--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux