Date: Tue, 8 May 2007 09:24:40 -0500 From: "Scot Hetzel" <swhetzel@gmail.com> To: "Bruce Evans" <bde@zeta.org.au> Cc: emulation@freebsd.org, Pawel Jakub Dawidek <pjd@freebsd.org> Subject: Re: linuxolator: LTP lseek03 failure Message-ID: <790a9fff0705080724o1039c405g1cfa1b31ba6a91be@mail.gmail.com> In-Reply-To: <20070507124848.S47783@besplex.bde.org> References: <790a9fff0705021345j2ad9ae98o56aaf357d556fe27@mail.gmail.com> <790a9fff0705040004oab16ed8q1a1c476386379ea9@mail.gmail.com> <20070504190007.Y37951@besplex.bde.org> <790a9fff0705040819u24e4c2f0s5c9fc34b93770e13@mail.gmail.com> <790a9fff0705061005v1a1a883ehc155bac7f747c3eb@mail.gmail.com> <20070507124848.S47783@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 5/6/07, Bruce Evans <bde@zeta.org.au> wrote: > On Sun, 6 May 2007, Scot Hetzel wrote: > > > On 5/4/07, Scot Hetzel <swhetzel@gmail.com> wrote: > > >> Would the best fix be to change the native lseek to return EINVAL when > >> fo_ioctl returns ENOTTY? > > Probably. > > > I had a look at the OpenSolaris implementation of lseek and found that > > we are returning the wrong error code for the ENOTTY case. When > > ENOTTY is returned by fo_ioctl, we should be checking for the > > following cases: > > > > SEEK_DATA - Is offset past end of file > > SEEK_HOLE - Return virtual hole at end of file, if offset is valid > > > > on error, SEEK_DATA and SEEK_HOLE should be returning ENXIO for these > > cases. OpenSolaris also checks offset > OFF_MAX, and returns > > EOVERFLOW. > > > > When the lseek03 test is run, with these changes, it returns with ENXIO. > > Shouldn't it return with EOVERFLOW even for zfs? I guess the test doesn't > check for that, so the result should be EINVAL for non-zfs and maybe > ENXIO for zfs if the test didn't set up right for the seeks to work > (presumably it sets the offset to something reasonable so as not to get > spurious errors from args other than `whence', but it expects i/o to fail > so it doesn't set up for i/o. > > > I sent the attached patch for kern/vfs_syscalls.c to pjd for review. > I ran the lseek03 test on a unpatched kernel with a ZFS filesystem mounted on gentoo-stage3/tmp. The lseek03 test did return with ENXIO with the ZFS tmp, and ENOTTY with a UFS tmp. I then created a patch to kern/vfs_vnops.c:vn_ioctl that checked if com was either SEEK_DATA or SEEK_HOLE and return EINVAL. While this worked for UFS, it disabled SEEK_[DATA,HOLE] for ZFS. So this wasn't the correct fix either. The vn_ioctl function calls VOP_IOCTL. Should the fix be applied to VOP_IOCTL, or added to per filesystem *_ioctl functions. Where is VOP_IOCTL defined in the src tree? Scot Bruce thanks for your review of the code. -- DISCLAIMER: No electrons were mamed while sending this message. Only slightly bruised.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?790a9fff0705080724o1039c405g1cfa1b31ba6a91be>