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;
}