Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Aug 2004 00:33:14 -0700
From:      Alfred Perlstein <alfred@freebsd.org>
To:        Dag-Erling Smorgrav <des@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/fs/pseudofs pseudofs_vncache.c
Message-ID:  <20040816073314.GA57908@elvis.mu.org>
In-Reply-To: <200408152158.i7FLw2mW016740@repoman.freebsd.org>
References:  <200408152158.i7FLw2mW016740@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
* Dag-Erling Smorgrav <des@FreeBSD.org> [040815 14:58] wrote:
> des         2004-08-15 21:58:02 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/fs/pseudofs      pseudofs_vncache.c 
>   Log:
>   Release the vnode cache mutex when calling vgone(), since vgone() may
>   sleep.  This makes pfs_exit() even less efficient than before, but on
>   the bright side, the vnode cache mutex no longer needs to be recursive.

I would suggest moving them all to a seperate list, then walking that
list calling vgone on each node.

here's some... psuedo-code!

--- pseudofs_vncache.c  15 Aug 2004 21:58:02 -0000      1.26
+++ pseudofs_vncache.c  16 Aug 2004 07:34:51 -0000
@@ -219,9 +219,10 @@
 static void
 pfs_exit(void *arg, struct proc *p)
 {
        struct pfs_vdata *pvd, *pvfree;
        struct vnode *vnp;
 
        pvfree = NULL;
        mtx_lock(&Giant);
        /*
         * This is extremely inefficient due to the fact that vgone() not
@@ -240,16 +241,14 @@
        pvd = pfs_vncache;
        while (pvd != NULL) {
                if (pvd->pvd_pid == p->p_pid) {
                        /* REMOVE FROM pfs_vncache */
                        /* ADD TO pvfree */
                } else {
                        pvd = pvd->pvd_next;
                }
        }
        mtx_unlock(&pfs_vncache_mutex);
        /* while ! end of list pvfree vgone pvfree->v_data */
        mtx_unlock(&Giant);
 }
 


-- 
- Alfred Perlstein
- Research Engineering Development Inc.
- email: bright@mu.org cell: 408-480-4684



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040816073314.GA57908>