NFSv4 client tracks opens, and the track records are only dropped when
the vnode is inactivated. This contradicts with the nullfs caching which keeps upper vnode around, as consequence keeping the use reference to lower vnode. Add a filesystem flag to request nullfs to not cache when mounted over that filesystem, and set the flag for nfs v4 mounts. Reported by: asomers Reviewed by: rmacklem Tested by: asomers, rmacklem Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
590cb3c761
commit
abc1515601
@ -1320,6 +1320,8 @@ nfs_mount(struct mount *mp)
|
||||
MNT_ILOCK(mp);
|
||||
mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_NO_IOPF |
|
||||
MNTK_USES_BCACHE;
|
||||
if ((VFSTONFS(mp)->nm_flag & NFSMNT_NFSV4) != 0)
|
||||
mp->mnt_kern_flag |= MNTK_NULL_NOCACHE;
|
||||
MNT_IUNLOCK(mp);
|
||||
}
|
||||
return (error);
|
||||
|
@ -188,7 +188,8 @@ nullfs_mount(struct mount *mp)
|
||||
}
|
||||
|
||||
xmp->nullm_flags |= NULLM_CACHE;
|
||||
if (vfs_getopt(mp->mnt_optnew, "nocache", NULL, NULL) == 0)
|
||||
if (vfs_getopt(mp->mnt_optnew, "nocache", NULL, NULL) == 0 ||
|
||||
(xmp->nullm_vfs->mnt_kern_flag & MNTK_NULL_NOCACHE) != 0)
|
||||
xmp->nullm_flags &= ~NULLM_CACHE;
|
||||
|
||||
MNT_ILOCK(mp);
|
||||
|
@ -370,7 +370,8 @@ void __mnt_vnode_markerfree_active(struct vnode **mvp, struct mount *);
|
||||
#define MNTK_SUSPEND 0x08000000 /* request write suspension */
|
||||
#define MNTK_SUSPEND2 0x04000000 /* block secondary writes */
|
||||
#define MNTK_SUSPENDED 0x10000000 /* write operations are suspended */
|
||||
#define MNTK_UNUSED1 0x20000000
|
||||
#define MNTK_NULL_NOCACHE 0x20000000 /* auto disable cache for nullfs
|
||||
mounts over this fs */
|
||||
#define MNTK_LOOKUP_SHARED 0x40000000 /* FS supports shared lock lookups */
|
||||
#define MNTK_NOKNOTE 0x80000000 /* Don't send KNOTEs from VOP hooks */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user