linuxolator: LTP lseek03 failure
Bruce Evans
bde at zeta.org.au
Fri May 4 09:15:39 UTC 2007
On Fri, 4 May 2007, Scot Hetzel wrote:
> On 5/2/07, Scot Hetzel <swhetzel at gmail.com> wrote:
>> I have investigated the new LTP test failure for lseek03, and the
>> first test sets whence to 4 (SEEK_HOLE):
>>
>> test 1 lseek(tfile_1554, 1, 4) Failed, errno=25 Inappropriate ioctl
>> for device, expected 22(EINVAL)
>>
> Looking thru -CURRENT, I found that SEEK_HOLE and SEEK_DATA were added
> to lseek (sys/kern/vfs_syscalls.c 1.437) on April 5th, 2007 by pjd as
> a requirement for the ZFS implementation.
The main bug is in the implementation of SEEK_HOLE and SEEK_DATA. This
uses fo_ioctl() and fo_ioctl() returns ENOTTY if the file system doesn't
support these seeks, but ENOTTY (Inappropriate ioctl for device) is a
very inappropriate errno for a syscall that is not ioctl(), especially
on a file that is not a device. POSIX requires EINVAL if the `whence'
arg is not a standard POSIX one, and I think ENOTTY should be translated
to this.
If the test is run on a file system that supports these seeks, then
whence = 4 wouldn't fail natively, and I think it should only fail
for emulators that are supposed to be perfectly compatible, which
the Linux emulator isn't. (It would be impossible in practice to even
find all native features that the system being emulated doesn't have,
and more impossible to turn them all off.)
Bruce
More information about the freebsd-emulation
mailing list