On Tue, 26 Mar 2013, Bob Beck wrote: > So, does that make the case for fixing this in VOP_PATHCONF instead? > > Call the underlying filesystem call if it's there? and if not return the > "something sane" there? then we have our "something defaultly sane" > shit in one place? > > Just thinking outloud...
Could you stop that? I can hear you from here and It's hard to think over the bellowing! Diff below pulls into VOP_PATHCONF() the tests for _PC_PATH_MAX, _PC_PIPE_BUF, _PC_ASYNC_IO, _PC_PRIO_IO, and _PC_SYNC_IO. Since the latter three aren't supported anywhere, we can define the related _POSIX_{ASYNC,PRIO,SYNC}_IO symbols in <unistd.h> with value -1. Also: zap pointless tty-only values from procfs(!). (I have another diff for _PC_TIMESTAMP_RESOLUTION support, but that's conceptually separate.) Index: sys/isofs/cd9660/cd9660_vnops.c =================================================================== RCS file: /cvs/src/sys/isofs/cd9660/cd9660_vnops.c,v retrieving revision 1.57 diff -u -p -r1.57 cd9660_vnops.c --- sys/isofs/cd9660/cd9660_vnops.c 26 Sep 2012 04:32:40 -0000 1.57 +++ sys/isofs/cd9660/cd9660_vnops.c 27 Mar 2013 19:54:57 -0000 @@ -876,12 +876,6 @@ cd9660_pathconf(void *v) else *ap->a_retval = 37; break; - case _PC_PATH_MAX: - *ap->a_retval = PATH_MAX; - break; - case _PC_PIPE_BUF: - *ap->a_retval = PIPE_BUF; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; Index: sys/isofs/udf/udf_vnops.c =================================================================== RCS file: /cvs/src/sys/isofs/udf/udf_vnops.c,v retrieving revision 1.45 diff -u -p -r1.45 udf_vnops.c --- sys/isofs/udf/udf_vnops.c 20 Jun 2012 17:30:22 -0000 1.45 +++ sys/isofs/udf/udf_vnops.c 27 Mar 2013 19:54:57 -0000 @@ -401,9 +401,6 @@ udf_pathconf(struct vop_pathconf_args *a case _PC_NAME_MAX: *ap->a_retval = NAME_MAX; break; - case _PC_PATH_MAX: - *ap->a_retval = PATH_MAX; - break; case _PC_NO_TRUNC: *ap->a_retval = 1; break; Index: sys/kern/spec_vnops.c =================================================================== RCS file: /cvs/src/sys/kern/spec_vnops.c,v retrieving revision 1.69 diff -u -p -r1.69 spec_vnops.c --- sys/kern/spec_vnops.c 20 Jun 2012 17:30:22 -0000 1.69 +++ sys/kern/spec_vnops.c 27 Mar 2013 19:54:57 -0000 @@ -617,9 +617,6 @@ spec_pathconf(void *v) case _PC_MAX_INPUT: *ap->a_retval = MAX_INPUT; break; - case _PC_PIPE_BUF: - *ap->a_retval = PIPE_BUF; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; Index: sys/kern/vfs_vops.c =================================================================== RCS file: /cvs/src/sys/kern/vfs_vops.c,v retrieving revision 1.4 diff -u -p -r1.4 vfs_vops.c --- sys/kern/vfs_vops.c 2 Jul 2011 15:52:25 -0000 1.4 +++ sys/kern/vfs_vops.c 27 Mar 2013 19:54:57 -0000 @@ -45,6 +45,7 @@ #include <sys/param.h> #include <sys/mount.h> #include <sys/vnode.h> +#include <sys/unistd.h> #ifdef VFSLCKDEBUG #define ASSERT_VP_ISLOCKED(vp) do { \ @@ -562,6 +563,25 @@ int VOP_PATHCONF(struct vnode *vp, int name, register_t *retval) { struct vop_pathconf_args a; + + /* + * Handle names that are constant across filesystem + */ + switch (name) { + case _PC_PATH_MAX: + *retval = PATH_MAX; + return (0); + case _PC_PIPE_BUF: + *retval = PIPE_BUF; + return (0); + case _PC_ASYNC_IO: + case _PC_PRIO_IO: + case _PC_SYNC_IO: + *retval = 0; + return (0); + + } + a.a_vp = vp; a.a_name = name; a.a_retval = retval; Index: sys/miscfs/fifofs/fifo_vnops.c =================================================================== RCS file: /cvs/src/sys/miscfs/fifofs/fifo_vnops.c,v retrieving revision 1.37 diff -u -p -r1.37 fifo_vnops.c --- sys/miscfs/fifofs/fifo_vnops.c 20 Jun 2012 17:30:22 -0000 1.37 +++ sys/miscfs/fifofs/fifo_vnops.c 27 Mar 2013 19:54:57 -0000 @@ -414,9 +414,6 @@ fifo_pathconf(void *v) case _PC_LINK_MAX: *ap->a_retval = LINK_MAX; break; - case _PC_PIPE_BUF: - *ap->a_retval = PIPE_BUF; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; Index: sys/miscfs/procfs/procfs_vnops.c =================================================================== RCS file: /cvs/src/sys/miscfs/procfs/procfs_vnops.c,v retrieving revision 1.55 diff -u -p -r1.55 procfs_vnops.c --- sys/miscfs/procfs/procfs_vnops.c 20 Jun 2012 17:30:22 -0000 1.55 +++ sys/miscfs/procfs/procfs_vnops.c 27 Mar 2013 19:54:58 -0000 @@ -320,20 +320,8 @@ procfs_pathconf(void *v) case _PC_LINK_MAX: *ap->a_retval = LINK_MAX; break; - case _PC_MAX_CANON: - *ap->a_retval = MAX_CANON; - break; - case _PC_MAX_INPUT: - *ap->a_retval = MAX_INPUT; - break; - case _PC_PIPE_BUF: - *ap->a_retval = PIPE_BUF; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; - break; - case _PC_VDISABLE: - *ap->a_retval = _POSIX_VDISABLE; break; default: error = EINVAL; Index: sys/msdosfs/msdosfs_vnops.c =================================================================== RCS file: /cvs/src/sys/msdosfs/msdosfs_vnops.c,v retrieving revision 1.83 diff -u -p -r1.83 msdosfs_vnops.c --- sys/msdosfs/msdosfs_vnops.c 15 Jan 2013 06:05:47 -0000 1.83 +++ sys/msdosfs/msdosfs_vnops.c 27 Mar 2013 19:54:58 -0000 @@ -1882,9 +1882,6 @@ msdosfs_pathconf(void *v) case _PC_NAME_MAX: *ap->a_retval = pmp->pm_flags & MSDOSFSMNT_LONGNAME ? WIN_MAXLEN : 12; break; - case _PC_PATH_MAX: - *ap->a_retval = PATH_MAX; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; Index: sys/ntfs/ntfs_vnops.c =================================================================== RCS file: /cvs/src/sys/ntfs/ntfs_vnops.c,v retrieving revision 1.29 diff -u -p -r1.29 ntfs_vnops.c --- sys/ntfs/ntfs_vnops.c 14 Jan 2013 09:44:57 -0000 1.29 +++ sys/ntfs/ntfs_vnops.c 27 Mar 2013 19:54:58 -0000 @@ -734,9 +734,6 @@ ntfs_pathconf(void *v) case _PC_NAME_MAX: *ap->a_retval = NTFS_MAXFILENAME; break; - case _PC_PATH_MAX: - *ap->a_retval = PATH_MAX; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; Index: sys/ufs/ufs/ufs_vnops.c =================================================================== RCS file: /cvs/src/sys/ufs/ufs/ufs_vnops.c,v retrieving revision 1.104 diff -u -p -r1.104 ufs_vnops.c --- sys/ufs/ufs/ufs_vnops.c 20 Jun 2012 17:30:22 -0000 1.104 +++ sys/ufs/ufs/ufs_vnops.c 27 Mar 2013 19:54:58 -0000 @@ -1725,23 +1725,11 @@ ufs_pathconf(void *v) case _PC_NAME_MAX: *ap->a_retval = NAME_MAX; break; - case _PC_PATH_MAX: - *ap->a_retval = PATH_MAX; - break; - case _PC_PIPE_BUF: - *ap->a_retval = PIPE_BUF; - break; case _PC_CHOWN_RESTRICTED: *ap->a_retval = 1; break; case _PC_NO_TRUNC: *ap->a_retval = 1; - break; - case _PC_PRIO_IO: - *ap->a_retval = 0; - break; - case _PC_SYNC_IO: - *ap->a_retval = 0; break; case _PC_ALLOC_SIZE_MIN: *ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_bsize; Index: sys/sys/unistd.h =================================================================== RCS file: /cvs/src/sys/sys/unistd.h,v retrieving revision 1.26 diff -u -p -r1.26 unistd.h --- sys/sys/unistd.h 14 Mar 2013 21:38:22 -0000 1.26 +++ sys/sys/unistd.h 27 Mar 2013 19:54:58 -0000 @@ -38,6 +38,9 @@ #include <sys/cdefs.h> #define _POSIX_VDISABLE (0377) +#define _POSIX_ASYNC_IO (-1) +#define _POSIX_PRIO_IO (-1) +#define _POSIX_SYNC_IO (-1) /* Define the POSIX.1 version we target for compliance. */ #define _POSIX_VERSION 199009L