Author: mjg
Date: Tue Jan  7 04:27:40 2020
New Revision: 356431
URL: https://svnweb.freebsd.org/changeset/base/356431

Log:
  vfs: add a helper for allocating marker vnodes

Modified:
  head/sys/kern/vfs_subr.c

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c    Tue Jan  7 00:54:45 2020        (r356430)
+++ head/sys/kern/vfs_subr.c    Tue Jan  7 04:27:40 2020        (r356431)
@@ -459,6 +459,28 @@ PCTRIE_DEFINE(BUF, buf, b_lblkno, buf_trie_alloc, buf_
 #define        MAXVNODES_MAX   (512 * 1024 * 1024 / 64)        /* 8M */
 #endif
 
+static MALLOC_DEFINE(M_VNODE_MARKER, "vnodemarker", "vnode marker");
+
+static struct vnode *
+vn_alloc_marker(struct mount *mp)
+{
+       struct vnode *vp;
+
+       vp = malloc(sizeof(struct vnode), M_VNODE_MARKER, M_WAITOK | M_ZERO);
+       vp->v_type = VMARKER;
+       vp->v_mount = mp;
+
+       return (vp);
+}
+
+static void
+vn_free_marker(struct vnode *vp)
+{
+
+       MPASS(vp->v_type == VMARKER);
+       free(vp, M_VNODE_MARKER);
+}
+
 /*
  * Initialize a vnode as it first enters the zone.
  */
@@ -5785,7 +5807,6 @@ vfs_cache_root_set(struct mount *mp, struct vnode *vp)
  * This interface replaces MNT_VNODE_FOREACH.
  */
 
-MALLOC_DEFINE(M_VNODE_MARKER, "vnodemarker", "vnode marker");
 
 struct vnode *
 __mnt_vnode_next_all(struct vnode **mvp, struct mount *mp)
@@ -5825,11 +5846,9 @@ __mnt_vnode_first_all(struct vnode **mvp, struct mount
 {
        struct vnode *vp;
 
-       *mvp = malloc(sizeof(struct vnode), M_VNODE_MARKER, M_WAITOK | M_ZERO);
+       *mvp = vn_alloc_marker(mp);
        MNT_ILOCK(mp);
        MNT_REF(mp);
-       (*mvp)->v_mount = mp;
-       (*mvp)->v_type = VMARKER;
 
        TAILQ_FOREACH(vp, &mp->mnt_nvnodelist, v_nmntvnodes) {
                /* Allow a racy peek at VIRF_DOOMED to save a lock acquisition. 
*/
@@ -5845,7 +5864,7 @@ __mnt_vnode_first_all(struct vnode **mvp, struct mount
        if (vp == NULL) {
                MNT_REL(mp);
                MNT_IUNLOCK(mp);
-               free(*mvp, M_VNODE_MARKER);
+               vn_free_marker(*mvp);
                *mvp = NULL;
                return (NULL);
        }
@@ -5869,7 +5888,7 @@ __mnt_vnode_markerfree_all(struct vnode **mvp, struct 
        TAILQ_REMOVE(&mp->mnt_nvnodelist, *mvp, v_nmntvnodes);
        MNT_REL(mp);
        MNT_IUNLOCK(mp);
-       free(*mvp, M_VNODE_MARKER);
+       vn_free_marker(*mvp);
        *mvp = NULL;
 }
 
@@ -5886,7 +5905,7 @@ mnt_vnode_markerfree_active(struct vnode **mvp, struct
        MNT_ILOCK(mp);
        MNT_REL(mp);
        MNT_IUNLOCK(mp);
-       free(*mvp, M_VNODE_MARKER);
+       vn_free_marker(*mvp);
        *mvp = NULL;
 }
 
@@ -6029,12 +6048,10 @@ __mnt_vnode_first_active(struct vnode **mvp, struct mo
 {
        struct vnode *vp;
 
-       *mvp = malloc(sizeof(struct vnode), M_VNODE_MARKER, M_WAITOK | M_ZERO);
+       *mvp = vn_alloc_marker(mp);
        MNT_ILOCK(mp);
        MNT_REF(mp);
        MNT_IUNLOCK(mp);
-       (*mvp)->v_type = VMARKER;
-       (*mvp)->v_mount = mp;
 
        mtx_lock(&mp->mnt_listmtx);
        vp = TAILQ_FIRST(&mp->mnt_activevnodelist);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to