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>