svn commit: r326993 - in head/sys: cddl/contrib/opensolaris/uts/common/fs/zfs fs/devfs fs/ext2fs fs/fuse fs/msdosfs fs/nandfs fs/smbfs fs/tmpfs kern ufs/ufs

John Baldwin jhb at FreeBSD.org
Tue Dec 19 19:51:38 UTC 2017


Author: jhb
Date: Tue Dec 19 19:51:36 2017
New Revision: 326993
URL: https://svnweb.freebsd.org/changeset/base/326993

Log:
  Move NAME_MAX, LINK_MAX, and CHOWN_RESTRICTED out of vop_stdpathconf().
  
  Having all filesystems fall through to default values isn't always correct
  and these values can vary for different filesystem implementations.  Most
  of these changes just use the existing default values with a few exceptions:
  - Don't report CHOWN_RESTRICTED for ZFS since it doesn't do the exact
    permissions check this claims for chown().
  - Use NANDFS_NAME_LEN for NAME_MAX for nandfs.
  - Don't report a LINK_MAX of 0 on smbfs.  Now fail with EINVAL to
    indicate hard links aren't supported.
  
  Requested by:	bde (though perhaps not this exact implementation)
  Reviewed by:	kib (earlier version)
  MFC after:	1 month
  Sponsored by:	Chelsio Communications

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  head/sys/fs/devfs/devfs_vnops.c
  head/sys/fs/ext2fs/ext2_vnops.c
  head/sys/fs/fuse/fuse_vnops.c
  head/sys/fs/msdosfs/msdosfs_vnops.c
  head/sys/fs/nandfs/nandfs_vnops.c
  head/sys/fs/smbfs/smbfs_vnops.c
  head/sys/fs/tmpfs/tmpfs_vnops.c
  head/sys/kern/vfs_default.c
  head/sys/ufs/ufs/ufs_vnops.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -5403,11 +5403,20 @@ zfs_freebsd_pathconf(ap)
 	int error;
 
 	error = zfs_pathconf(ap->a_vp, ap->a_name, &val, curthread->td_ucred, NULL);
-	if (error == 0)
+	if (error == 0) {
 		*ap->a_retval = val;
-	else if (error == EOPNOTSUPP)
-		error = vop_stdpathconf(ap);
-	return (error);
+		return (error);
+	}
+	if (error != EOPNOTSUPP)
+		return (error);
+
+	switch (ap->a_name) {
+	case _PC_NAME_MAX:
+		*ap->a_retval = NAME_MAX;
+		return (0);
+	default:
+		return (vop_stdpathconf(ap));
+	}
 }
 
 static int

Modified: head/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- head/sys/fs/devfs/devfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/devfs/devfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -1181,6 +1181,12 @@ devfs_pathconf(struct vop_pathconf_args *ap)
 {
 
 	switch (ap->a_name) {
+	case _PC_NAME_MAX:
+		*ap->a_retval = NAME_MAX;
+		return (0);
+	case _PC_LINK_MAX:
+		*ap->a_retval = LINK_MAX;
+		return (0);
 	case _PC_MAX_CANON:
 		if (ap->a_vp->v_vflag & VV_ISTTY) {
 			*ap->a_retval = MAX_CANON;
@@ -1209,6 +1215,9 @@ devfs_pathconf(struct vop_pathconf_args *ap)
 #else
 		*ap->a_retval = 0;
 #endif
+		return (0);
+	case _PC_CHOWN_RESTRICTED:
+		*ap->a_retval = 1;
 		return (0);
 	default:
 		return (vop_stdpathconf(ap));

Modified: head/sys/fs/ext2fs/ext2_vnops.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/ext2fs/ext2_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -1633,6 +1633,12 @@ ext2_pathconf(struct vop_pathconf_args *ap)
 		else
 			*ap->a_retval = ext2_max_nlink(VTOI(ap->a_vp));
 		break;
+	case _PC_NAME_MAX:
+		*ap->a_retval = NAME_MAX;
+		break;
+	case _PC_CHOWN_RESTRICTED:
+		*ap->a_retval = 1;
+		break;
 	case _PC_NO_TRUNC:
 		*ap->a_retval = 1;
 		break;

Modified: head/sys/fs/fuse/fuse_vnops.c
==============================================================================
--- head/sys/fs/fuse/fuse_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/fuse/fuse_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -1184,6 +1184,12 @@ fuse_vnop_pathconf(struct vop_pathconf_args *ap)
 	case _PC_FILESIZEBITS:
 		*ap->a_retval = 64;
 		return (0);
+	case _PC_NAME_MAX:
+		*ap->a_retval = NAME_MAX;
+		return (0);
+	case _PC_LINK_MAX:
+		*ap->a_retval = LINK_MAX;
+		return (0);
 	case _PC_SYMLINK_MAX:
 		*ap->a_retval = MAXPATHLEN;
 		return (0);

Modified: head/sys/fs/msdosfs/msdosfs_vnops.c
==============================================================================
--- head/sys/fs/msdosfs/msdosfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/msdosfs/msdosfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -1885,6 +1885,9 @@ msdosfs_pathconf(struct vop_pathconf_args *ap)
 	case _PC_NAME_MAX:
 		*ap->a_retval = pmp->pm_flags & MSDOSFSMNT_LONGNAME ? WIN_MAXLEN : 12;
 		return (0);
+	case _PC_CHOWN_RESTRICTED:
+		*ap->a_retval = 1;
+		return (0);
 	case _PC_NO_TRUNC:
 		*ap->a_retval = 0;
 		return (0);

Modified: head/sys/fs/nandfs/nandfs_vnops.c
==============================================================================
--- head/sys/fs/nandfs/nandfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/nandfs/nandfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -2238,6 +2238,15 @@ nandfs_pathconf(struct vop_pathconf_args *ap)
 
 	error = 0;
 	switch (ap->a_name) {
+	case _PC_LINK_MAX:
+		*ap->a_retval = LINK_MAX;
+		break;
+	case _PC_NAME_MAX:
+		*ap->a_retval = NANDFS_NAME_LEN;
+		break;
+	case _PC_CHOWN_RESTRICTED:
+		*ap->a_retval = 1;
+		break;
 	case _PC_NO_TRUNC:
 		*ap->a_retval = 1;
 		break;

Modified: head/sys/fs/smbfs/smbfs_vnops.c
==============================================================================
--- head/sys/fs/smbfs/smbfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/smbfs/smbfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -899,8 +899,6 @@ smbfs_pathconf (ap)
 	int error = 0;
 	
 	switch (ap->a_name) {
-	    case _PC_LINK_MAX:
-		*retval = 0;
 	    case _PC_FILESIZEBITS:
 		if (vcp->vc_sopt.sv_caps & (SMB_CAP_LARGE_READX |
 		    SMB_CAP_LARGE_WRITEX))

Modified: head/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/fs/tmpfs/tmpfs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -1348,6 +1348,18 @@ tmpfs_pathconf(struct vop_pathconf_args *v)
 	error = 0;
 
 	switch (name) {
+	case _PC_LINK_MAX:
+		*retval = LINK_MAX;
+		break;
+
+	case _PC_NAME_MAX:
+		*retval = NAME_MAX;
+		break;
+
+	case _PC_CHOWN_RESTRICTED:
+		*retval = 1;
+		break;
+
 	case _PC_NO_TRUNC:
 		*retval = 1;
 		break;

Modified: head/sys/kern/vfs_default.c
==============================================================================
--- head/sys/kern/vfs_default.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/kern/vfs_default.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -479,20 +479,11 @@ vop_stdpathconf(ap)
 		case _PC_ASYNC_IO:
 			*ap->a_retval = _POSIX_ASYNCHRONOUS_IO;
 			return (0);
-		case _PC_NAME_MAX:
-			*ap->a_retval = NAME_MAX;
-			return (0);
 		case _PC_PATH_MAX:
 			*ap->a_retval = PATH_MAX;
 			return (0);
-		case _PC_LINK_MAX:
-			*ap->a_retval = LINK_MAX;
-			return (0);
 		case _PC_PIPE_BUF:
 			*ap->a_retval = PIPE_BUF;
-			return (0);
-		case _PC_CHOWN_RESTRICTED:
-			*ap->a_retval = 1;
 			return (0);
 		default:
 			return (EINVAL);

Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c	Tue Dec 19 19:44:06 2017	(r326992)
+++ head/sys/ufs/ufs/ufs_vnops.c	Tue Dec 19 19:51:36 2017	(r326993)
@@ -2450,6 +2450,9 @@ ufs_pathconf(ap)
 	case _PC_NAME_MAX:
 		*ap->a_retval = UFS_MAXNAMLEN;
 		break;
+	case _PC_CHOWN_RESTRICTED:
+		*ap->a_retval = 1;
+		break;
 	case _PC_NO_TRUNC:
 		*ap->a_retval = 1;
 		break;


More information about the svn-src-all mailing list