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