summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs/ffs_vfsops.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-03-12 12:43:56 +0000
committerkib <kib@FreeBSD.org>2009-03-12 12:43:56 +0000
commit9e27cf574d2cb8f717bf50b309f68de1fac30375 (patch)
treecf17c989527b9b03232ce80b2268236e8559acb0 /sys/ufs/ffs/ffs_vfsops.c
parent33b0309eb2b6e212d5a03522483eb96411ab631a (diff)
downloadFreeBSD-src-9e27cf574d2cb8f717bf50b309f68de1fac30375.zip
FreeBSD-src-9e27cf574d2cb8f717bf50b309f68de1fac30375.tar.gz
The non-modifying EA VOPs are executed with only shared vnode lock taken.
Provide a custom lock around initializing and tearing down EA area, to prevent both memory leaks and double-free of it. Count the number of EA area accessors. Lock protocol requires either holding exclusive vnode lock to modify i_ea_area, or shared vnode lock and owning IN_EA_LOCKED flag in i_flag. Noted by: YAMAMOTO, Taku <taku tackymt homeip net> Tested by: pho (previous version) MFC after: 2 weeks
Diffstat (limited to 'sys/ufs/ffs/ffs_vfsops.c')
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 73535fc..6d41d6f 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -1451,6 +1451,7 @@ ffs_vgetf(mp, ino, flags, vpp, ffs_flags)
ip->i_fs = fs;
ip->i_dev = dev;
ip->i_number = ino;
+ ip->i_ea_refs = 0;
#ifdef QUOTA
{
int i;
OpenPOWER on IntegriCloud