- We do not have to check the object's ref_count in VSHOULDFREE or
vtryrecycle(). All obj refs also ref the vnode. - Consistently use v_incr_usecount() to increment the usecount. This will be more important later. Sponsored by: Isilon Systems, Inc.
This commit is contained in:
parent
8cb809ea3f
commit
159b454819
@ -92,6 +92,7 @@ static void vbusy(struct vnode *vp);
|
||||
static void vdropl(struct vnode *vp);
|
||||
static void vholdl(struct vnode *);
|
||||
static void vinactive(struct vnode *, struct thread *);
|
||||
static void v_incr_usecount(struct vnode *, int);
|
||||
|
||||
/*
|
||||
* Enable Giant pushdown based on whether or not the vm is mpsafe in this
|
||||
@ -683,8 +684,7 @@ vtryrecycle(struct vnode *vp)
|
||||
object = vp->v_object;
|
||||
if (object != NULL) {
|
||||
VM_OBJECT_LOCK(object);
|
||||
if (object->resident_page_count ||
|
||||
object->ref_count) {
|
||||
if (object->resident_page_count) {
|
||||
VM_OBJECT_UNLOCK(object);
|
||||
error = EBUSY;
|
||||
goto done;
|
||||
@ -893,7 +893,7 @@ getnewvnode(tag, mp, vops, vpp)
|
||||
vp->v_tag = tag;
|
||||
vp->v_op = vops;
|
||||
*vpp = vp;
|
||||
vp->v_usecount = 1;
|
||||
v_incr_usecount(vp, 1);
|
||||
vp->v_data = 0;
|
||||
if (pollinfo != NULL) {
|
||||
knlist_destroy(&pollinfo->vpi_selinfo.si_note);
|
||||
|
@ -395,7 +395,7 @@ extern void (*lease_updatetime)(int deltat);
|
||||
(!((vp)->v_iflag & VI_FREE) && \
|
||||
!(vp)->v_holdcnt && !(vp)->v_usecount && \
|
||||
(!(vp)->v_object || \
|
||||
!((vp)->v_object->ref_count || (vp)->v_object->resident_page_count)))
|
||||
!(vp)->v_object->resident_page_count))
|
||||
|
||||
/* Requires interlock. */
|
||||
#define VSHOULDBUSY(vp) \
|
||||
|
Loading…
x
Reference in New Issue
Block a user