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
This commit is contained in:
parent
2dd51e16ca
commit
599afe53a8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=326993
@ -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
|
||||
|
@ -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;
|
||||
@ -1210,6 +1216,9 @@ devfs_pathconf(struct vop_pathconf_args *ap)
|
||||
*ap->a_retval = 0;
|
||||
#endif
|
||||
return (0);
|
||||
case _PC_CHOWN_RESTRICTED:
|
||||
*ap->a_retval = 1;
|
||||
return (0);
|
||||
default:
|
||||
return (vop_stdpathconf(ap));
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -479,21 +479,12 @@ 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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user