Author: mjg
Date: Mon Aug 10 10:33:40 2020
New Revision: 364064
URL: https://svnweb.freebsd.org/changeset/base/364064

Log:
  vfs: disallow NOCACHE with LOOKUP
  
  This means there is no expectation lookup will purge the terminal entry,
  which simplifies lockless lookup.
  
  Tested by:    pho
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/kern/vfs_lookup.c
  head/sys/kern/vfs_subr.c

Modified: head/sys/kern/vfs_lookup.c
==============================================================================
--- head/sys/kern/vfs_lookup.c  Mon Aug 10 10:31:17 2020        (r364063)
+++ head/sys/kern/vfs_lookup.c  Mon Aug 10 10:33:40 2020        (r364064)
@@ -484,6 +484,9 @@ namei(struct nameidata *ndp)
            ("namei: nameiop contaminated with flags"));
        KASSERT((cnp->cn_flags & OPMASK) == 0,
            ("namei: flags contaminated with nameiops"));
+       if (cnp->cn_flags & NOCACHE)
+               KASSERT(cnp->cn_nameiop != LOOKUP,
+                   ("%s: NOCACHE passed with LOOKUP", __func__));
        MPASS(ndp->ni_startdir == NULL || ndp->ni_startdir->v_type == VDIR ||
            ndp->ni_startdir->v_type == VBAD);
 

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c    Mon Aug 10 10:31:17 2020        (r364063)
+++ head/sys/kern/vfs_subr.c    Mon Aug 10 10:33:40 2020        (r364064)
@@ -408,7 +408,7 @@ sysctl_try_reclaim_vnode(SYSCTL_HANDLER_ARGS)
 
        buf[req->newlen] = '\0';
 
-       ndflags = LOCKLEAF | NOFOLLOW | AUDITVNODE1 | NOCACHE | SAVENAME;
+       ndflags = LOCKLEAF | NOFOLLOW | AUDITVNODE1 | SAVENAME;
        NDINIT(&nd, LOOKUP, ndflags, UIO_SYSSPACE, buf, curthread);
        if ((error = namei(&nd)) != 0)
                goto out;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to