[stgt] [PATCH] Fix ModeSense. ModeSense never returns residuals. Additionally fix the two arguments that were swapped in set_byte_safe.

Alexander Nezhinsky nezhinsky at gmail.com
Fri May 31 13:50:05 CEST 2013


On Fri, May 31, 2013 at 8:30 AM, Ronnie Sahlberg
<ronniesahlberg at gmail.com> wrote:

> diff --git a/usr/spc.c b/usr/spc.c
> index 074fdad..197e611 100644
> --- a/usr/spc.c
> +++ b/usr/spc.c
> @@ -622,7 +622,7 @@ static int build_mode_page(uint8_t *data, struct mode_pg *pg,
>   * Set a byte at the given index within dst buffer to val,
>   * not exceeding dst_len bytes available at dst.
>   */
> -void set_byte_safe(uint8_t *dst, uint32_t dst_len, uint32_t index, int val)
> +void set_byte_safe(uint8_t *dst, uint32_t index, uint32_t dst_len, int val)
>  {
>         if (index < dst_len)
>                 dst[index] = (uint8_t)val;

Oops, you are right! My fault, i swapped the arguments when calling
the function.

> @@ -713,10 +713,8 @@ int spc_mode_sense(int host_no, struct scsi_cmd *cmd)
>                 set_byte_safe(data, 7, alloc_len, blk_desc_len & 0xff);
>         }
>
> -       scsi_set_in_resid_by_actual(cmd, actual_len);
>         return SAM_STAT_GOOD;
>  sense:
> -       scsi_set_in_resid_by_actual(cmd, 0);
>         sense_data_build(cmd, key, asc);
>         return SAM_STAT_CHECK_CONDITION;

I guess we shouldn't remove these calls as the following reasoning:
 > 2, These commands never return residual under/overflow so dont set
the residuals for them
 does not exactly apply here.

Truncation of Data-IN buffer to ALLOC_LENGTH is not reflected in residual count,
but if ALLOC_LENGTH is less than EDTL, it should produce a non-zero
residual count.
That is one of the purposes of scsi_set_in_resid_by_actual().
Also, please refer to the commit log of d7af3dc1 which explains this logic.
Is spc_mode_sense() really a special case which requires a different treatment?

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



More information about the stgt mailing list