Module Name: src Committed By: ad Date: Sun Jan 19 21:23:36 UTC 2020
Modified Files: src/sys/kern [ad-namecache]: vfs_syscalls.c vfs_vnops.c Log Message: Use LOCKLEAF in the few cases it's useful for ffs/tmpfs/nullfs. Others need to be checked. To generate a diff of this commit: cvs rdiff -u -r1.539.2.1 -r1.539.2.2 src/sys/kern/vfs_syscalls.c cvs rdiff -u -r1.204.2.1 -r1.204.2.2 src/sys/kern/vfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/vfs_syscalls.c diff -u src/sys/kern/vfs_syscalls.c:1.539.2.1 src/sys/kern/vfs_syscalls.c:1.539.2.2 --- src/sys/kern/vfs_syscalls.c:1.539.2.1 Fri Jan 17 21:47:35 2020 +++ src/sys/kern/vfs_syscalls.c Sun Jan 19 21:23:36 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls.c,v 1.539.2.1 2020/01/17 21:47:35 ad Exp $ */ +/* $NetBSD: vfs_syscalls.c,v 1.539.2.2 2020/01/19 21:23:36 ad Exp $ */ /*- * Copyright (c) 2008, 2009, 2019 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.539.2.1 2020/01/17 21:47:35 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.539.2.2 2020/01/19 21:23:36 ad Exp $"); #ifdef _KERNEL_OPT #include "opt_fileassoc.h" @@ -1532,7 +1532,7 @@ chdir_lookup(const char *path, int where if (error) { return error; } - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | TRYEMULROOT, pb); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | LOCKSHARED | TRYEMULROOT, pb); if ((error = namei(&nd)) != 0) { pathbuf_destroy(pb); return error; @@ -2996,7 +2996,7 @@ do_sys_accessat(struct lwp *l, int fdat, return EINVAL; } - nd_flag = FOLLOW | LOCKLEAF | TRYEMULROOT; + nd_flag = FOLLOW | LOCKLEAF | LOCKSHARED | TRYEMULROOT; if (flags & AT_SYMLINK_NOFOLLOW) nd_flag &= ~FOLLOW; @@ -3222,7 +3222,7 @@ do_sys_readlinkat(struct lwp *l, int fda if (error) { return error; } - NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | TRYEMULROOT, pb); + NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | LOCKSHARED | TRYEMULROOT, pb); if ((error = fd_nameiat(l, fdat, &nd)) != 0) { pathbuf_destroy(pb); return error; Index: src/sys/kern/vfs_vnops.c diff -u src/sys/kern/vfs_vnops.c:1.204.2.1 src/sys/kern/vfs_vnops.c:1.204.2.2 --- src/sys/kern/vfs_vnops.c:1.204.2.1 Fri Jan 17 21:47:35 2020 +++ src/sys/kern/vfs_vnops.c Sun Jan 19 21:23:36 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnops.c,v 1.204.2.1 2020/01/17 21:47:35 ad Exp $ */ +/* $NetBSD: vfs_vnops.c,v 1.204.2.2 2020/01/19 21:23:36 ad Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.204.2.1 2020/01/17 21:47:35 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.204.2.2 2020/01/19 21:23:36 ad Exp $"); #include "veriexec.h" @@ -163,7 +163,10 @@ vn_open(struct nameidata *ndp, int fmode ndp->ni_cnd.cn_flags |= FOLLOW; } else { ndp->ni_cnd.cn_nameiop = LOOKUP; - ndp->ni_cnd.cn_flags |= LOCKLEAF; + if ((fmode & O_TRUNC) == 0) /* XXXAD check nfs etc */ + ndp->ni_cnd.cn_flags |= LOCKLEAF | LOCKSHARED; + else + ndp->ni_cnd.cn_flags |= LOCKLEAF; if ((fmode & O_NOFOLLOW) == 0) ndp->ni_cnd.cn_flags |= FOLLOW; }