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; _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"