probing LUN's

Tony Maher tonymaher at optushome.com.au
Fri Jul 25 01:46:33 PDT 2003


Hello Ken,

> > Attempts to use CAM_QUIRK_HILUNS were not successful.
> > Following Matt Jacobs pointer to the code I modified cam_xpt.c
> > 
> > *** Warning - cut'n'paste ***
> > 
> > --- cam_xpt.c   Thu Jul 24 01:58:46 2003
> > +++ cam_xpt.c.orig      Wed Jul 23 23:23:02 2003
> > @@ -5247,14 +5247,10 @@
> >                                         device = TAILQ_NEXT(device, links);
> >                         }
> >                         splx(s);
> > -                       if (lun_id < (CAM_SCSI2_MAXLUN-1) || phl)
> > -                                       lun_id++;
> > -/*
> >                         if ((lun_id != 0) || (device != NULL)) {
> >                                 if (lun_id < (CAM_SCSI2_MAXLUN-1) || phl)
> >                                         lun_id++;
> >                         }
> > -*/
> >                 } else {
> >                         struct cam_ed *device;
> > 
> > And now it finds the HITACHI disk at boot.
> > 
> > I am not sure what you mean by "LUN 4 to show up > if LUN 0 isn't probing".
> > There is no device at LUN 0 so the probe will return no device. The existing
> > code gives up further probing at this point (no device at lun 0).
> > This would appear to be a bug.
>
> It may or may not be a bug.  As I said above, SAM-3 says that the device
> must respond on LUN 0.

Ok.

> We don't know whether or not the device is responding on LUN 0.  It could
> be responding to an INQUIRY, but just with a peripheral qualifier that is
> non-zero.
>
> If it is responding with a peripheral qualifier of 1, then it may well be
> worth probing the LUNs to see what LUNs are supported, or perhaps issuing a
> REPORT LUNS command to see what it claims to support.
>
> If it is responding with a peripheral qualifier of 3, then it isn't being
> truthful, because it can support a LUN at that address.
>
> If it isn't responding to an INQUIRY at that LUN at all, then it isn't
> following the spec.
>
> > Some background on the SAN setup.
> > There are two controllers, one direct connect to Sun box
> >                            one direct connect to FreeBSD box
> > There are two 'logical' raid 5 sets, one assigned to each controller.
> > On the Sun it sees LUNS 0-3, and FreeBSD sees LUN 4.
> > It would appear that there is just on physical raid 5 but it is subdivided.
> > I also learnt today from my colleague that you can map LUN 4 to LUN 0
> > on the second controller (at least to the host freebsd box it will be at LUN
> > 0).
>
> Sounds like changing the configuration might be an easy way to make things
> work properly.

Yes it would.  However I think this problem could occur for other people
and 'fixing' it now (if possible while being consistent with standard)
would be nice.

> > However given likelyhood of more SAN devices in future (with 'strange'
> > configurations) it would be nice if FreeBSD probed all LUNs.
> > It isn't a big cost is it?
> > If it is could we have a kernel option CAM_PROBE_ALL_LUNS?
>
> We may be able to solve it generically...it really depends on what the
> device is doing.

Yes.

> There isn't a quick way to figure that out from userland,
> it'll take a kernel patch with a few printfs to figure out whether it is
> returning any inquiry data for LUN 0, and then what the peripheral
> qualifier is.
>
> If you're willing to try it out, I can probably come up with a patch
> tomorrow.  That would at least tell us what would need to be done to make
> it probe.

I am happy to test out your patch, though I wont be able to test till
monday.

(BTW its running 5.1 release but I intend to test wih 4.8 as well
since in production it will be a 4.8R system)

thanks
--
tonym


More information about the freebsd-scsi mailing list