Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 May 2007 19:15:36 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Scot Hetzel <swhetzel@gmail.com>
Cc:        emulation@FreeBSD.org
Subject:   Re: linuxolator: LTP lseek03 failure
Message-ID:  <20070504190007.Y37951@besplex.bde.org>
In-Reply-To: <790a9fff0705040004oab16ed8q1a1c476386379ea9@mail.gmail.com>
References:  <790a9fff0705021345j2ad9ae98o56aaf357d556fe27@mail.gmail.com> <790a9fff0705040004oab16ed8q1a1c476386379ea9@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 4 May 2007, Scot Hetzel wrote:

> On 5/2/07, Scot Hetzel <swhetzel@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



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