diff options
author | daichi <daichi@FreeBSD.org> | 2007-10-14 13:42:05 +0000 |
---|---|---|
committer | daichi <daichi@FreeBSD.org> | 2007-10-14 13:42:05 +0000 |
commit | a763e0d0a249654430445dce1f260e1ae39bf8b1 (patch) | |
tree | 8896e89179340ea243975be2a8a285fe3e0bdafb /sys/fs/unionfs | |
parent | dc348d6e70a80e44c77b3ceee969b94c04b37cf3 (diff) | |
download | FreeBSD-src-a763e0d0a249654430445dce1f260e1ae39bf8b1.zip FreeBSD-src-a763e0d0a249654430445dce1f260e1ae39bf8b1.tar.gz |
Changed it frees unneeded memory ASAP.
Submitted by: Masanori Ozawa <ozawa@ongs.co.jp> (unionfs developer)
Reviewed by: jeff, kensmith
Approved by: re (kensmith)
MFC after: 1 week
Diffstat (limited to 'sys/fs/unionfs')
-rw-r--r-- | sys/fs/unionfs/union_vnops.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/fs/unionfs/union_vnops.c b/sys/fs/unionfs/union_vnops.c index fbce59d..e5c54a7 100644 --- a/sys/fs/unionfs/union_vnops.c +++ b/sys/fs/unionfs/union_vnops.c @@ -873,6 +873,7 @@ unionfs_ioctl(struct vop_ioctl_args *ap) unp = VTOUNIONFS(ap->a_vp); unionfs_get_node_status(unp, ap->a_td, &unsp); ovp = (unsp->uns_upper_opencnt ? unp->un_uppervp : unp->un_lowervp); + unionfs_tryrem_node_status(unp, ap->a_td, unsp); VOP_UNLOCK(ap->a_vp, 0, ap->a_td); if (ovp == NULLVP) @@ -897,6 +898,7 @@ unionfs_poll(struct vop_poll_args *ap) unp = VTOUNIONFS(ap->a_vp); unionfs_get_node_status(unp, ap->a_td, &unsp); ovp = (unsp->uns_upper_opencnt ? unp->un_uppervp : unp->un_lowervp); + unionfs_tryrem_node_status(unp, ap->a_td, unsp); VOP_UNLOCK(ap->a_vp, 0, ap->a_td); if (ovp == NULLVP) @@ -915,6 +917,7 @@ unionfs_fsync(struct vop_fsync_args *ap) unp = VTOUNIONFS(ap->a_vp); unionfs_get_node_status(unp, ap->a_td, &unsp); ovp = (unsp->uns_upper_opencnt ? unp->un_uppervp : unp->un_lowervp); + unionfs_tryrem_node_status(unp, ap->a_td, unsp); if (ovp == NULLVP) return (EBADF); @@ -1858,7 +1861,8 @@ unionfs_advlock(struct vop_advlock_args *ap) unsp->uns_upper_opencnt++; VOP_CLOSE(unp->un_lowervp, unsp->uns_lower_openmode, td->td_ucred, td); unsp->uns_lower_opencnt--; - } + } else + unionfs_tryrem_node_status(unp, td, unsp); } VOP_UNLOCK(vp, 0, td); |