diff options
Diffstat (limited to 'usr/src/uts/common')
-rw-r--r-- | usr/src/uts/common/fs/ufs/ufs_acl.c | 1 | ||||
-rw-r--r-- | usr/src/uts/common/fs/ufs/ufs_inode.c | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/ufs/ufs_acl.c b/usr/src/uts/common/fs/ufs/ufs_acl.c index cbcc38129a..ce1d2f1677 100644 --- a/usr/src/uts/common/fs/ufs/ufs_acl.c +++ b/usr/src/uts/common/fs/ufs/ufs_acl.c @@ -231,6 +231,7 @@ loop: sip->i_seq++; sip->i_mode = (o_mode_t)IFSHAD; ITOV(sip)->v_type = VREG; + ufs_reset_vnode(ITOV(sip)); sip->i_nlink = 1; sip->i_uid = crgetuid(cr); sip->i_suid = (ulong_t)sip->i_uid > (ulong_t)USHRT_MAX ? diff --git a/usr/src/uts/common/fs/ufs/ufs_inode.c b/usr/src/uts/common/fs/ufs/ufs_inode.c index 76db353cca..09f0d70648 100644 --- a/usr/src/uts/common/fs/ufs/ufs_inode.c +++ b/usr/src/uts/common/fs/ufs/ufs_inode.c @@ -622,9 +622,15 @@ again: } /* - * finish initializing the vnode + * Finish initializing the vnode, special handling for shadow inodes + * because IFTOVT() will produce a v_type of VNON which is not what we + * want, set v_type to VREG explicitly in that case. */ - vp->v_type = IFTOVT((mode_t)ip->i_mode); + if (ftype == IFSHAD) { + vp->v_type = VREG; + } else { + vp->v_type = IFTOVT((mode_t)ip->i_mode); + } ufs_reset_vnode(vp); |