Map ENOTTY to EINVAL for lseek(SEEK_DATA/SEEK_HOLE).
Without this patch, when an application performed lseek(SEEK_DATA/SEEK_HOLE) on a file in a file system that does not have its own VOP_IOCTL(), the lseek(2) fails with errno ENOTTY. This didn't seem appropriate, since ENOTTY is not listed as an error return by either the lseek(2) man page nor the POSIX draft for lseek(2). This was discussed on freebsd-current@ here: http://docs.FreeBSD.org/cgi/mid.cgi?CAOtMX2iiQdv1+15e1N_r7V6aCx_VqAJCTP1AW+qs3Yg7sPg9wA This trivial patch maps ENOTTY to EINVAL for lseek(SEEK_DATA/SEEK_HOLE). Reviewed by: markj Relnotes: yes Differential Revision: https://reviews.freebsd.org/D21300
This commit is contained in:
parent
5df6fa4344
commit
df9bc7df42
@ -2275,9 +2275,13 @@ vn_seek(struct file *fp, off_t offset, int whence, struct thread *td)
|
||||
break;
|
||||
case SEEK_DATA:
|
||||
error = fo_ioctl(fp, FIOSEEKDATA, &offset, cred, td);
|
||||
if (error == ENOTTY)
|
||||
error = EINVAL;
|
||||
break;
|
||||
case SEEK_HOLE:
|
||||
error = fo_ioctl(fp, FIOSEEKHOLE, &offset, cred, td);
|
||||
if (error == ENOTTY)
|
||||
error = EINVAL;
|
||||
break;
|
||||
default:
|
||||
error = EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user