diff options
author | kib <kib@FreeBSD.org> | 2009-03-12 12:43:56 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2009-03-12 12:43:56 +0000 |
commit | 9e27cf574d2cb8f717bf50b309f68de1fac30375 (patch) | |
tree | cf17c989527b9b03232ce80b2268236e8559acb0 /sys/ufs/ffs/ffs_vfsops.c | |
parent | 33b0309eb2b6e212d5a03522483eb96411ab631a (diff) | |
download | FreeBSD-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.c | 1 |
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; |