[stgt] tgtd 1.0.7 and large targets
robert at bluehost.com
robert at bluehost.com
Mon Nov 1 18:08:22 CET 2010
On Tue, 2 Nov 2010 00:46:35 +0900, FUJITA Tomonori
<fujita.tomonori at lab.ntt.co.jp> wrote:
> On Sun, 31 Oct 2010 16:04:58 -0700
> Mike Anderson <andmike at linux.vnet.ibm.com> wrote:
>
>> ronnie sahlberg <ronniesahlberg at gmail.com> wrote:
>> > Hi,
>> >
>> > I just created a 10TB LUN with latest git for tgtd.
>> > And the initiator can successfully see that the disk is 10TB.
>> > Using ServiceActionIn/ReportCapacity16 correctly.
>> >
>> >
>> > My system is a 64 bit system, is your box 32 or 64 bit?
>> >
>>
>> It looking at gitk between V1.0.6 and V1.0.7 I see that commit
>> 551b64ed34dbb43d6d6530a91d122c0b4d0131bd does make a change to
>> READ_CAPACITY_16.
>
> Yeah, seems that the commit causes the problem. Old kernels request 12
> bytes for READ_CAPACITY_16. So we return invalid data.
>
> READ_CAPACITY_16 is supposed to return 32 bytes but let's accept 12
> bytes.
>
> Robert, can you try this patch?
>
> diff --git a/usr/sbc.c b/usr/sbc.c
> index 3ca2aae..1f0a6ff 100644
> --- a/usr/sbc.c
> +++ b/usr/sbc.c
> @@ -201,14 +201,16 @@ static int sbc_service_action(int host_no, struct
> scsi_cmd *cmd)
> {
> uint32_t *data;
> uint64_t size;
> - int len = 16;
> + int len = 32;
>
> if (cmd->scb[1] != SAI_READ_CAPACITY_16)
> goto sense;
>
> - if (scsi_get_in_length(cmd) < len)
> + if (scsi_get_in_length(cmd) < 12)
> goto overflow;
>
> + len = min_t(int, len, scsi_get_in_length(cmd));
> +
> data = scsi_get_in_buffer(cmd);
> memset(data, 0, len);
My test systems are 64-bit systems.
The patch worked great on 1.0.7 and on 1.0.10 and the initiator is seeing
the large arrays perfectly.
Thanks,
Robert
--
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