Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Mar 2012 16:30:22 -0800
From:      Chuck Tuffli <chuck@tuffli.net>
To:        "Kenneth D. Merry" <ken@freebsd.org>
Cc:        freebsd-scsi <freebsd-scsi@freebsd.org>
Subject:   Re: [patch] CTL should check condition INQUIRY with invalid LUN
Message-ID:  <CAM0tzX2y=Nh7MjM%2BDhZJu-CPYqUhvBsJCVjPsagTXmR3v_2_Hw@mail.gmail.com>
In-Reply-To: <20120306001731.GA38229@nargothrond.kdm.org>
References:  <CAM0tzX1=OrfYK3za9s5xkiUDmnO=maHPbhmyv0k50y=6-WTT9w@mail.gmail.com> <20120306001731.GA38229@nargothrond.kdm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Mar 5, 2012 at 4:17 PM, Kenneth D. Merry <ken@freebsd.org> wrote:
> On Mon, Mar 05, 2012 at 14:46:52 -0800, Chuck Tuffli wrote:
>> Currently, the CTL responds to INQUIRY commands targeted at invalid
>> LUNs by returning valid data with the peripheral qualifier set to LU
>> OFFLINE. This patch instead returns a check condition with LU NOT
>> READY.
>>
>> Linux initiators see the LU OFFLINE and start creating SG devices, but
>> are not able to finish. The offline also causes them to keep probing
>> LUNs.
>
> Linux used to behave properly. =A0What version are you testing with?

RHEL 6.1

> Returning a check condition is not correct according to the spec. =A0This=
 is
> from SPC-4 (r31):
>
> "In response to an INQUIRY command received by an incorrect logical unit,
> the SCSI target device shall return the INQUIRY data with the peripheral
> qualifier set to the value defined in 6.4.2. The INQUIRY command shall
> return CHECK CONDITION status only when the device server is unable to
> return the requested INQUIRY data."

You are correct, so I agree the patch I submitted yesterday is wrong, but :=
)

> Since CTL can support a LUN at the requested address, but there isn't one
> there, it returns OFFLINE status.

this offline status causes Linux to create 255 sg additional devices.
While this isn't directly a CTL problem, I'm sure I will end up having
to explain why this happens more than once and would rather head off
the problem. Would you be willing to consider changing the returned
peripheral qualifier from
    (SID_QUAL_LU_OFFLINE << 5) | T_DIRECT
to
    (SID_QUAL_BAD_LU << 5) | T_NODEVICE
? Linux seems happier with this FWIW.

> They should be issuing a REPORT LUNs and then probe the LUNs that are
> returned...

Linux does issue REPORT LUNs, but most of the time, this gets
check-conditioned with illegal request, overlapped commands attempted.

---chuck



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAM0tzX2y=Nh7MjM%2BDhZJu-CPYqUhvBsJCVjPsagTXmR3v_2_Hw>