|
Lines 467-472
Link Here
|
| 467 |
|
467 |
|
| 468 |
for (vp = TAILQ_FIRST(&vnode_tobefree_list); vp; vp = nvp) { |
468 |
for (vp = TAILQ_FIRST(&vnode_tobefree_list); vp; vp = nvp) { |
| 469 |
nvp = TAILQ_NEXT(vp, v_freelist); |
469 |
nvp = TAILQ_NEXT(vp, v_freelist); |
|
|
470 |
if (!simple_lock_try(&vp->v_interlock)) |
| 471 |
continue; |
| 470 |
TAILQ_REMOVE(&vnode_tobefree_list, vp, v_freelist); |
472 |
TAILQ_REMOVE(&vnode_tobefree_list, vp, v_freelist); |
| 471 |
if (vp->v_flag & VAGE) { |
473 |
if (vp->v_flag & VAGE) { |
| 472 |
TAILQ_INSERT_HEAD(&vnode_free_list, vp, v_freelist); |
474 |
TAILQ_INSERT_HEAD(&vnode_free_list, vp, v_freelist); |
|
Lines 478-483
Link Here
|
| 478 |
if (vp->v_usecount) |
480 |
if (vp->v_usecount) |
| 479 |
panic("tobe free vnode isn't"); |
481 |
panic("tobe free vnode isn't"); |
| 480 |
freevnodes++; |
482 |
freevnodes++; |
|
|
483 |
simple_unlock(&tvp->v_interlock); |
| 481 |
} |
484 |
} |
| 482 |
|
485 |
|
| 483 |
if (wantfreevnodes && freevnodes < wantfreevnodes) { |
486 |
if (wantfreevnodes && freevnodes < wantfreevnodes) { |
|
Lines 507-512
Link Here
|
| 507 |
/* Don't recycle if active in the namecache */ |
510 |
/* Don't recycle if active in the namecache */ |
| 508 |
simple_unlock(&vp->v_interlock); |
511 |
simple_unlock(&vp->v_interlock); |
| 509 |
continue; |
512 |
continue; |
|
|
513 |
} else if (VOP_ISLOCKED(vp)) |
| 514 |
TAILQ_REMOVE(&vnode_free_list, vp, v_freelist); |
| 515 |
TAILQ_INSERT_TAIL(&vnode_tmp_list, vp, v_freelist); |
| 516 |
continue; |
| 510 |
} else { |
517 |
} else { |
| 511 |
break; |
518 |
break; |
| 512 |
} |
519 |
} |
|
Lines 2613-2618
Link Here
|
| 2613 |
int s; |
2620 |
int s; |
| 2614 |
|
2621 |
|
| 2615 |
s = splbio(); |
2622 |
s = splbio(); |
|
|
2623 |
if (vp->v_flag & VDOOMED) { |
| 2624 |
vprint("vbusy", vp); |
| 2625 |
panic("vbusy on VDOOMED vnode"); |
| 2626 |
} |
| 2616 |
simple_lock(&vnode_free_list_slock); |
2627 |
simple_lock(&vnode_free_list_slock); |
| 2617 |
if (vp->v_flag & VTBFREE) { |
2628 |
if (vp->v_flag & VTBFREE) { |
| 2618 |
TAILQ_REMOVE(&vnode_tobefree_list, vp, v_freelist); |
2629 |
TAILQ_REMOVE(&vnode_tobefree_list, vp, v_freelist); |