Index: sys/ufs/ufs/ufs_vnops.c =================================================================== --- sys/ufs/ufs/ufs_vnops.c (revision 180363) +++ sys/ufs/ufs/ufs_vnops.c (working copy) @@ -113,6 +113,7 @@ static vop_symlink_t ufs_symlink; static vop_whiteout_t ufs_whiteout; static vop_close_t ufsfifo_close; static vop_kqfilter_t ufsfifo_kqfilter; +static vop_pathconf_t ufsfifo_pathconf; /* * A virgin directory (no blushing please). @@ -2094,7 +2095,9 @@ ufs_pathconf(ap) break; case _PC_ACL_EXTENDED: #ifdef UFS_ACL - if (ap->a_vp->v_mount->mnt_flag & MNT_ACLS) + /* ACLs are not supported for device files */ + if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) && + ap->a_vp->v_type != VCHR && ap->a_vp->v_type != VBLK) *ap->a_retval = 1; else *ap->a_retval = 0; @@ -2104,7 +2107,9 @@ ufs_pathconf(ap) break; case _PC_ACL_PATH_MAX: #ifdef UFS_ACL - if (ap->a_vp->v_mount->mnt_flag & MNT_ACLS) + /* ACLs are not supported for device files */ + if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) && + ap->a_vp->v_type != VCHR && ap->a_vp->v_type != VBLK) *ap->a_retval = ACL_MAX_ENTRIES; else *ap->a_retval = 3; @@ -2163,6 +2168,30 @@ ufs_pathconf(ap) } /* + * Return POSIX pathconf information applicable to fifos. + */ +static int +ufsfifo_pathconf(ap) + struct vop_pathconf_args /* { + struct vnode *a_vp; + int a_name; + int *a_retval; + } */ *ap; +{ + /* + * XXX: Check which variables fifos should support. + */ + switch (ap->a_name) { + case _PC_ACL_EXTENDED: + case _PC_ACL_PATH_MAX: + return (ufs_pathconf(ap)); + default: + return (fifo_specops.vop_pathconf(ap)); + } + /* NOTREACHED */ +} + +/* * Initialize the vnode associated with a new inode, handle aliased * vnodes. */ @@ -2476,6 +2505,7 @@ struct vop_vector ufs_fifoops = { .vop_getattr = ufs_getattr, .vop_inactive = ufs_inactive, .vop_kqfilter = ufsfifo_kqfilter, + .vop_pathconf = ufsfifo_pathconf, .vop_print = ufs_print, .vop_read = VOP_PANIC, .vop_reclaim = ufs_reclaim, Index: sys/ufs/ffs/ffs_vnops.c =================================================================== --- sys/ufs/ffs/ffs_vnops.c (revision 180363) +++ sys/ufs/ffs/ffs_vnops.c (working copy) @@ -1337,7 +1337,7 @@ struct vop_openextattr_args { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); return (ffs_open_ea(ap->a_vp, ap->a_cred, ap->a_td)); @@ -1365,7 +1365,7 @@ struct vop_closeextattr_args { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); if (ap->a_commit && (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)) @@ -1399,7 +1399,7 @@ vop_deleteextattr { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); if (strlen(ap->a_name) == 0) @@ -1489,7 +1489,7 @@ vop_getextattr { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); error = extattr_check_cred(ap->a_vp, ap->a_attrnamespace, @@ -1549,7 +1549,7 @@ vop_listextattr { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); error = extattr_check_cred(ap->a_vp, ap->a_attrnamespace, @@ -1619,7 +1619,7 @@ vop_setextattr { ip = VTOI(ap->a_vp); fs = ip->i_fs; - if (ap->a_vp->v_type == VCHR) + if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK) return (EOPNOTSUPP); if (strlen(ap->a_name) == 0)