Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Apr 2010 23:00:52 +0300
From:      Andriy Gapon <avg@freebsd.org>
To:        "Kenneth D. Merry" <ken@freebsd.org>
Cc:        freebsd-scsi@freebsd.org
Subject:   Re: cam.3: do not discourage use of cam_open_device
Message-ID:  <4BD1FC74.3090504@freebsd.org>
In-Reply-To: <20100423184412.GA5016@nargothrond.kdm.org>
References:  <4BCDEBF6.3030609@icyb.net.ua> <20100423184412.GA5016@nargothrond.kdm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 23/04/2010 21:44 Kenneth D. Merry said the following:
> On Tue, Apr 20, 2010 at 21:01:26 +0300, Andriy Gapon wrote:
>> This is based on my understanding what Scott Long tried to explain me a while ago.
>>
>> Index: lib/libcam/cam.3
>> ===================================================================
>> --- lib/libcam/cam.3	(revision 206902)
>> +++ lib/libcam/cam.3	(working copy)
>> @@ -190,12 +190,6 @@
>>  Once the device name and unit number
>>  are determined, a lookup is performed to determine the passthrough device
>>  that corresponds to the given device.
>> -.Fn cam_open_device
>> -is rather simple to use, but it is not really suitable for general use
>> -because its behavior is not necessarily deterministic.
>> -Programmers writing
>> -new applications should make the extra effort to use one of the other open
>> -routines documented below.
>>  .Pp
>>  .Fn cam_open_spec_device
>>  opens the
>>
>>
>> It seems that this warning about ambiguity came from pre-devfs days when e.g. cd0
>> nodes in different directories could correspond to different actual SCSI
>> peripherals.  It seems that there wasn't an ambiguity if an absolute device path
>> was given.
>>
>> Nowadays, cam_open_device seems to always do a proper job of finding a correct
>> pass device.
> 
> The warning had more to do with the ambiguity trying to make sense of
> device names than having different device nodes lying around.
> 
> cam_get_device() (which is called by cam_open_device()) tries to do
> some things that will break on devices that start with n (unless it's a
> non-rewound tape device) or r.  Right now we don't have any CAM peripheral
> drivers that start with those letters, so it works.  It also won't do the
> right thing on devices with gpt partitions.  Some of that can be fixed,
> though.
> 
> So it's mostly deterministic, but it may not do exactly what you expect.
> 
> It may be good to keep some statement in there pointing people to the other
> routines as being preferred because they're a little more deterministic.

These are very valid concerns.
I was aware that we ditched "r" (raw) devices quite a while ago, but wasn't sure
about "n" kind as I have never dealt with tapes in my life.
Perhaps we can just remove that code now?

Also, from my point of view, it doesn't make any sense to support
cam_open_device() calls on slices, partitions, etc.  I mean, what is a
passthough device for a slice of disk?  Can you send SCSI commands to a slice?

All these comes from my (limited) practical experience with some userland
applications where people were afraid to use cam_open_device() because of the
warning in question.  So they went out of the way to "manually" establish
mapping from an original device name to a corresponding passthough device.

So, I'd like to let people know that it's totally OK to use cam_open_device()
with "normal" device names.  I don't care about the extra logic ("r", "n"
prefixes; partition/slice suffixes).

But that's only my point of view.

And thank you for the explanation!

-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4BD1FC74.3090504>