View | Details | Raw Unified | Return to bug 18012
Collapse All | Expand All

(-)kern/vfs_subr.c (+11 lines)
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);

Return to bug 18012