cam.3: do not discourage use of cam_open_device
Andriy Gapon
avg at freebsd.org
Fri Apr 23 20:00:56 UTC 2010
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
More information about the freebsd-scsi
mailing list