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

Reply via email to