Module Name: src
Committed By: ad
Date: Fri Jan 17 20:08:10 UTC 2020
Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_ctldir.c
zfs_vfsops.c
src/sys/coda: coda_vfsops.c coda_vfsops.h coda_vnops.c
src/sys/compat/common: vfs_syscalls_20.c vfs_syscalls_30.c
src/sys/compat/netbsd32: netbsd32_compat_30.c
src/sys/fs/adosfs: adlookup.c advfsops.c advnops.c
src/sys/fs/autofs: autofs_vfsops.c autofs_vnops.c
src/sys/fs/cd9660: cd9660_vfsops.c
src/sys/fs/efs: efs_vfsops.c
src/sys/fs/filecorefs: filecore_vfsops.c
src/sys/fs/hfs: hfs_vfsops.c
src/sys/fs/msdosfs: msdosfs_vfsops.c
src/sys/fs/nilfs: nilfs_vfsops.c
src/sys/fs/ntfs: ntfs_subr.c ntfs_vfsops.c
src/sys/fs/ptyfs: ptyfs.h ptyfs_vfsops.c
src/sys/fs/puffs: puffs_vfsops.c
src/sys/fs/smbfs: smbfs_vfsops.c
src/sys/fs/sysvbfs: sysvbfs_vfsops.c sysvbfs_vnops.c
src/sys/fs/tmpfs: tmpfs_vfsops.c
src/sys/fs/udf: udf_rename.c udf_subr.c udf_subr.h udf_vfsops.c
udf_vnops.c
src/sys/fs/union: union_vfsops.c union_vnops.c
src/sys/fs/unionfs: unionfs_vfsops.c
src/sys/fs/v7fs: v7fs_vfsops.c v7fs_vnops.c
src/sys/kern: vfs_lookup.c vfs_mount.c vfs_subr.c vfs_syscalls.c
src/sys/miscfs/fdesc: fdesc.h fdesc_vfsops.c
src/sys/miscfs/genfs: layer_extern.h layer_vfsops.c
src/sys/miscfs/kernfs: kernfs.h kernfs_vfsops.c
src/sys/miscfs/procfs: procfs.h procfs_vfsops.c
src/sys/nfs: nfs_export.c nfs_serv.c nfs_srvsubs.c nfs_vfsops.c
src/sys/rump/librump/rumpvfs: rump_vfs.c rumpfs.c
src/sys/sys: mount.h
src/sys/ufs/chfs: chfs_vfsops.c chfs_vnode.c chfs_vnops.c
src/sys/ufs/ext2fs: ext2fs_vfsops.c
src/sys/ufs/ffs: ffs_quota2.c ffs_snapshot.c ffs_vfsops.c ffs_wapbl.c
src/sys/ufs/lfs: lfs_alloc.c lfs_rfw.c lfs_vfsops.c ulfs_extattr.c
ulfs_extern.h ulfs_quota2.c ulfs_vfsops.c
src/sys/ufs/ufs: ufs_extattr.c ufs_extern.h ufs_vfsops.c
Log Message:
VFS_VGET(), VFS_ROOT(), VFS_FHTOVP(): give them a "int lktype" argument, to
allow us to get shared locks (or no lock) on the returned vnode. Matches
FreeBSD.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
cvs rdiff -u -r1.25 -r1.26 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
cvs rdiff -u -r1.86 -r1.87 src/sys/coda/coda_vfsops.c
cvs rdiff -u -r1.20 -r1.21 src/sys/coda/coda_vfsops.h
cvs rdiff -u -r1.107 -r1.108 src/sys/coda/coda_vnops.c
cvs rdiff -u -r1.44 -r1.45 src/sys/compat/common/vfs_syscalls_20.c
cvs rdiff -u -r1.39 -r1.40 src/sys/compat/common/vfs_syscalls_30.c
cvs rdiff -u -r1.33 -r1.34 src/sys/compat/netbsd32/netbsd32_compat_30.c
cvs rdiff -u -r1.20 -r1.21 src/sys/fs/adosfs/adlookup.c
cvs rdiff -u -r1.77 -r1.78 src/sys/fs/adosfs/advfsops.c
cvs rdiff -u -r1.50 -r1.51 src/sys/fs/adosfs/advnops.c
cvs rdiff -u -r1.8 -r1.9 src/sys/fs/autofs/autofs_vfsops.c
cvs rdiff -u -r1.4 -r1.5 src/sys/fs/autofs/autofs_vnops.c
cvs rdiff -u -r1.93 -r1.94 src/sys/fs/cd9660/cd9660_vfsops.c
cvs rdiff -u -r1.28 -r1.29 src/sys/fs/efs/efs_vfsops.c
cvs rdiff -u -r1.81 -r1.82 src/sys/fs/filecorefs/filecore_vfsops.c
cvs rdiff -u -r1.35 -r1.36 src/sys/fs/hfs/hfs_vfsops.c
cvs rdiff -u -r1.130 -r1.131 src/sys/fs/msdosfs/msdosfs_vfsops.c
cvs rdiff -u -r1.24 -r1.25 src/sys/fs/nilfs/nilfs_vfsops.c
cvs rdiff -u -r1.62 -r1.63 src/sys/fs/ntfs/ntfs_subr.c
cvs rdiff -u -r1.108 -r1.109 src/sys/fs/ntfs/ntfs_vfsops.c
cvs rdiff -u -r1.14 -r1.15 src/sys/fs/ptyfs/ptyfs.h
cvs rdiff -u -r1.56 -r1.57 src/sys/fs/ptyfs/ptyfs_vfsops.c
cvs rdiff -u -r1.123 -r1.124 src/sys/fs/puffs/puffs_vfsops.c
cvs rdiff -u -r1.106 -r1.107 src/sys/fs/smbfs/smbfs_vfsops.c
cvs rdiff -u -r1.46 -r1.47 src/sys/fs/sysvbfs/sysvbfs_vfsops.c
cvs rdiff -u -r1.63 -r1.64 src/sys/fs/sysvbfs/sysvbfs_vnops.c
cvs rdiff -u -r1.75 -r1.76 src/sys/fs/tmpfs/tmpfs_vfsops.c
cvs rdiff -u -r1.12 -r1.13 src/sys/fs/udf/udf_rename.c
cvs rdiff -u -r1.147 -r1.148 src/sys/fs/udf/udf_subr.c
cvs rdiff -u -r1.20 -r1.21 src/sys/fs/udf/udf_subr.h
cvs rdiff -u -r1.76 -r1.77 src/sys/fs/udf/udf_vfsops.c
cvs rdiff -u -r1.107 -r1.108 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.79 -r1.80 src/sys/fs/union/union_vfsops.c
cvs rdiff -u -r1.70 -r1.71 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.13 -r1.14 src/sys/fs/unionfs/unionfs_vfsops.c
cvs rdiff -u -r1.16 -r1.17 src/sys/fs/v7fs/v7fs_vfsops.c
cvs rdiff -u -r1.26 -r1.27 src/sys/fs/v7fs/v7fs_vnops.c
cvs rdiff -u -r1.212 -r1.213 src/sys/kern/vfs_lookup.c
cvs rdiff -u -r1.73 -r1.74 src/sys/kern/vfs_mount.c
cvs rdiff -u -r1.478 -r1.479 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.539 -r1.540 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.22 -r1.23 src/sys/miscfs/fdesc/fdesc.h
cvs rdiff -u -r1.92 -r1.93 src/sys/miscfs/fdesc/fdesc_vfsops.c
cvs rdiff -u -r1.40 -r1.41 src/sys/miscfs/genfs/layer_extern.h
cvs rdiff -u -r1.52 -r1.53 src/sys/miscfs/genfs/layer_vfsops.c
cvs rdiff -u -r1.41 -r1.42 src/sys/miscfs/kernfs/kernfs.h
cvs rdiff -u -r1.96 -r1.97 src/sys/miscfs/kernfs/kernfs_vfsops.c
cvs rdiff -u -r1.77 -r1.78 src/sys/miscfs/procfs/procfs.h
cvs rdiff -u -r1.101 -r1.102 src/sys/miscfs/procfs/procfs_vfsops.c
cvs rdiff -u -r1.61 -r1.62 src/sys/nfs/nfs_export.c
cvs rdiff -u -r1.178 -r1.179 src/sys/nfs/nfs_serv.c
cvs rdiff -u -r1.14 -r1.15 src/sys/nfs/nfs_srvsubs.c
cvs rdiff -u -r1.237 -r1.238 src/sys/nfs/nfs_vfsops.c
cvs rdiff -u -r1.88 -r1.89 src/sys/rump/librump/rumpvfs/rump_vfs.c
cvs rdiff -u -r1.153 -r1.154 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.235 -r1.236 src/sys/sys/mount.h
cvs rdiff -u -r1.20 -r1.21 src/sys/ufs/chfs/chfs_vfsops.c
cvs rdiff -u -r1.17 -r1.18 src/sys/ufs/chfs/chfs_vnode.c
cvs rdiff -u -r1.34 -r1.35 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.214 -r1.215 src/sys/ufs/ext2fs/ext2fs_vfsops.c
cvs rdiff -u -r1.6 -r1.7 src/sys/ufs/ffs/ffs_quota2.c
cvs rdiff -u -r1.149 -r1.150 src/sys/ufs/ffs/ffs_snapshot.c
cvs rdiff -u -r1.362 -r1.363 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.44 -r1.45 src/sys/ufs/ffs/ffs_wapbl.c
cvs rdiff -u -r1.137 -r1.138 src/sys/ufs/lfs/lfs_alloc.c
cvs rdiff -u -r1.34 -r1.35 src/sys/ufs/lfs/lfs_rfw.c
cvs rdiff -u -r1.368 -r1.369 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -u -r1.14 -r1.15 src/sys/ufs/lfs/ulfs_extattr.c
cvs rdiff -u -r1.24 -r1.25 src/sys/ufs/lfs/ulfs_extern.h
cvs rdiff -u -r1.31 -r1.32 src/sys/ufs/lfs/ulfs_quota2.c
cvs rdiff -u -r1.15 -r1.16 src/sys/ufs/lfs/ulfs_vfsops.c
cvs rdiff -u -r1.50 -r1.51 src/sys/ufs/ufs/ufs_extattr.c
cvs rdiff -u -r1.83 -r1.84 src/sys/ufs/ufs/ufs_extern.h
cvs rdiff -u -r1.58 -r1.59 src/sys/ufs/ufs/ufs_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.10 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.11
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c:1.10 Sun Dec 22 19:47:34 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_ctldir.c Fri Jan 17 20:08:06 2020
@@ -1430,7 +1430,7 @@ sfs_lookup_snapshot(vnode_t *dvp, struct
/* Return the mounted root rather than the covered mount point. */
ASSERT(vp->v_mountedhere);
- error = VFS_ROOT(vp->v_mountedhere, vpp);
+ error = VFS_ROOT(vp->v_mountedhere, LK_EXCLUSIVE, vpp);
vrele(vp);
if (error)
return error;
@@ -1949,7 +1949,7 @@ zfsctl_create(zfsvfs_t *zfsvfs)
zc = kmem_alloc(sizeof(*zc), KM_SLEEP);
- VERIFY(0 == VFS_ROOT(zfsvfs->z_vfs, &vp));
+ VERIFY(0 == VFS_ROOT(zfsvfs->z_vfs, LK_EXCLUSIVE, &vp));
VERIFY(0 == sa_lookup(VTOZ(vp)->z_sa_hdl, SA_ZPL_CRTIME(zfsvfs),
&crtime, sizeof(crtime)));
vput(vp);
Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.25 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.26
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.25 Wed Aug 7 20:45:53 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Fri Jan 17 20:08:06 2020
@@ -135,11 +135,10 @@ kmutex_t zfs_debug_mtx;
static int zfs_mount(vfs_t *vfsp, const char *path, void *data, size_t *data_len);
static int zfs_umount(vfs_t *vfsp, int fflag);
static int zfs_root(vfs_t *vfsp, int flags, vnode_t **vpp);
-static int zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp);
static int zfs_statvfs(vfs_t *vfsp, struct statvfs *statp);
static int zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size);
-static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp);
-static int zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp);
+static int zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, int lktype, vnode_t **vpp);
+static int zfs_vget(vfs_t *vfsp, ino_t ino, int lktype, vnode_t **vpp);
static int zfs_sync(vfs_t *vfsp, int waitfor);
static int zfs_netbsd_sync(vfs_t *vfsp, int waitfor, cred_t *cr);
static void zfs_freevfs(vfs_t *vfsp);
@@ -166,7 +165,7 @@ struct vfsops zfs_vfsops = {
.vfs_opv_descs = zfs_vnodeop_descs,
.vfs_mount = zfs_mount,
.vfs_unmount = zfs_umount,
- .vfs_root = zfs_netbsd_root,
+ .vfs_root = zfs_root,
.vfs_statvfs = zfs_statvfs,
.vfs_sync = zfs_netbsd_sync,
.vfs_vget = zfs_vget,
@@ -254,13 +253,6 @@ zfs_netbsd_sync(vfs_t *vfsp, int waitfor
}
static int
-zfs_netbsd_root(vfs_t *vfsp, vnode_t **vpp)
-{
-
- return zfs_root(vfsp, LK_EXCLUSIVE | LK_RETRY, vpp);
-}
-
-static int
zfs_netbsd_vptofh(vnode_t *vp, fid_t *fidp, size_t *fh_size)
{
znode_t *zp;
@@ -330,7 +322,7 @@ zfs_netbsd_vptofh(vnode_t *vp, fid_t *fi
}
static int
-zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, vnode_t **vpp)
+zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fidp, int lktype, vnode_t **vpp)
{
zfsvfs_t *zfsvfs = vfsp->vfs_data;
znode_t *zp;
@@ -417,7 +409,7 @@ zfs_netbsd_fhtovp(vfs_t *vfsp, fid_t *fi
*vpp = ZTOV(zp);
ZFS_EXIT(zfsvfs);
- err = vn_lock(*vpp, LK_EXCLUSIVE);
+ err = vn_lock(*vpp, lktype);
if (err) {
vrele(*vpp);
*vpp = NULL;
@@ -2475,21 +2467,12 @@ zfs_umount(vfs_t *vfsp, int fflag)
return (0);
}
-#ifdef __FreeBSD_kernel__
static int
zfs_vget(vfs_t *vfsp, ino_t ino, int flags, vnode_t **vpp)
-#endif
-#ifdef __NetBSD__
-static int
-zfs_vget(vfs_t *vfsp, ino_t ino, vnode_t **vpp)
-#endif
{
zfsvfs_t *zfsvfs = vfsp->vfs_data;
znode_t *zp;
int err;
-#ifdef __NetBSD__
- int flags = LK_EXCLUSIVE;
-#endif
/*
* zfs_zget() can't operate on virtual entries like .zfs/ or
Index: src/sys/coda/coda_vfsops.c
diff -u src/sys/coda/coda_vfsops.c:1.86 src/sys/coda/coda_vfsops.c:1.87
--- src/sys/coda/coda_vfsops.c:1.86 Tue Apr 4 07:36:38 2017
+++ src/sys/coda/coda_vfsops.c Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vfsops.c,v 1.86 2017/04/04 07:36:38 hannken Exp $ */
+/* $NetBSD: coda_vfsops.c,v 1.87 2020/01/17 20:08:06 ad Exp $ */
/*
*
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.86 2017/04/04 07:36:38 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.87 2020/01/17 20:08:06 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -346,7 +346,7 @@ coda_unmount(struct mount *vfsp, int mnt
* find root of cfs
*/
int
-coda_root(struct mount *vfsp, struct vnode **vpp)
+coda_root(struct mount *vfsp, int lktype, struct vnode **vpp)
{
struct coda_mntinfo *mi = vftomi(vfsp);
int error;
@@ -363,7 +363,7 @@ coda_root(struct mount *vfsp, struct vno
*vpp = mi->mi_rootvp;
/* On Mach, this is vref. On NetBSD, VOP_LOCK */
vref(*vpp);
- vn_lock(*vpp, LK_EXCLUSIVE);
+ vn_lock(*vpp, lktype);
MARK_INT_SAT(CODA_ROOT_STATS);
return(0);
}
@@ -475,7 +475,7 @@ coda_sync(struct mount *vfsp, int waitfo
}
int
-coda_vget(struct mount *vfsp, ino_t ino,
+coda_vget(struct mount *vfsp, ino_t ino, int lktype,
struct vnode **vpp)
{
ENTRY;
@@ -515,7 +515,7 @@ coda_loadvnode(struct mount *mp, struct
int
coda_fhtovp(struct mount *vfsp, struct fid *fhp, struct mbuf *nam,
struct vnode **vpp, int *exflagsp,
- kauth_cred_t *creadanonp)
+ kauth_cred_t *creadanonp, int lktype)
{
struct cfid *cfid = (struct cfid *)fhp;
struct cnode *cp = 0;
@@ -621,7 +621,7 @@ getNewVnode(struct vnode **vpp)
return ENODEV;
return coda_fhtovp(mi->mi_vfsp, (struct fid*)&cfid, NULL, vpp,
- NULL, NULL);
+ NULL, NULL, LK_EXCLUSIVE);
}
/* Get the mount structure corresponding to a given device.
Index: src/sys/coda/coda_vfsops.h
diff -u src/sys/coda/coda_vfsops.h:1.20 src/sys/coda/coda_vfsops.h:1.21
--- src/sys/coda/coda_vfsops.h:1.20 Thu Jun 8 22:29:59 2017
+++ src/sys/coda/coda_vfsops.h Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vfsops.h,v 1.20 2017/06/08 22:29:59 chs Exp $ */
+/* $NetBSD: coda_vfsops.h,v 1.21 2020/01/17 20:08:06 ad Exp $ */
/*
*
@@ -50,14 +50,14 @@ int coda_vfsopstats_init(void);
int coda_mount(struct mount *, const char *, void *, size_t *);
int coda_start(struct mount *, int);
int coda_unmount(struct mount *, int);
-int coda_root(struct mount *, struct vnode **);
+int coda_root(struct mount *, int, struct vnode **);
int coda_nb_statvfs(struct mount *, struct statvfs *);
int coda_sync(struct mount *, int, kauth_cred_t);
-int coda_vget(struct mount *, ino_t, struct vnode **);
+int coda_vget(struct mount *, ino_t, int, struct vnode **);
int coda_loadvnode(struct mount *, struct vnode *, const void *, size_t,
const void **);
int coda_fhtovp(struct mount *, struct fid *, struct mbuf *, struct vnode **,
- int *, kauth_cred_t *);
+ int *, kauth_cred_t *, int);
int coda_vptofh(struct vnode *, struct fid *);
void coda_init(void);
void coda_done(void);
Index: src/sys/coda/coda_vnops.c
diff -u src/sys/coda/coda_vnops.c:1.107 src/sys/coda/coda_vnops.c:1.108
--- src/sys/coda/coda_vnops.c:1.107 Tue Nov 20 19:05:25 2018
+++ src/sys/coda/coda_vnops.c Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vnops.c,v 1.107 2018/11/20 19:05:25 christos Exp $ */
+/* $NetBSD: coda_vnops.c,v 1.108 2020/01/17 20:08:06 ad Exp $ */
/*
*
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.107 2018/11/20 19:05:25 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.108 2020/01/17 20:08:06 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1757,7 +1757,7 @@ coda_grab_vnode(vnode_t *uvp, dev_t dev,
/*
* Obtain vnode from mount point and inode.
*/
- error = VFS_VGET(mp, ino, vpp);
+ error = VFS_VGET(mp, ino, LK_EXCLUSIVE, vpp);
if (error) {
myprintf(("%s: iget/vget(0x%llx, %llu) returns %p, err %d\n", __func__,
(unsigned long long)dev, (unsigned long long)ino, *vpp, error));
Index: src/sys/compat/common/vfs_syscalls_20.c
diff -u src/sys/compat/common/vfs_syscalls_20.c:1.44 src/sys/compat/common/vfs_syscalls_20.c:1.45
--- src/sys/compat/common/vfs_syscalls_20.c:1.44 Fri Oct 4 01:28:03 2019
+++ src/sys/compat/common/vfs_syscalls_20.c Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_20.c,v 1.44 2019/10/04 01:28:03 christos Exp $ */
+/* $NetBSD: vfs_syscalls_20.c,v 1.45 2020/01/17 20:08:06 ad Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_20.c,v 1.44 2019/10/04 01:28:03 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_20.c,v 1.45 2020/01/17 20:08:06 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -181,7 +181,8 @@ compat_20_sys_fhstatfs(struct lwp *l, co
if ((mp = vfs_getvfs(&fh.fh_fsid)) == NULL)
return (ESTALE);
- if ((error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, &vp)))
+ error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, LK_EXCLUSIVE, &vp);
+ if (error != 0)
return (error);
mp = vp->v_mount;
VOP_UNLOCK(vp);
Index: src/sys/compat/common/vfs_syscalls_30.c
diff -u src/sys/compat/common/vfs_syscalls_30.c:1.39 src/sys/compat/common/vfs_syscalls_30.c:1.40
--- src/sys/compat/common/vfs_syscalls_30.c:1.39 Sun Sep 22 22:59:38 2019
+++ src/sys/compat/common/vfs_syscalls_30.c Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_30.c,v 1.39 2019/09/22 22:59:38 christos Exp $ */
+/* $NetBSD: vfs_syscalls_30.c,v 1.40 2020/01/17 20:08:06 ad Exp $ */
/*-
* Copyright (c) 2005, 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.39 2019/09/22 22:59:38 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_30.c,v 1.40 2020/01/17 20:08:06 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -182,7 +182,8 @@ compat_30_sys_fhstat(struct lwp *l,
return (ESTALE);
if (mp->mnt_op->vfs_fhtovp == NULL)
return EOPNOTSUPP;
- if ((error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, &vp)))
+ error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, LK_EXCLUSIVE, &vp);
+ if (error != 0)
return (error);
error = vn_stat(vp, &sb);
vput(vp);
Index: src/sys/compat/netbsd32/netbsd32_compat_30.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_30.c:1.33 src/sys/compat/netbsd32/netbsd32_compat_30.c:1.34
--- src/sys/compat/netbsd32/netbsd32_compat_30.c:1.33 Sun Jan 27 02:08:40 2019
+++ src/sys/compat/netbsd32/netbsd32_compat_30.c Fri Jan 17 20:08:06 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_compat_30.c,v 1.33 2019/01/27 02:08:40 pgoyette Exp $ */
+/* $NetBSD: netbsd32_compat_30.c,v 1.34 2020/01/17 20:08:06 ad Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_30.c,v 1.33 2019/01/27 02:08:40 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_30.c,v 1.34 2020/01/17 20:08:06 ad Exp $");
#if defined(_KERNEL_OPT)
#include <opt_ntp.h>
@@ -192,7 +192,7 @@ compat_30_netbsd32_fhstat(struct lwp *l,
return (ESTALE);
if (mp->mnt_op->vfs_fhtovp == NULL)
return EOPNOTSUPP;
- if ((error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, &vp)))
+ if ((error = VFS_FHTOVP(mp, (struct fid*)&fh.fh_fid, LK_EXCLUSIVE, &vp)))
return (error);
error = vn_stat(vp, &sb);
vput(vp);
Index: src/sys/fs/adosfs/adlookup.c
diff -u src/sys/fs/adosfs/adlookup.c:1.20 src/sys/fs/adosfs/adlookup.c:1.21
--- src/sys/fs/adosfs/adlookup.c:1.20 Mon Sep 3 16:29:34 2018
+++ src/sys/fs/adosfs/adlookup.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: adlookup.c,v 1.20 2018/09/03 16:29:34 riastradh Exp $ */
+/* $NetBSD: adlookup.c,v 1.21 2020/01/17 20:08:07 ad Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.20 2018/09/03 16:29:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adlookup.c,v 1.21 2020/01/17 20:08:07 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -145,7 +145,8 @@ adosfs_lookup(void *v)
*
*/
VOP_UNLOCK(vdp); /* race */
- error = VFS_VGET(vdp->v_mount, (ino_t)adp->pblock, vpp);
+ error = VFS_VGET(vdp->v_mount, (ino_t)adp->pblock,
+ LK_EXCLUSIVE, vpp);
vn_lock(vdp, LK_EXCLUSIVE | LK_RETRY);
if (error) {
*vpp = NULL;
@@ -163,8 +164,8 @@ adosfs_lookup(void *v)
bn = adp->tab[hval];
i = uimin(adp->tabi[hval], 0);
while (bn != 0) {
- if ((error = VFS_VGET(vdp->v_mount, (ino_t)bn, vpp
- )) != 0) {
+ if ((error = VFS_VGET(vdp->v_mount, (ino_t)bn,
+ LK_EXCLUSIVE, vpp)) != 0) {
#ifdef ADOSFS_DIAGNOSTIC
printf("[aget] %d)", error);
#endif
Index: src/sys/fs/adosfs/advfsops.c
diff -u src/sys/fs/adosfs/advfsops.c:1.77 src/sys/fs/adosfs/advfsops.c:1.78
--- src/sys/fs/adosfs/advfsops.c:1.77 Thu Jun 1 02:45:12 2017
+++ src/sys/fs/adosfs/advfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: advfsops.c,v 1.77 2017/06/01 02:45:12 chs Exp $ */
+/* $NetBSD: advfsops.c,v 1.78 2020/01/17 20:08:07 ad Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.77 2017/06/01 02:45:12 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: advfsops.c,v 1.78 2020/01/17 20:08:07 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -264,7 +264,7 @@ adosfs_mountfs(struct vnode *devvp, stru
/*
* get the root anode, if not a valid fs this will fail.
*/
- if ((error = VFS_ROOT(mp, &rvp)) != 0)
+ if ((error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp)) != 0)
goto fail;
/* allocate and load bitmap, set free space */
bitmap_sz = ((amp->numblks + 31) / 32) * sizeof(*amp->bitmap);
@@ -328,12 +328,13 @@ adosfs_unmount(struct mount *mp, int mnt
}
int
-adosfs_root(struct mount *mp, struct vnode **vpp)
+adosfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error;
- if ((error = VFS_VGET(mp, (ino_t)VFSTOADOSFS(mp)->rootb, &nvp)) != 0)
+ error = VFS_VGET(mp, (ino_t)VFSTOADOSFS(mp)->rootb, lktype, &nvp);
+ if (error != 0)
return (error);
/* XXX verify it's a root block? */
*vpp = nvp;
@@ -366,7 +367,7 @@ adosfs_statvfs(struct mount *mp, struct
* return locked and referenced
*/
int
-adosfs_vget(struct mount *mp, ino_t an, struct vnode **vpp)
+adosfs_vget(struct mount *mp, ino_t an, int lktype, struct vnode **vpp)
{
u_long block;
int error;
@@ -376,7 +377,7 @@ adosfs_vget(struct mount *mp, ino_t an,
error = vcache_get(mp, &block, sizeof(block), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -690,7 +691,8 @@ struct ifid {
};
int
-adosfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+adosfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype,
+ struct vnode **vpp)
{
struct ifid ifh;
#if 0
@@ -708,7 +710,7 @@ adosfs_fhtovp(struct mount *mp, struct f
memcpy(&ifh, fhp, sizeof(ifh));
- if ((error = VFS_VGET(mp, ifh.ifid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ifh.ifid_ino, lktype, &nvp)) != 0) {
*vpp = NULLVP;
return (error);
}
Index: src/sys/fs/adosfs/advnops.c
diff -u src/sys/fs/adosfs/advnops.c:1.50 src/sys/fs/adosfs/advnops.c:1.51
--- src/sys/fs/adosfs/advnops.c:1.50 Fri May 26 14:21:00 2017
+++ src/sys/fs/adosfs/advnops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: advnops.c,v 1.50 2017/05/26 14:21:00 riastradh Exp $ */
+/* $NetBSD: advnops.c,v 1.51 2020/01/17 20:08:07 ad Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.50 2017/05/26 14:21:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.51 2020/01/17 20:08:07 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -657,7 +657,8 @@ adosfs_readdir(void *v)
*/
ap = NULL;
do {
- error = VFS_VGET(pap->amp->mp, (ino_t)nextbn, &vp);
+ error = VFS_VGET(pap->amp->mp, (ino_t)nextbn,
+ LK_EXCLUSIVE, &vp);
if (error)
goto reterr;
ap = VTOA(vp);
Index: src/sys/fs/autofs/autofs_vfsops.c
diff -u src/sys/fs/autofs/autofs_vfsops.c:1.8 src/sys/fs/autofs/autofs_vfsops.c:1.9
--- src/sys/fs/autofs/autofs_vfsops.c:1.8 Tue Nov 26 16:17:31 2019
+++ src/sys/fs/autofs/autofs_vfsops.c Fri Jan 17 20:08:07 2020
@@ -33,7 +33,7 @@
*
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autofs_vfsops.c,v 1.8 2019/11/26 16:17:31 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autofs_vfsops.c,v 1.9 2020/01/17 20:08:07 ad Exp $");
#include "autofs.h"
@@ -262,7 +262,7 @@ autofs_start(struct mount *mp, int flags
}
static int
-autofs_root(struct mount *mp, struct vnode **vpp)
+autofs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct autofs_node *anp = VFSTOAUTOFS(mp)->am_root;
int error;
@@ -270,7 +270,7 @@ autofs_root(struct mount *mp, struct vno
error = vcache_get(mp, &anp, sizeof(anp), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULLVP;
Index: src/sys/fs/autofs/autofs_vnops.c
diff -u src/sys/fs/autofs/autofs_vnops.c:1.4 src/sys/fs/autofs/autofs_vnops.c:1.5
--- src/sys/fs/autofs/autofs_vnops.c:1.4 Tue Nov 26 16:17:31 2019
+++ src/sys/fs/autofs/autofs_vnops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: autofs_vnops.c,v 1.4 2019/11/26 16:17:31 tkusumi Exp $ */
+/* $NetBSD: autofs_vnops.c,v 1.5 2020/01/17 20:08:07 ad Exp $ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
* Copyright (c) 2016 The DragonFly Project
@@ -34,7 +34,7 @@
*
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autofs_vnops.c,v 1.4 2019/11/26 16:17:31 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autofs_vnops.c,v 1.5 2020/01/17 20:08:07 ad Exp $");
#include "autofs.h"
@@ -183,7 +183,7 @@ mounted:
autofs_node_uncache(anp);
}
- error = VFS_ROOT(vp->v_mountedhere, newvp);
+ error = VFS_ROOT(vp->v_mountedhere, LK_EXCLUSIVE, newvp);
if (error) {
AUTOFS_WARN("VFS_ROOT() failed with error %d", error);
return error;
Index: src/sys/fs/cd9660/cd9660_vfsops.c
diff -u src/sys/fs/cd9660/cd9660_vfsops.c:1.93 src/sys/fs/cd9660/cd9660_vfsops.c:1.94
--- src/sys/fs/cd9660/cd9660_vfsops.c:1.93 Mon Apr 17 08:32:00 2017
+++ src/sys/fs/cd9660/cd9660_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_vfsops.c,v 1.93 2017/04/17 08:32:00 hannken Exp $ */
+/* $NetBSD: cd9660_vfsops.c,v 1.94 2020/01/17 20:08:07 ad Exp $ */
/*-
* Copyright (c) 1994
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.93 2017/04/17 08:32:00 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.94 2020/01/17 20:08:07 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -578,14 +578,14 @@ cd9660_unmount(struct mount *mp, int mnt
* Return root of a filesystem
*/
int
-cd9660_root(struct mount *mp, struct vnode **vpp)
+cd9660_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct iso_mnt *imp = VFSTOISOFS(mp);
struct iso_directory_record *dp =
(struct iso_directory_record *)imp->root;
ino_t ino = isodirino(dp, imp);
- return cd9660_vget(mp, ino, vpp);
+ return cd9660_vget(mp, ino, lktype, vpp);
}
/*
@@ -643,7 +643,7 @@ struct ifid {
/* ARGSUSED */
int
-cd9660_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+cd9660_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct ifid ifh;
struct iso_node *ip;
@@ -659,7 +659,7 @@ cd9660_fhtovp(struct mount *mp, struct f
ifh.ifid_ino, ifh.ifid_start);
#endif
- if ((error = VFS_VGET(mp, ifh.ifid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ifh.ifid_ino, lktype, &nvp)) != 0) {
*vpp = NULLVP;
return (error);
}
@@ -674,14 +674,14 @@ cd9660_fhtovp(struct mount *mp, struct f
}
int
-cd9660_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+cd9660_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
Index: src/sys/fs/efs/efs_vfsops.c
diff -u src/sys/fs/efs/efs_vfsops.c:1.28 src/sys/fs/efs/efs_vfsops.c:1.29
--- src/sys/fs/efs/efs_vfsops.c:1.28 Fri Feb 17 08:31:24 2017
+++ src/sys/fs/efs/efs_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: efs_vfsops.c,v 1.28 2017/02/17 08:31:24 hannken Exp $ */
+/* $NetBSD: efs_vfsops.c,v 1.29 2020/01/17 20:08:07 ad Exp $ */
/*
* Copyright (c) 2006 Stephen M. Rumble <[email protected]>
@@ -17,7 +17,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_vfsops.c,v 1.28 2017/02/17 08:31:24 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vfsops.c,v 1.29 2020/01/17 20:08:07 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -295,12 +295,12 @@ efs_unmount(struct mount *mp, int mntfla
* Returns 0 on success.
*/
static int
-efs_root(struct mount *mp, struct vnode **vpp)
+efs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
int err;
struct vnode *vp;
- if ((err = VFS_VGET(mp, EFS_ROOTINO, &vp)))
+ if ((err = VFS_VGET(mp, EFS_ROOTINO, lktype, &vp)))
return (err);
*vpp = vp;
@@ -343,14 +343,14 @@ efs_statvfs(struct mount *mp, struct sta
* Returns 0 on success.
*/
static int
-efs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+efs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -453,7 +453,7 @@ efs_loadvnode(struct mount *mp, struct v
* Returns 0 on success.
*/
static int
-efs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+efs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
int err;
struct vnode *vp;
@@ -465,7 +465,7 @@ efs_fhtovp(struct mount *mp, struct fid
efp = (struct efs_fid *)fhp;
- if ((err = VFS_VGET(mp, efp->ef_ino, &vp))) {
+ if ((err = VFS_VGET(mp, efp->ef_ino, lktype, &vp))) {
*vpp = NULL;
return (err);
}
Index: src/sys/fs/filecorefs/filecore_vfsops.c
diff -u src/sys/fs/filecorefs/filecore_vfsops.c:1.81 src/sys/fs/filecorefs/filecore_vfsops.c:1.82
--- src/sys/fs/filecorefs/filecore_vfsops.c:1.81 Mon Apr 17 08:32:00 2017
+++ src/sys/fs/filecorefs/filecore_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: filecore_vfsops.c,v 1.81 2017/04/17 08:32:00 hannken Exp $ */
+/* $NetBSD: filecore_vfsops.c,v 1.82 2020/01/17 20:08:07 ad Exp $ */
/*-
* Copyright (c) 1994 The Regents of the University of California.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: filecore_vfsops.c,v 1.81 2017/04/17 08:32:00 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_vfsops.c,v 1.82 2020/01/17 20:08:07 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -460,12 +460,12 @@ filecore_unmount(struct mount *mp, int m
* Return root of a filesystem
*/
int
-filecore_root(struct mount *mp, struct vnode **vpp)
+filecore_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error;
- if ((error = VFS_VGET(mp, FILECORE_ROOTINO, &nvp)) != 0)
+ if ((error = VFS_VGET(mp, FILECORE_ROOTINO, lktype, &nvp)) != 0)
return (error);
*vpp = nvp;
return (0);
@@ -519,7 +519,8 @@ struct ifid {
/* ARGSUSED */
int
-filecore_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+filecore_fhtovp(struct mount *mp, struct fid *fhp, int lktype,
+ struct vnode **vpp)
{
struct ifid ifh;
struct vnode *nvp;
@@ -530,7 +531,7 @@ filecore_fhtovp(struct mount *mp, struct
return EINVAL;
memcpy(&ifh, fhp, sizeof(ifh));
- if ((error = VFS_VGET(mp, ifh.ifid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ifh.ifid_ino, lktype, &nvp)) != 0) {
*vpp = NULLVP;
return (error);
}
@@ -553,14 +554,14 @@ filecore_fhtovp(struct mount *mp, struct
*/
int
-filecore_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+filecore_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
Index: src/sys/fs/hfs/hfs_vfsops.c
diff -u src/sys/fs/hfs/hfs_vfsops.c:1.35 src/sys/fs/hfs/hfs_vfsops.c:1.36
--- src/sys/fs/hfs/hfs_vfsops.c:1.35 Mon Dec 10 14:46:24 2018
+++ src/sys/fs/hfs/hfs_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: hfs_vfsops.c,v 1.35 2018/12/10 14:46:24 maxv Exp $ */
+/* $NetBSD: hfs_vfsops.c,v 1.36 2020/01/17 20:08:07 ad Exp $ */
/*-
* Copyright (c) 2005, 2007 The NetBSD Foundation, Inc.
@@ -99,7 +99,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hfs_vfsops.c,v 1.35 2018/12/10 14:46:24 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hfs_vfsops.c,v 1.36 2020/01/17 20:08:07 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -439,7 +439,7 @@ hfs_unmount(struct mount *mp, int mntfla
}
int
-hfs_root(struct mount *mp, struct vnode **vpp)
+hfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error;
@@ -448,7 +448,7 @@ hfs_root(struct mount *mp, struct vnode
printf("vfsop = hfs_root()\n");
#endif /* HFS_DEBUG */
- if ((error = VFS_VGET(mp, HFS_CNID_ROOT_FOLDER, &nvp)) != 0)
+ if ((error = VFS_VGET(mp, HFS_CNID_ROOT_FOLDER, lktype, &nvp)) != 0)
return error;
*vpp = nvp;
@@ -495,14 +495,14 @@ hfs_sync(struct mount *mp, int waitfor,
* since both are conveniently 32-bit numbers
*/
int
-hfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+hfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = hfs_vget_internal(mp, ino, HFS_DATAFORK, vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -612,7 +612,7 @@ hfs_loadvnode(struct mount *mp, struct v
}
int
-hfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+hfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
#ifdef HFS_DEBUG
Index: src/sys/fs/msdosfs/msdosfs_vfsops.c
diff -u src/sys/fs/msdosfs/msdosfs_vfsops.c:1.130 src/sys/fs/msdosfs/msdosfs_vfsops.c:1.131
--- src/sys/fs/msdosfs/msdosfs_vfsops.c:1.130 Mon Sep 3 16:29:34 2018
+++ src/sys/fs/msdosfs/msdosfs_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msdosfs_vfsops.c,v 1.130 2018/09/03 16:29:34 riastradh Exp $ */
+/* $NetBSD: msdosfs_vfsops.c,v 1.131 2020/01/17 20:08:07 ad Exp $ */
/*-
* Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.130 2018/09/03 16:29:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.131 2020/01/17 20:08:07 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -209,7 +209,8 @@ update_mp(struct mount *mp, struct msdos
if (FAT32(pmp))
pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
else {
- if ((error = msdosfs_root(mp, &rtvp)) != 0)
+ error = msdosfs_root(mp, LK_EXCLUSIVE, &rtvp);
+ if (error != 0)
return error;
pmp->pm_flags |= findwin95(VTODE(rtvp))
? MSDOSFSMNT_LONGNAME
@@ -950,7 +951,7 @@ msdosfs_unmount(struct mount *mp, int mn
}
int
-msdosfs_root(struct mount *mp, struct vnode **vpp)
+msdosfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
int error;
@@ -960,7 +961,7 @@ msdosfs_root(struct mount *mp, struct vn
#endif
if ((error = deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS, vpp)) != 0)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -1064,7 +1065,7 @@ msdosfs_sync(struct mount *mp, int waitf
}
int
-msdosfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+msdosfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
struct defid defh;
@@ -1090,7 +1091,7 @@ msdosfs_fhtovp(struct mount *mp, struct
*vpp = NULLVP;
return error;
}
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULLVP;
@@ -1125,7 +1126,7 @@ msdosfs_vptofh(struct vnode *vp, struct
}
int
-msdosfs_vget(struct mount *mp, ino_t ino,
+msdosfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
Index: src/sys/fs/nilfs/nilfs_vfsops.c
diff -u src/sys/fs/nilfs/nilfs_vfsops.c:1.24 src/sys/fs/nilfs/nilfs_vfsops.c:1.25
--- src/sys/fs/nilfs/nilfs_vfsops.c:1.24 Mon May 28 21:04:37 2018
+++ src/sys/fs/nilfs/nilfs_vfsops.c Fri Jan 17 20:08:07 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: nilfs_vfsops.c,v 1.24 2018/05/28 21:04:37 chs Exp $ */
+/* $NetBSD: nilfs_vfsops.c,v 1.25 2020/01/17 20:08:07 ad Exp $ */
/*
* Copyright (c) 2008, 2009 Reinoud Zandijk
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: nilfs_vfsops.c,v 1.24 2018/05/28 21:04:37 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vfsops.c,v 1.25 2020/01/17 20:08:07 ad Exp $");
#endif /* not lint */
@@ -1023,7 +1023,7 @@ nilfs_start(struct mount *mp, int flags)
/* --------------------------------------------------------------------- */
int
-nilfs_root(struct mount *mp, struct vnode **vpp)
+nilfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
uint64_t ino = NILFS_ROOT_INO;
int error;
@@ -1032,7 +1032,7 @@ nilfs_root(struct mount *mp, struct vnod
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error == 0) {
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -1090,7 +1090,7 @@ nilfs_sync(struct mount *mp, int waitfor
* (optional) TODO lookup why some sources state NFSv3
*/
int
-nilfs_vget(struct mount *mp, ino_t ino,
+nilfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
DPRINTF(NOTIMPL, ("nilfs_vget called\n"));
@@ -1189,7 +1189,7 @@ nilfs_loadvnode(struct mount *mp, struct
* Lookup vnode for file handle specified
*/
int
-nilfs_fhtovp(struct mount *mp, struct fid *fhp,
+nilfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype,
struct vnode **vpp)
{
DPRINTF(NOTIMPL, ("nilfs_fhtovp called\n"));
Index: src/sys/fs/ntfs/ntfs_subr.c
diff -u src/sys/fs/ntfs/ntfs_subr.c:1.62 src/sys/fs/ntfs/ntfs_subr.c:1.63
--- src/sys/fs/ntfs/ntfs_subr.c:1.62 Fri Oct 18 08:19:33 2019
+++ src/sys/fs/ntfs/ntfs_subr.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ntfs_subr.c,v 1.62 2019/10/18 08:19:33 hannken Exp $ */
+/* $NetBSD: ntfs_subr.c,v 1.63 2020/01/17 20:08:08 ad Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko ([email protected])
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_subr.c,v 1.62 2019/10/18 08:19:33 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_subr.c,v 1.63 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1772,7 +1772,7 @@ ntfs_toupper_use(struct mount *mp, struc
ntfs_toupper_tab = malloc(256 * 256 * sizeof(*ntfs_toupper_tab),
M_NTFSRDATA, M_WAITOK);
- if ((error = VFS_VGET(mp, NTFS_UPCASEINO, &vp)))
+ if ((error = VFS_VGET(mp, NTFS_UPCASEINO, LK_EXCLUSIVE, &vp)))
goto out;
error = ntfs_readattr(ntmp, VTONT(vp), NTFS_A_DATA, NULL,
0, 256 * 256 * sizeof(*ntfs_toupper_tab), (char *)ntfs_toupper_tab,
Index: src/sys/fs/ntfs/ntfs_vfsops.c
diff -u src/sys/fs/ntfs/ntfs_vfsops.c:1.108 src/sys/fs/ntfs/ntfs_vfsops.c:1.109
--- src/sys/fs/ntfs/ntfs_vfsops.c:1.108 Fri Oct 18 08:18:40 2019
+++ src/sys/fs/ntfs/ntfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ntfs_vfsops.c,v 1.108 2019/10/18 08:18:40 hannken Exp $ */
+/* $NetBSD: ntfs_vfsops.c,v 1.109 2020/01/17 20:08:08 ad Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.108 2019/10/18 08:18:40 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.109 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -67,12 +67,12 @@ MALLOC_JUSTDEFINE(M_NTFSDIR,"NTFS dir",
static int ntfs_superblock_validate(struct ntfsmount *);
static int ntfs_mount(struct mount *, const char *, void *, size_t *);
-static int ntfs_root(struct mount *, struct vnode **);
+static int ntfs_root(struct mount *, int, struct vnode **);
static int ntfs_start(struct mount *, int);
static int ntfs_statvfs(struct mount *, struct statvfs *);
static int ntfs_sync(struct mount *, int, kauth_cred_t);
static int ntfs_unmount(struct mount *, int);
-static int ntfs_vget(struct mount *mp, ino_t ino,
+static int ntfs_vget(struct mount *mp, ino_t ino, int,
struct vnode **vpp);
static int ntfs_loadvnode(struct mount *, struct vnode *,
const void *, size_t, const void **);
@@ -83,7 +83,7 @@ static int ntfs_vptofh(struct vnode *, s
static void ntfs_init(void);
static void ntfs_reinit(void);
static void ntfs_done(void);
-static int ntfs_fhtovp(struct mount *, struct fid *,
+static int ntfs_fhtovp(struct mount *, struct fid *, int,
struct vnode **);
static int ntfs_mountroot(void);
@@ -387,7 +387,8 @@ ntfs_mountfs(struct vnode *devvp, struct
{
int pi[3] = { NTFS_MFTINO, NTFS_ROOTINO, NTFS_BITMAPINO };
for (i = 0; i < 3; i++) {
- error = VFS_VGET(mp, pi[i], &(ntmp->ntm_sysvn[pi[i]]));
+ error = VFS_VGET(mp, pi[i], LK_EXCLUSIVE,
+ &(ntmp->ntm_sysvn[pi[i]]));
if (error)
goto out1;
ntmp->ntm_sysvn[pi[i]]->v_vflag |= VV_SYSTEM;
@@ -417,7 +418,7 @@ ntfs_mountfs(struct vnode *devvp, struct
struct attrdef ad;
/* Open $AttrDef */
- error = VFS_VGET(mp, NTFS_ATTRDEFINO, &vp);
+ error = VFS_VGET(mp, NTFS_ATTRDEFINO, LK_EXCLUSIVE, &vp);
if (error)
goto out1;
@@ -570,14 +571,14 @@ ntfs_unmount(struct mount *mp, int mntfl
}
static int
-ntfs_root(struct mount *mp, struct vnode **vpp)
+ntfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error = 0;
dprintf(("ntfs_root(): sysvn: %p\n",
VFSTONTFS(mp)->ntm_sysvn[NTFS_ROOTINO]));
- error = VFS_VGET(mp, (ino_t)NTFS_ROOTINO, &nvp);
+ error = VFS_VGET(mp, (ino_t)NTFS_ROOTINO, lktype, &nvp);
if (error) {
printf("ntfs_root: VFS_VGET failed: %d\n", error);
return (error);
@@ -649,7 +650,7 @@ ntfs_sync(struct mount *mp, int waitfor,
/*ARGSUSED*/
static int
-ntfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+ntfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct ntfid ntfh;
int error;
@@ -661,7 +662,7 @@ ntfs_fhtovp(struct mount *mp, struct fid
(unsigned long long)ntfh.ntfid_ino));
error = ntfs_vgetex(mp, ntfh.ntfid_ino, ntfh.ntfid_attr, "",
- LK_EXCLUSIVE, vpp);
+ lktype, vpp);
if (error != 0) {
*vpp = NULLVP;
return (error);
@@ -822,9 +823,9 @@ out:
}
static int
-ntfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+ntfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
- return ntfs_vgetex(mp, ino, NTFS_A_DATA, "", LK_EXCLUSIVE, vpp);
+ return ntfs_vgetex(mp, ino, NTFS_A_DATA, "", lktype, vpp);
}
int
Index: src/sys/fs/ptyfs/ptyfs.h
diff -u src/sys/fs/ptyfs/ptyfs.h:1.14 src/sys/fs/ptyfs/ptyfs.h:1.15
--- src/sys/fs/ptyfs/ptyfs.h:1.14 Fri Aug 15 13:40:39 2014
+++ src/sys/fs/ptyfs/ptyfs.h Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ptyfs.h,v 1.14 2014/08/15 13:40:39 hannken Exp $ */
+/* $NetBSD: ptyfs.h,v 1.15 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 1993
@@ -168,7 +168,7 @@ void ptyfs_itimes(struct ptyfsnode *, co
extern int (**ptyfs_vnodeop_p)(void *);
extern struct vfsops ptyfs_vfsops;
-int ptyfs_root(struct mount *, struct vnode **);
+int ptyfs_root(struct mount *, int, struct vnode **);
#endif /* _KERNEL */
#endif /* _FS_PTYFS_PTYFS_H_ */
Index: src/sys/fs/ptyfs/ptyfs_vfsops.c
diff -u src/sys/fs/ptyfs/ptyfs_vfsops.c:1.56 src/sys/fs/ptyfs/ptyfs_vfsops.c:1.57
--- src/sys/fs/ptyfs/ptyfs_vfsops.c:1.56 Fri Feb 17 08:31:24 2017
+++ src/sys/fs/ptyfs/ptyfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ptyfs_vfsops.c,v 1.56 2017/02/17 08:31:24 hannken Exp $ */
+/* $NetBSD: ptyfs_vfsops.c,v 1.57 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 1992, 1993, 1995
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ptyfs_vfsops.c,v 1.56 2017/02/17 08:31:24 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ptyfs_vfsops.c,v 1.57 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -388,7 +388,7 @@ ptyfs_unmount(struct mount *mp, int mntf
}
int
-ptyfs_root(struct mount *mp, struct vnode **vpp)
+ptyfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
int error;
@@ -396,7 +396,7 @@ ptyfs_root(struct mount *mp, struct vnod
error = ptyfs_allocvp(mp, vpp, PTYFSroot, 0);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -460,7 +460,7 @@ ptyfs_loadvnode(struct mount *mp, struct
*/
/*ARGSUSED*/
int
-ptyfs_vget(struct mount *mp, ino_t ino,
+ptyfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
return EOPNOTSUPP;
Index: src/sys/fs/puffs/puffs_vfsops.c
diff -u src/sys/fs/puffs/puffs_vfsops.c:1.123 src/sys/fs/puffs/puffs_vfsops.c:1.124
--- src/sys/fs/puffs/puffs_vfsops.c:1.123 Fri Sep 27 22:36:57 2019
+++ src/sys/fs/puffs/puffs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: puffs_vfsops.c,v 1.123 2019/09/27 22:36:57 christos Exp $ */
+/* $NetBSD: puffs_vfsops.c,v 1.124 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2005, 2006 Antti Kantee. All Rights Reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.123 2019/09/27 22:36:57 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vfsops.c,v 1.124 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -452,7 +452,7 @@ puffs_vfsop_unmount(struct mount *mp, in
* This doesn't need to travel to userspace
*/
int
-puffs_vfsop_root(struct mount *mp, struct vnode **vpp)
+puffs_vfsop_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct puffs_mount *pmp = MPTOPUFFSMP(mp);
int rv;
@@ -461,7 +461,7 @@ puffs_vfsop_root(struct mount *mp, struc
KASSERT(rv != PUFFS_NOSUCHCOOKIE);
if (rv != 0)
return rv;
- rv = vn_lock(*vpp, LK_EXCLUSIVE);
+ rv = vn_lock(*vpp, lktype);
if (rv != 0) {
vrele(*vpp);
*vpp = NULL;
@@ -608,7 +608,8 @@ puffs_vfsop_sync(struct mount *mp, int w
}
int
-puffs_vfsop_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+puffs_vfsop_fhtovp(struct mount *mp, struct fid *fhp, int lktype,
+ struct vnode **vpp)
{
PUFFS_MSG_VARS(vfs, fhtonode);
struct puffs_mount *pmp = MPTOPUFFSMP(mp);
@@ -652,7 +653,7 @@ puffs_vfsop_fhtovp(struct mount *mp, str
fhtonode_msg->pvfsr_rdev, &vp);
if (error)
goto out;
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(vp, lktype | LK_RETRY);
*vpp = vp;
out:
Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.106 src/sys/fs/smbfs/smbfs_vfsops.c:1.107
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.106 Sat Apr 1 19:35:56 2017
+++ src/sys/fs/smbfs/smbfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: smbfs_vfsops.c,v 1.106 2017/04/01 19:35:56 riastradh Exp $ */
+/* $NetBSD: smbfs_vfsops.c,v 1.107 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.106 2017/04/01 19:35:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.107 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -305,7 +305,7 @@ smbfs_setroot(struct mount *mp)
* Return locked root vnode of a filesystem.
*/
int
-smbfs_root(struct mount *mp, struct vnode **vpp)
+smbfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct smbmount *smp = VFSTOSMBFS(mp);
int error;
@@ -320,7 +320,7 @@ smbfs_root(struct mount *mp, struct vnod
KASSERT(smp->sm_root != NULL && SMBTOV(smp->sm_root) != NULL);
*vpp = SMBTOV(smp->sm_root);
vref(*vpp);
- error = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+ error = vn_lock(*vpp, lktype | LK_RETRY);
if (error)
vrele(*vpp);
return error;
@@ -446,7 +446,7 @@ smbfs_sync(struct mount *mp, int waitfor
* smbfs flat namespace lookup. Unsupported.
*/
/* ARGSUSED */
-int smbfs_vget(struct mount *mp, ino_t ino,
+int smbfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
return (EOPNOTSUPP);
Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.46 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.47
--- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.46 Fri Jan 2 16:51:02 2015
+++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: sysvbfs_vfsops.c,v 1.46 2015/01/02 16:51:02 hannken Exp $ */
+/* $NetBSD: sysvbfs_vfsops.c,v 1.47 2020/01/17 20:08:08 ad Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vfsops.c,v 1.46 2015/01/02 16:51:02 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vfsops.c,v 1.47 2020/01/17 20:08:08 ad Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -239,13 +239,13 @@ sysvbfs_unmount(struct mount *mp, int mn
}
int
-sysvbfs_root(struct mount *mp, struct vnode **vpp)
+sysvbfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
int error;
DPRINTF("%s:\n", __func__);
- if ((error = VFS_VGET(mp, BFS_ROOT_INODE, &vp)) != 0)
+ if ((error = VFS_VGET(mp, BFS_ROOT_INODE, lktype, &vp)) != 0)
return error;
*vpp = vp;
@@ -362,7 +362,7 @@ sysvbfs_loadvnode(struct mount *mp, stru
}
int
-sysvbfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+sysvbfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
uint16_t number;
@@ -376,7 +376,7 @@ sysvbfs_vget(struct mount *mp, ino_t ino
error = vcache_get(mp, &number, sizeof(number), &vp);
if (error)
return error;
- error = vn_lock(vp, LK_EXCLUSIVE);
+ error = vn_lock(vp, lktype);
if (error) {
vrele(vp);
return error;
@@ -388,7 +388,8 @@ sysvbfs_vget(struct mount *mp, ino_t ino
}
int
-sysvbfs_fhtovp(struct mount *mp, struct fid *fid, struct vnode **vpp)
+sysvbfs_fhtovp(struct mount *mp, struct fid *fid, int lktype,
+ struct vnode **vpp)
{
DPRINTF("%s:\n", __func__);
Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.63 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.64
--- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.63 Fri May 26 14:21:01 2017
+++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: sysvbfs_vnops.c,v 1.63 2017/05/26 14:21:01 riastradh Exp $ */
+/* $NetBSD: sysvbfs_vnops.c,v 1.64 2020/01/17 20:08:08 ad Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.63 2017/05/26 14:21:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.64 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -114,7 +114,9 @@ sysvbfs_lookup(void *arg)
}
/* Allocate v-node */
- if ((error = sysvbfs_vget(v->v_mount, dirent->inode, &vpp)) != 0) {
+ error = sysvbfs_vget(v->v_mount, dirent->inode,
+ LK_EXCLUSIVE, &vpp);
+ if (error != 0) {
DPRINTF("%s: can't get vnode.\n", __func__);
return error;
}
@@ -159,7 +161,8 @@ sysvbfs_create(void *arg)
if (!bfs_dirent_lookup_by_name(bfs, a->a_cnp->cn_nameptr, &dirent))
panic("no dirent for created file.");
- if ((err = sysvbfs_vget(mp, dirent->inode, a->a_vpp)) != 0) {
+ err = sysvbfs_vget(mp, dirent->inode, LK_EXCLUSIVE, a->a_vpp);
+ if (err != 0) {
DPRINTF("%s: sysvbfs_vget failed.\n", __func__);
return err;
}
Index: src/sys/fs/tmpfs/tmpfs_vfsops.c
diff -u src/sys/fs/tmpfs/tmpfs_vfsops.c:1.75 src/sys/fs/tmpfs/tmpfs_vfsops.c:1.76
--- src/sys/fs/tmpfs/tmpfs_vfsops.c:1.75 Fri Oct 4 12:34:40 2019
+++ src/sys/fs/tmpfs/tmpfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: tmpfs_vfsops.c,v 1.75 2019/10/04 12:34:40 mrg Exp $ */
+/* $NetBSD: tmpfs_vfsops.c,v 1.76 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vfsops.c,v 1.75 2019/10/04 12:34:40 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vfsops.c,v 1.76 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -296,7 +296,7 @@ tmpfs_unmount(struct mount *mp, int mntf
}
int
-tmpfs_root(struct mount *mp, vnode_t **vpp)
+tmpfs_root(struct mount *mp, int lktype, vnode_t **vpp)
{
tmpfs_node_t *node = VFS_TO_TMPFS(mp)->tm_root;
int error;
@@ -304,7 +304,7 @@ tmpfs_root(struct mount *mp, vnode_t **v
error = vcache_get(mp, &node, sizeof(node), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -315,14 +315,14 @@ tmpfs_root(struct mount *mp, vnode_t **v
}
int
-tmpfs_vget(struct mount *mp, ino_t ino, vnode_t **vpp)
+tmpfs_vget(struct mount *mp, ino_t ino, int lktype, vnode_t **vpp)
{
return EOPNOTSUPP;
}
int
-tmpfs_fhtovp(struct mount *mp, struct fid *fhp, vnode_t **vpp)
+tmpfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, vnode_t **vpp)
{
tmpfs_mount_t *tmp = VFS_TO_TMPFS(mp);
tmpfs_node_t *node;
@@ -335,6 +335,7 @@ tmpfs_fhtovp(struct mount *mp, struct fi
memcpy(&tfh, fhp, sizeof(tmpfs_fid_t));
mutex_enter(&tmp->tm_lock);
+ /* XXX big oof .. use a better data structure */
LIST_FOREACH(node, &tmp->tm_nodes, tn_entries) {
if (node->tn_id == tfh.tf_id) {
/* Prevent this node from disappearing. */
@@ -354,7 +355,7 @@ tmpfs_fhtovp(struct mount *mp, struct fi
}
if (error)
return (error == ENOENT ? ESTALE : error);
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
Index: src/sys/fs/udf/udf_rename.c
diff -u src/sys/fs/udf/udf_rename.c:1.12 src/sys/fs/udf/udf_rename.c:1.13
--- src/sys/fs/udf/udf_rename.c:1.12 Mon Nov 10 19:44:08 2014
+++ src/sys/fs/udf/udf_rename.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_rename.c,v 1.12 2014/11/10 19:44:08 riz Exp $ */
+/* $NetBSD: udf_rename.c,v 1.13 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2013 Reinoud Zandijk
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udf_rename.c,v 1.12 2014/11/10 19:44:08 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_rename.c,v 1.13 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/errno.h>
@@ -465,7 +465,7 @@ udf_gro_lookup(struct mount *mp, struct
return ENOENT;
DPRINTF(LOOKUP, ("udf_gro_lookup found '%s'\n", name));
- error = udf_get_node(dir_node->ump, &icb_loc, &res_node);
+ error = udf_get_node(dir_node->ump, &icb_loc, &res_node, LK_EXCLUSIVE);
if (error)
return error;
*vp_ret = res_node->vnode;
@@ -598,7 +598,8 @@ udf_gro_genealogy(struct mount *mp, kaut
*/
DPRINTF(NODE, ("\tgetting the parent node\n"));
VOP_UNLOCK(vp);
- error = udf_get_node(ump, &parent_loc, &parent_node);
+ error = udf_get_node(ump, &parent_loc, &parent_node,
+ LK_EXCLUSIVE);
vrele(vp);
if (error)
return error;
Index: src/sys/fs/udf/udf_subr.c
diff -u src/sys/fs/udf/udf_subr.c:1.147 src/sys/fs/udf/udf_subr.c:1.148
--- src/sys/fs/udf/udf_subr.c:1.147 Wed Sep 18 17:59:15 2019
+++ src/sys/fs/udf/udf_subr.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_subr.c,v 1.147 2019/09/18 17:59:15 christos Exp $ */
+/* $NetBSD: udf_subr.c,v 1.148 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.147 2019/09/18 17:59:15 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.148 2020/01/17 20:08:08 ad Exp $");
#endif /* not lint */
@@ -3082,7 +3082,8 @@ udf_search_vat(struct udf_mount *ump, un
icb_loc.loc.part_num = udf_rw16(UDF_VTOP_RAWPART);
icb_loc.loc.lb_num = udf_rw32(vat_loc);
- error = udf_get_node(ump, &icb_loc, &vat_node);
+ error = udf_get_node(ump, &icb_loc, &vat_node,
+ LK_EXCLUSIVE);
if (!error) {
error = udf_check_for_vat(vat_node);
vat_node->i_flags = 0; /* reset access */
@@ -3197,7 +3198,8 @@ udf_read_metadata_nodes(struct udf_mount
DPRINTF(VOLUMES, ("Metadata file\n"));
icb_loc.loc.lb_num = pmm->meta_file_lbn;
- error = udf_get_node(ump, &icb_loc, &ump->metadata_node);
+ error = udf_get_node(ump, &icb_loc, &ump->metadata_node,
+ LK_EXCLUSIVE);
if (ump->metadata_node) {
vp = ump->metadata_node->vnode;
UDF_SET_SYSTEMFILE(vp);
@@ -3206,7 +3208,8 @@ udf_read_metadata_nodes(struct udf_mount
icb_loc.loc.lb_num = pmm->meta_mirror_file_lbn;
if (icb_loc.loc.lb_num != -1) {
DPRINTF(VOLUMES, ("Metadata copy file\n"));
- error = udf_get_node(ump, &icb_loc, &ump->metadatamirror_node);
+ error = udf_get_node(ump, &icb_loc, &ump->metadatamirror_node,
+ LK_EXCLUSIVE);
if (ump->metadatamirror_node) {
vp = ump->metadatamirror_node->vnode;
UDF_SET_SYSTEMFILE(vp);
@@ -3216,7 +3219,8 @@ udf_read_metadata_nodes(struct udf_mount
icb_loc.loc.lb_num = pmm->meta_bitmap_file_lbn;
if (icb_loc.loc.lb_num != -1) {
DPRINTF(VOLUMES, ("Metadata bitmap file\n"));
- error = udf_get_node(ump, &icb_loc, &ump->metadatabitmap_node);
+ error = udf_get_node(ump, &icb_loc, &ump->metadatabitmap_node,
+ LK_EXCLUSIVE);
if (ump->metadatabitmap_node) {
vp = ump->metadatabitmap_node->vnode;
UDF_SET_SYSTEMFILE(vp);
@@ -3397,7 +3401,7 @@ udf_read_rootdirs(struct udf_mount *ump)
/* try to read in the rootdir */
dir_loc = &ump->fileset_desc->rootdir_icb;
- error = udf_get_node(ump, dir_loc, &rootdir_node);
+ error = udf_get_node(ump, dir_loc, &rootdir_node, LK_EXCLUSIVE);
if (error)
return ENOENT;
@@ -3410,7 +3414,8 @@ udf_read_rootdirs(struct udf_mount *ump)
dir_loc = &ump->fileset_desc->streamdir_icb;
if (udf_rw32(dir_loc->len)) {
printf("udf_read_rootdirs: streamdir defined ");
- error = udf_get_node(ump, dir_loc, &streamdir_node);
+ error = udf_get_node(ump, dir_loc, &streamdir_node,
+ LK_EXCLUSIVE);
if (error) {
printf("but error in streamdir reading\n");
} else {
@@ -5625,7 +5630,7 @@ udf_loadvnode(struct mount *mp, struct v
int
udf_get_node(struct udf_mount *ump, struct long_ad *node_icb_loc,
- struct udf_node **udf_noderes)
+ struct udf_node **udf_noderes, int lktype)
{
int error;
struct vnode *vp;
Index: src/sys/fs/udf/udf_subr.h
diff -u src/sys/fs/udf/udf_subr.h:1.20 src/sys/fs/udf/udf_subr.h:1.21
--- src/sys/fs/udf/udf_subr.h:1.20 Tue May 24 09:55:57 2016
+++ src/sys/fs/udf/udf_subr.h Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_subr.h,v 1.20 2016/05/24 09:55:57 reinoud Exp $ */
+/* $NetBSD: udf_subr.h,v 1.21 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -132,7 +132,7 @@ uint64_t udf_advance_uniqueid(struct udf
void udf_lock_node(struct udf_node *udf_node, int flag, char const *fname, const int lineno);
void udf_unlock_node(struct udf_node *udf_node, int flag);
-int udf_get_node(struct udf_mount *ump, struct long_ad *icbloc, struct udf_node **noderes);
+int udf_get_node(struct udf_mount *ump, struct long_ad *icbloc, struct udf_node **noderes, int);
int udf_writeout_node(struct udf_node *udf_node, int waitfor);
int udf_dispose_node(struct udf_node *node);
Index: src/sys/fs/udf/udf_vfsops.c
diff -u src/sys/fs/udf/udf_vfsops.c:1.76 src/sys/fs/udf/udf_vfsops.c:1.77
--- src/sys/fs/udf/udf_vfsops.c:1.76 Sat Jun 24 12:13:16 2017
+++ src/sys/fs/udf/udf_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vfsops.c,v 1.76 2017/06/24 12:13:16 hannken Exp $ */
+/* $NetBSD: udf_vfsops.c,v 1.77 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.76 2017/06/24 12:13:16 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.77 2020/01/17 20:08:08 ad Exp $");
#endif /* not lint */
@@ -744,7 +744,7 @@ udf_start(struct mount *mp, int flags)
/* --------------------------------------------------------------------- */
int
-udf_root(struct mount *mp, struct vnode **vpp)
+udf_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
struct long_ad *dir_loc;
@@ -755,7 +755,7 @@ udf_root(struct mount *mp, struct vnode
DPRINTF(CALL, ("udf_root called\n"));
dir_loc = &ump->fileset_desc->rootdir_icb;
- error = udf_get_node(ump, dir_loc, &root_dir);
+ error = udf_get_node(ump, dir_loc, &root_dir, lktype);
if (error)
return error;
@@ -895,7 +895,7 @@ udf_sync(struct mount *mp, int waitfor,
* (optional) TODO lookup why some sources state NFSv3
*/
int
-udf_vget(struct mount *mp, ino_t ino,
+udf_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
DPRINTF(NOTIMPL, ("udf_vget called\n"));
@@ -908,7 +908,7 @@ udf_vget(struct mount *mp, ino_t ino,
* Lookup vnode for file handle specified
*/
int
-udf_fhtovp(struct mount *mp, struct fid *fhp,
+udf_fhtovp(struct mount *mp, struct fid *fhp, int lktype,
struct vnode **vpp)
{
DPRINTF(NOTIMPL, ("udf_fhtovp called\n"));
Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.107 src/sys/fs/udf/udf_vnops.c:1.108
--- src/sys/fs/udf/udf_vnops.c:1.107 Fri Dec 27 09:41:51 2019
+++ src/sys/fs/udf/udf_vnops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.107 2019/12/27 09:41:51 msaitoh Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.108 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.107 2019/12/27 09:41:51 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.108 2020/01/17 20:08:08 ad Exp $");
#endif /* not lint */
@@ -750,7 +750,8 @@ udf_lookup(void *v)
if (error == 0) {
DPRINTF(LOOKUP, ("\tfound '..'\n"));
/* try to create/reuse the node */
- error = udf_get_node(ump, &icb_loc, &res_node);
+ error = udf_get_node(ump, &icb_loc, &res_node,
+ LK_EXCLUSIVE);
if (!error) {
DPRINTF(LOOKUP,
@@ -802,7 +803,7 @@ udf_lookup(void *v)
*/
/* try to create/reuse the node */
- error = udf_get_node(ump, &icb_loc, &res_node);
+ error = udf_get_node(ump, &icb_loc, &res_node, LK_EXCLUSIVE);
if (error)
goto out;
Index: src/sys/fs/union/union_vfsops.c
diff -u src/sys/fs/union/union_vfsops.c:1.79 src/sys/fs/union/union_vfsops.c:1.80
--- src/sys/fs/union/union_vfsops.c:1.79 Wed Feb 20 10:05:59 2019
+++ src/sys/fs/union/union_vfsops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: union_vfsops.c,v 1.79 2019/02/20 10:05:59 hannken Exp $ */
+/* $NetBSD: union_vfsops.c,v 1.80 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 1994 The Regents of the University of California.
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.79 2019/02/20 10:05:59 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.80 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -391,7 +391,7 @@ union_unmount(struct mount *mp, int mntf
}
int
-union_root(struct mount *mp, struct vnode **vpp)
+union_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct union_mount *um = MOUNTTOUNIONMOUNT(mp);
int error;
@@ -412,7 +412,7 @@ union_root(struct mount *mp, struct vnod
return error;
}
- vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(*vpp, lktype | LK_RETRY);
return 0;
}
@@ -488,7 +488,7 @@ union_sync(struct mount *mp, int waitfor
/*ARGSUSED*/
int
-union_vget(struct mount *mp, ino_t ino,
+union_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.70 src/sys/fs/union/union_vnops.c:1.71
--- src/sys/fs/union/union_vnops.c:1.70 Fri May 26 14:21:01 2017
+++ src/sys/fs/union/union_vnops.c Fri Jan 17 20:08:08 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: union_vnops.c,v 1.70 2017/05/26 14:21:01 riastradh Exp $ */
+/* $NetBSD: union_vnops.c,v 1.71 2020/01/17 20:08:08 ad Exp $ */
/*
* Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.70 2017/05/26 14:21:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.71 2020/01/17 20:08:08 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -253,7 +253,7 @@ union_lookup1(struct vnode *udvp, struct
if (vfs_busy(mp))
continue;
vput(dvp);
- error = VFS_ROOT(mp, &tdvp);
+ error = VFS_ROOT(mp, LK_EXCLUSIVE, &tdvp);
vfs_unbusy(mp);
if (error) {
return (error);
Index: src/sys/fs/unionfs/unionfs_vfsops.c
diff -u src/sys/fs/unionfs/unionfs_vfsops.c:1.13 src/sys/fs/unionfs/unionfs_vfsops.c:1.14
--- src/sys/fs/unionfs/unionfs_vfsops.c:1.13 Wed Apr 16 18:55:19 2014
+++ src/sys/fs/unionfs/unionfs_vfsops.c Fri Jan 17 20:08:08 2020
@@ -353,7 +353,7 @@ unionfs_unmount(struct mount *mp, int mn
}
int
-unionfs_root(struct mount *mp, struct vnode **vpp)
+unionfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct unionfs_mount *ump;
struct vnode *vp;
@@ -365,7 +365,7 @@ unionfs_root(struct mount *mp, struct vn
vp, VOP_ISLOCKED(vp));
vref(vp);
- vn_lock(vp, LK_EXCLUSIVE);
+ vn_lock(vp, lktype);
*vpp = vp;
@@ -442,13 +442,13 @@ unionfs_sync(struct mount *mp, int waitf
}
int
-unionfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+unionfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
return (EOPNOTSUPP);
}
int
-unionfs_fhtovp(struct mount *mp, struct fid *fidp, struct vnode **vpp)
+unionfs_fhtovp(struct mount *mp, struct fid *fidp, int lktype, struct vnode **vpp)
{
return (EOPNOTSUPP);
}
Index: src/sys/fs/v7fs/v7fs_vfsops.c
diff -u src/sys/fs/v7fs/v7fs_vfsops.c:1.16 src/sys/fs/v7fs/v7fs_vfsops.c:1.17
--- src/sys/fs/v7fs/v7fs_vfsops.c:1.16 Thu Jun 1 02:45:13 2017
+++ src/sys/fs/v7fs/v7fs_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vfsops.c,v 1.16 2017/06/01 02:45:13 chs Exp $ */
+/* $NetBSD: v7fs_vfsops.c,v 1.17 2020/01/17 20:08:09 ad Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vfsops.c,v 1.16 2017/06/01 02:45:13 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vfsops.c,v 1.17 2020/01/17 20:08:09 ad Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -321,13 +321,13 @@ v7fs_unmount(struct mount *mp, int mntfl
}
int
-v7fs_root(struct mount *mp, struct vnode **vpp)
+v7fs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
int error;
DPRINTF("\n");
- if ((error = VFS_VGET(mp, V7FS_ROOT_INODE, &vp)) != 0) {
+ if ((error = VFS_VGET(mp, V7FS_ROOT_INODE, lktype, &vp)) != 0) {
DPRINTF("error=%d\n", error);
return error;
}
@@ -482,7 +482,7 @@ v7fs_loadvnode(struct mount *mp, struct
int
-v7fs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+v7fs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
v7fs_ino_t number;
@@ -494,7 +494,7 @@ v7fs_vget(struct mount *mp, ino_t ino, s
error = vcache_get(mp, &number, sizeof(number), &vp);
if (error)
return error;
- error = vn_lock(vp, LK_EXCLUSIVE);
+ error = vn_lock(vp, lktype);
if (error) {
vrele(vp);
return error;
@@ -506,7 +506,7 @@ v7fs_vget(struct mount *mp, ino_t ino, s
}
int
-v7fs_fhtovp(struct mount *mp, struct fid *fid, struct vnode **vpp)
+v7fs_fhtovp(struct mount *mp, struct fid *fid, int lktype, struct vnode **vpp)
{
DPRINTF("\n");
Index: src/sys/fs/v7fs/v7fs_vnops.c
diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.26 src/sys/fs/v7fs/v7fs_vnops.c:1.27
--- src/sys/fs/v7fs/v7fs_vnops.c:1.26 Fri May 26 14:21:01 2017
+++ src/sys/fs/v7fs/v7fs_vnops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vnops.c,v 1.26 2017/05/26 14:21:01 riastradh Exp $ */
+/* $NetBSD: v7fs_vnops.c,v 1.27 2020/01/17 20:08:09 ad Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.26 2017/05/26 14:21:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.27 2020/01/17 20:08:09 ad Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -174,7 +174,8 @@ v7fs_lookup(void *v)
VOP_UNLOCK(dvp); /* preserve reference count. (not vput) */
}
DPRINTF("enter vget\n");
- if ((error = v7fs_vget(dvp->v_mount, ino, &vpp))) {
+ error = v7fs_vget(dvp->v_mount, ino, LK_EXCLUSIVE, &vpp);
+ if (error != 0) {
DPRINTF("***can't get vnode.\n");
return error;
}
@@ -230,7 +231,8 @@ v7fs_create(void *v)
/* Get myself vnode. */
*a->a_vpp = 0;
- if ((error = v7fs_vget(mp, ino, a->a_vpp))) {
+ error = v7fs_vget(mp, ino, LK_EXCLUSIVE, a->a_vpp);
+ if (error != 0) {
DPRINTF("v7fs_vget failed.\n");
return error;
}
@@ -284,7 +286,8 @@ v7fs_mknod(void *v)
/* Sync dirent size change. */
uvm_vnp_setsize(dvp, v7fs_inode_filesize(&parent_node->inode));
- if ((error = v7fs_vget(mp, ino, a->a_vpp))) {
+ error = v7fs_vget(mp, ino, LK_EXCLUSIVE, a->a_vpp);
+ if (error != 0) {
DPRINTF("can't get vnode.\n");
return error;
}
@@ -847,7 +850,8 @@ v7fs_mkdir(void *v)
/* Sync dirent size change. */
uvm_vnp_setsize(dvp, v7fs_inode_filesize(&parent_node->inode));
- if ((error = v7fs_vget(mp, ino, a->a_vpp))) {
+ error = v7fs_vget(mp, ino, LK_EXCLUSIVE, a->a_vpp);
+ if (error != 0) {
DPRINTF("can't get vnode.\n");
}
struct v7fs_node *newnode = (*a->a_vpp)->v_data;
@@ -1287,7 +1291,8 @@ v7fs_symlink(void *v)
uvm_vnp_setsize(a->a_dvp, v7fs_inode_filesize(&parent_node->inode));
/* Get myself vnode. */
- if ((error = v7fs_vget(v7fsmount->mountp, ino, a->a_vpp))) {
+ error = v7fs_vget(v7fsmount->mountp, ino, LK_EXCLUSIVE, a->a_vpp);
+ if (error != 0) {
DPRINTF("can't get vnode.\n");
}
Index: src/sys/kern/vfs_lookup.c
diff -u src/sys/kern/vfs_lookup.c:1.212 src/sys/kern/vfs_lookup.c:1.213
--- src/sys/kern/vfs_lookup.c:1.212 Thu Jul 18 09:39:40 2019
+++ src/sys/kern/vfs_lookup.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_lookup.c,v 1.212 2019/07/18 09:39:40 hannken Exp $ */
+/* $NetBSD: vfs_lookup.c,v 1.213 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_lookup.c,v 1.212 2019/07/18 09:39:40 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_lookup.c,v 1.213 2020/01/17 20:08:09 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_magiclinks.h"
@@ -1124,7 +1124,7 @@ unionlookup:
VOP_UNLOCK(searchdir);
}
vput(foundobj);
- error = VFS_ROOT(mp, &foundobj);
+ error = VFS_ROOT(mp, LK_EXCLUSIVE, &foundobj);
vfs_unbusy(mp);
if (error) {
if (searchdir != NULL) {
Index: src/sys/kern/vfs_mount.c
diff -u src/sys/kern/vfs_mount.c:1.73 src/sys/kern/vfs_mount.c:1.74
--- src/sys/kern/vfs_mount.c:1.73 Sun Dec 22 19:47:34 2019
+++ src/sys/kern/vfs_mount.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_mount.c,v 1.73 2019/12/22 19:47:34 ad Exp $ */
+/* $NetBSD: vfs_mount.c,v 1.74 2020/01/17 20:08:09 ad Exp $ */
/*-
* Copyright (c) 1997-2019 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.73 2019/12/22 19:47:34 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.74 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -653,7 +653,7 @@ mount_checkdirs(vnode_t *olddp)
if (olddp->v_usecount == 1) {
return;
}
- if (VFS_ROOT(olddp->v_mountedhere, &newdp))
+ if (VFS_ROOT(olddp->v_mountedhere, LK_EXCLUSIVE, &newdp))
panic("mount: lost mount");
do {
@@ -1241,7 +1241,7 @@ done:
* Get the vnode for '/'. Set cwdi0.cwdi_cdir to
* reference it.
*/
- error = VFS_ROOT(mp, &rootvnode);
+ error = VFS_ROOT(mp, LK_SHARED, &rootvnode);
if (error)
panic("cannot find root vnode, error=%d", error);
cwdi0.cwdi_cdir = rootvnode;
Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.478 src/sys/kern/vfs_subr.c:1.479
--- src/sys/kern/vfs_subr.c:1.478 Sun Dec 22 19:47:34 2019
+++ src/sys/kern/vfs_subr.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_subr.c,v 1.478 2019/12/22 19:47:34 ad Exp $ */
+/* $NetBSD: vfs_subr.c,v 1.479 2020/01/17 20:08:09 ad Exp $ */
/*-
* Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008, 2019
@@ -69,7 +69,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.478 2019/12/22 19:47:34 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.479 2020/01/17 20:08:09 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@@ -1350,14 +1350,14 @@ VFS_UNMOUNT(struct mount *mp, int a)
}
int
-VFS_ROOT(struct mount *mp, struct vnode **a)
+VFS_ROOT(struct mount *mp, int lktype, struct vnode **a)
{
int error;
if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
KERNEL_LOCK(1, NULL);
}
- error = (*(mp->mnt_op->vfs_root))(mp, a);
+ error = (*(mp->mnt_op->vfs_root))(mp, lktype, a);
if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
KERNEL_UNLOCK_ONE(NULL);
}
@@ -1414,14 +1414,14 @@ VFS_SYNC(struct mount *mp, int a, struct
}
int
-VFS_FHTOVP(struct mount *mp, struct fid *a, struct vnode **b)
+VFS_FHTOVP(struct mount *mp, struct fid *a, int b, struct vnode **c)
{
int error;
if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
KERNEL_LOCK(1, NULL);
}
- error = (*(mp->mnt_op->vfs_fhtovp))(mp, a, b);
+ error = (*(mp->mnt_op->vfs_fhtovp))(mp, a, b, c);
if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
KERNEL_UNLOCK_ONE(NULL);
}
Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.539 src/sys/kern/vfs_syscalls.c:1.540
--- src/sys/kern/vfs_syscalls.c:1.539 Tue Dec 31 11:49:08 2019
+++ src/sys/kern/vfs_syscalls.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.c,v 1.539 2019/12/31 11:49:08 ad Exp $ */
+/* $NetBSD: vfs_syscalls.c,v 1.540 2020/01/17 20:08:09 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 2019/12/31 11:49:08 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.540 2020/01/17 20:08:09 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_fileassoc.h"
@@ -1358,7 +1358,7 @@ sys_fchdir(struct lwp *l, const struct s
vput(vp);
if (error != 0)
goto out;
- error = VFS_ROOT(mp, &tdp);
+ error = VFS_ROOT(mp, LK_SHARED, &tdp);
vfs_unbusy(mp);
if (error)
goto out;
@@ -1405,7 +1405,7 @@ sys_fchroot(struct lwp *l, const struct
if ((error = fd_getvnode(fd, &fp)) != 0)
return error;
vp = fp->f_vnode;
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(vp, LK_SHARED | LK_RETRY);
if (vp->v_type != VDIR)
error = ENOTDIR;
else
@@ -1831,7 +1831,7 @@ vfs_fhtovp(fhandle_t *fhp, struct vnode
error = EOPNOTSUPP;
goto out;
}
- error = VFS_FHTOVP(mp, FHANDLE_FILEID(fhp), vpp);
+ error = VFS_FHTOVP(mp, FHANDLE_FILEID(fhp), LK_EXCLUSIVE, vpp);
out:
return error;
}
Index: src/sys/miscfs/fdesc/fdesc.h
diff -u src/sys/miscfs/fdesc/fdesc.h:1.22 src/sys/miscfs/fdesc/fdesc.h:1.23
--- src/sys/miscfs/fdesc/fdesc.h:1.22 Sun Jul 13 11:23:01 2014
+++ src/sys/miscfs/fdesc/fdesc.h Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: fdesc.h,v 1.22 2014/07/13 11:23:01 hannken Exp $ */
+/* $NetBSD: fdesc.h,v 1.23 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -70,7 +70,7 @@ struct fdescnode {
extern dev_t devctty;
extern void fdesc_init(void);
extern void fdesc_done(void);
-extern int fdesc_root(struct mount *, struct vnode **);
+extern int fdesc_root(struct mount *, int, struct vnode **);
extern int fdesc_allocvp(fdntype, int, struct mount *, struct vnode **);
extern int (**fdesc_vnodeop_p)(void *);
extern struct vfsops fdesc_vfsops;
Index: src/sys/miscfs/fdesc/fdesc_vfsops.c
diff -u src/sys/miscfs/fdesc/fdesc_vfsops.c:1.92 src/sys/miscfs/fdesc/fdesc_vfsops.c:1.93
--- src/sys/miscfs/fdesc/fdesc_vfsops.c:1.92 Fri Feb 17 08:31:25 2017
+++ src/sys/miscfs/fdesc/fdesc_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: fdesc_vfsops.c,v 1.92 2017/02/17 08:31:25 hannken Exp $ */
+/* $NetBSD: fdesc_vfsops.c,v 1.93 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1992, 1993, 1995
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.92 2017/02/17 08:31:25 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.93 2020/01/17 20:08:09 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -136,7 +136,7 @@ fdesc_unmount(struct mount *mp, int mntf
}
int
-fdesc_root(struct mount *mp, struct vnode **vpp)
+fdesc_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
@@ -145,7 +145,7 @@ fdesc_root(struct mount *mp, struct vnod
*/
vp = mp->mnt_data;
vref(vp);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(vp, lktype | LK_RETRY);
*vpp = vp;
return (0);
}
@@ -164,7 +164,7 @@ fdesc_sync(struct mount *mp, int waitfor
* Currently unsupported.
*/
int
-fdesc_vget(struct mount *mp, ino_t ino,
+fdesc_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
Index: src/sys/miscfs/genfs/layer_extern.h
diff -u src/sys/miscfs/genfs/layer_extern.h:1.40 src/sys/miscfs/genfs/layer_extern.h:1.41
--- src/sys/miscfs/genfs/layer_extern.h:1.40 Sun Jun 4 08:02:26 2017
+++ src/sys/miscfs/genfs/layer_extern.h Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: layer_extern.h,v 1.40 2017/06/04 08:02:26 hannken Exp $ */
+/* $NetBSD: layer_extern.h,v 1.41 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1999 National Aeronautics & Space Administration
@@ -80,14 +80,14 @@ int layer_node_create(struct mount *, st
/* VFS routines */
int layerfs_start(struct mount *, int);
-int layerfs_root(struct mount *, struct vnode **);
+int layerfs_root(struct mount *, int, struct vnode **);
int layerfs_quotactl(struct mount *, struct quotactl_args *);
int layerfs_statvfs(struct mount *, struct statvfs *);
int layerfs_sync(struct mount *, int, struct kauth_cred *);
int layerfs_loadvnode(struct mount *, struct vnode *,
const void *, size_t, const void **);
-int layerfs_vget(struct mount *, ino_t, struct vnode **);
-int layerfs_fhtovp(struct mount *, struct fid *, struct vnode **);
+int layerfs_vget(struct mount *, ino_t, int, struct vnode **);
+int layerfs_fhtovp(struct mount *, struct fid *, int, struct vnode **);
int layerfs_vptofh(struct vnode *, struct fid *, size_t *);
int layerfs_snapshot(struct mount *, struct vnode *, struct timespec *);
int layerfs_suspendctl(struct mount *, int);
Index: src/sys/miscfs/genfs/layer_vfsops.c
diff -u src/sys/miscfs/genfs/layer_vfsops.c:1.52 src/sys/miscfs/genfs/layer_vfsops.c:1.53
--- src/sys/miscfs/genfs/layer_vfsops.c:1.52 Wed Aug 7 00:38:02 2019
+++ src/sys/miscfs/genfs/layer_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: layer_vfsops.c,v 1.52 2019/08/07 00:38:02 pgoyette Exp $ */
+/* $NetBSD: layer_vfsops.c,v 1.53 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1999 National Aeronautics & Space Administration
@@ -74,7 +74,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.52 2019/08/07 00:38:02 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.53 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/sysctl.h>
@@ -125,7 +125,7 @@ layerfs_start(struct mount *mp, int flag
}
int
-layerfs_root(struct mount *mp, struct vnode **vpp)
+layerfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
@@ -138,7 +138,7 @@ layerfs_root(struct mount *mp, struct vn
* Return root vnode with locked and with a reference held.
*/
vref(vp);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(vp, lktype | LK_RETRY);
*vpp = vp;
return 0;
}
@@ -227,12 +227,12 @@ layerfs_loadvnode(struct mount *mp, stru
}
int
-layerfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+layerfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
struct vnode *vp;
int error;
- error = VFS_VGET(mp->mnt_lower, ino, &vp);
+ error = VFS_VGET(mp->mnt_lower, ino, lktype, &vp);
if (error) {
*vpp = NULL;
return error;
@@ -244,7 +244,7 @@ layerfs_vget(struct mount *mp, ino_t ino
*vpp = NULL;
return error;
}
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -254,12 +254,13 @@ layerfs_vget(struct mount *mp, ino_t ino
}
int
-layerfs_fhtovp(struct mount *mp, struct fid *fidp, struct vnode **vpp)
+layerfs_fhtovp(struct mount *mp, struct fid *fidp, int lktype,
+ struct vnode **vpp)
{
struct vnode *vp;
int error;
- error = VFS_FHTOVP(mp->mnt_lower, fidp, &vp);
+ error = VFS_FHTOVP(mp->mnt_lower, fidp, lktype, &vp);
if (error) {
*vpp = NULL;
return error;
@@ -271,7 +272,7 @@ layerfs_fhtovp(struct mount *mp, struct
*vpp = NULL;
return (error);
}
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
Index: src/sys/miscfs/kernfs/kernfs.h
diff -u src/sys/miscfs/kernfs/kernfs.h:1.41 src/sys/miscfs/kernfs/kernfs.h:1.42
--- src/sys/miscfs/kernfs/kernfs.h:1.41 Thu Jan 2 15:42:27 2020
+++ src/sys/miscfs/kernfs/kernfs.h Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: kernfs.h,v 1.41 2020/01/02 15:42:27 thorpej Exp $ */
+/* $NetBSD: kernfs.h,v 1.42 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -126,7 +126,7 @@ extern struct vfsops kernfs_vfsops;
extern dev_t rrootdev;
extern kmutex_t kfs_lock;
-int kernfs_root(struct mount *, struct vnode **);
+int kernfs_root(struct mount *, int, struct vnode **);
/*
* Data types for the kernfs file operations.
Index: src/sys/miscfs/kernfs/kernfs_vfsops.c
diff -u src/sys/miscfs/kernfs/kernfs_vfsops.c:1.96 src/sys/miscfs/kernfs/kernfs_vfsops.c:1.97
--- src/sys/miscfs/kernfs/kernfs_vfsops.c:1.96 Fri Feb 17 08:31:25 2017
+++ src/sys/miscfs/kernfs/kernfs_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: kernfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $ */
+/* $NetBSD: kernfs_vfsops.c,v 1.97 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1992, 1993, 1995
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vfsops.c,v 1.96 2017/02/17 08:31:25 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vfsops.c,v 1.97 2020/01/17 20:08:09 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -189,7 +189,7 @@ kernfs_unmount(struct mount *mp, int mnt
}
int
-kernfs_root(struct mount *mp, struct vnode **vpp)
+kernfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
const struct kern_target *root_target = &kern_targets[0];
int error;
@@ -198,7 +198,7 @@ kernfs_root(struct mount *mp, struct vno
error = vcache_get(mp, &root_target, sizeof(root_target), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -221,7 +221,7 @@ kernfs_sync(struct mount *mp, int waitfo
* Currently unsupported.
*/
int
-kernfs_vget(struct mount *mp, ino_t ino,
+kernfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
Index: src/sys/miscfs/procfs/procfs.h
diff -u src/sys/miscfs/procfs/procfs.h:1.77 src/sys/miscfs/procfs/procfs.h:1.78
--- src/sys/miscfs/procfs/procfs.h:1.77 Thu Sep 26 17:33:18 2019
+++ src/sys/miscfs/procfs/procfs.h Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs.h,v 1.77 2019/09/26 17:33:18 christos Exp $ */
+/* $NetBSD: procfs.h,v 1.78 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1993
@@ -276,7 +276,7 @@ int procfs_getcpuinfstr(char *, size_t *
extern int (**procfs_vnodeop_p)(void *);
extern struct vfsops procfs_vfsops;
-int procfs_root(struct mount *, struct vnode **);
+int procfs_root(struct mount *, int, struct vnode **);
#ifdef __HAVE_PROCFS_MACHDEP
struct vattr;
Index: src/sys/miscfs/procfs/procfs_vfsops.c
diff -u src/sys/miscfs/procfs/procfs_vfsops.c:1.101 src/sys/miscfs/procfs/procfs_vfsops.c:1.102
--- src/sys/miscfs/procfs/procfs_vfsops.c:1.101 Sat Mar 30 23:28:30 2019
+++ src/sys/miscfs/procfs/procfs_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs_vfsops.c,v 1.101 2019/03/30 23:28:30 christos Exp $ */
+/* $NetBSD: procfs_vfsops.c,v 1.102 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1993
@@ -76,7 +76,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.101 2019/03/30 23:28:30 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.102 2020/01/17 20:08:09 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -201,13 +201,13 @@ procfs_unmount(struct mount *mp, int mnt
}
int
-procfs_root(struct mount *mp, struct vnode **vpp)
+procfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
int error;
error = procfs_allocvp(mp, vpp, 0, PFSroot, -1);
if (error == 0) {
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error != 0) {
vrele(*vpp);
*vpp = NULL;
@@ -258,7 +258,7 @@ procfs_sync(
/*ARGSUSED*/
int
-procfs_vget(struct mount *mp, ino_t ino,
+procfs_vget(struct mount *mp, ino_t ino, int lktype,
struct vnode **vpp)
{
return (EOPNOTSUPP);
Index: src/sys/nfs/nfs_export.c
diff -u src/sys/nfs/nfs_export.c:1.61 src/sys/nfs/nfs_export.c:1.62
--- src/sys/nfs/nfs_export.c:1.61 Sun Dec 22 19:47:34 2019
+++ src/sys/nfs/nfs_export.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_export.c,v 1.61 2019/12/22 19:47:34 ad Exp $ */
+/* $NetBSD: nfs_export.c,v 1.62 2020/01/17 20:08:09 ad Exp $ */
/*-
* Copyright (c) 1997, 1998, 2004, 2005, 2008, 2019 The NetBSD Foundation, Inc.
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_export.c,v 1.61 2019/12/22 19:47:34 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_export.c,v 1.62 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -770,7 +770,7 @@ setpublicfs(struct mount *mp, struct net
/*
* Get real filehandle for root of exported FS.
*/
- if ((error = VFS_ROOT(mp, &rvp)))
+ if ((error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp)))
return error;
fhsize = 0;
Index: src/sys/nfs/nfs_serv.c
diff -u src/sys/nfs/nfs_serv.c:1.178 src/sys/nfs/nfs_serv.c:1.179
--- src/sys/nfs/nfs_serv.c:1.178 Thu Jan 2 15:42:27 2020
+++ src/sys/nfs/nfs_serv.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_serv.c,v 1.178 2020/01/02 15:42:27 thorpej Exp $ */
+/* $NetBSD: nfs_serv.c,v 1.179 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.178 2020/01/02 15:42:27 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.179 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -3056,7 +3056,8 @@ again:
* even be here otherwise.
*/
if (!getret) {
- if ((getret = VFS_VGET(vp->v_mount, at.va_fileid, &nvp)))
+ if ((getret = VFS_VGET(vp->v_mount, at.va_fileid,
+ LK_EXCLUSIVE, &nvp)))
getret = (getret == EOPNOTSUPP) ?
NFSERR_NOTSUPP : NFSERR_IO;
else
@@ -3144,7 +3145,8 @@ again:
* For readdir_and_lookup get the vnode using
* the file number.
*/
- if (VFS_VGET(vp->v_mount, dp->d_fileno, &nvp))
+ if (VFS_VGET(vp->v_mount, dp->d_fileno, LK_EXCLUSIVE,
+ &nvp))
goto invalid;
if (nfsrv_composefh(nvp, &nnsfh, true)) {
vput(nvp);
Index: src/sys/nfs/nfs_srvsubs.c
diff -u src/sys/nfs/nfs_srvsubs.c:1.14 src/sys/nfs/nfs_srvsubs.c:1.15
--- src/sys/nfs/nfs_srvsubs.c:1.14 Mon Nov 5 19:06:27 2012
+++ src/sys/nfs/nfs_srvsubs.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_srvsubs.c,v 1.14 2012/11/05 19:06:27 dholland Exp $ */
+/* $NetBSD: nfs_srvsubs.c,v 1.15 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_srvsubs.c,v 1.14 2012/11/05 19:06:27 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_srvsubs.c,v 1.15 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -311,7 +311,7 @@ nfsrv_fhtovp(nfsrvfh_t *nsfh, int lockfl
return error;
}
- error = VFS_FHTOVP(mp, &fhp->fh_fid, vpp);
+ error = VFS_FHTOVP(mp, &fhp->fh_fid, LK_EXCLUSIVE, vpp);
if (error)
return (error);
Index: src/sys/nfs/nfs_vfsops.c
diff -u src/sys/nfs/nfs_vfsops.c:1.237 src/sys/nfs/nfs_vfsops.c:1.238
--- src/sys/nfs/nfs_vfsops.c:1.237 Mon Sep 3 16:29:36 2018
+++ src/sys/nfs/nfs_vfsops.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_vfsops.c,v 1.237 2018/09/03 16:29:36 riastradh Exp $ */
+/* $NetBSD: nfs_vfsops.c,v 1.238 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 1989, 1993, 1995
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.237 2018/09/03 16:29:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.238 2020/01/17 20:08:09 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_nfs.h"
@@ -937,7 +937,7 @@ err:
* Return root of a filesystem
*/
int
-nfs_root(struct mount *mp, struct vnode **vpp)
+nfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
struct nfsmount *nmp;
@@ -946,7 +946,7 @@ nfs_root(struct mount *mp, struct vnode
nmp = VFSTONFS(mp);
vp = nmp->nm_vnode;
vref(vp);
- error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ error = vn_lock(vp, lktype | LK_RETRY);
if (error != 0) {
vrele(vp);
return error;
@@ -1005,7 +1005,7 @@ nfs_sync(struct mount *mp, int waitfor,
*/
/* ARGSUSED */
int
-nfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+nfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
return (EOPNOTSUPP);
@@ -1070,7 +1070,7 @@ nfs_sysctl_fini(void)
/* ARGSUSED */
int
-nfs_fhtovp(struct mount *mp, struct fid *fid, struct vnode **vpp)
+nfs_fhtovp(struct mount *mp, struct fid *fid, int lktype, struct vnode **vpp)
{
size_t fidsize;
size_t fhsize;
@@ -1095,6 +1095,7 @@ nfs_fhtovp(struct mount *mp, struct fid
return EINVAL;
}
}
+ /* XXX lktype ignored */
error = nfs_nget(mp, (void *)fid->fid_data, fhsize, &np);
if (error) {
return error;
Index: src/sys/rump/librump/rumpvfs/rump_vfs.c
diff -u src/sys/rump/librump/rumpvfs/rump_vfs.c:1.88 src/sys/rump/librump/rumpvfs/rump_vfs.c:1.89
--- src/sys/rump/librump/rumpvfs/rump_vfs.c:1.88 Wed Feb 20 10:07:27 2019
+++ src/sys/rump/librump/rumpvfs/rump_vfs.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: rump_vfs.c,v 1.88 2019/02/20 10:07:27 hannken Exp $ */
+/* $NetBSD: rump_vfs.c,v 1.89 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 2008 Antti Kantee. All Rights Reserved.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.88 2019/02/20 10:07:27 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.89 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -411,7 +411,7 @@ rump_vfs_root(struct mount *mp, struct v
{
int rv;
- rv = VFS_ROOT(mp, vpp);
+ rv = VFS_ROOT(mp, LK_EXCLUSIVE, vpp);
if (rv)
return rv;
@@ -439,7 +439,7 @@ int
rump_vfs_fhtovp(struct mount *mp, struct fid *fid, struct vnode **vpp)
{
- return VFS_FHTOVP(mp, fid, vpp);
+ return VFS_FHTOVP(mp, fid, LK_EXCLUSIVE, vpp);
}
int
Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.153 src/sys/rump/librump/rumpvfs/rumpfs.c:1.154
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.153 Mon Jun 4 02:29:53 2018
+++ src/sys/rump/librump/rumpvfs/rumpfs.c Fri Jan 17 20:08:09 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpfs.c,v 1.153 2018/06/04 02:29:53 chs Exp $ */
+/* $NetBSD: rumpfs.c,v 1.154 2020/01/17 20:08:09 ad Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.153 2018/06/04 02:29:53 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.154 2020/01/17 20:08:09 ad Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -1917,18 +1917,18 @@ rumpfs_unmount(struct mount *mp, int mnt
}
int
-rumpfs_root(struct mount *mp, struct vnode **vpp)
+rumpfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct rumpfs_mount *rfsmp = mp->mnt_data;
vref(rfsmp->rfsmp_rvp);
- vn_lock(rfsmp->rfsmp_rvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(rfsmp->rfsmp_rvp, lktype | LK_RETRY);
*vpp = rfsmp->rfsmp_rvp;
return 0;
}
int
-rumpfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+rumpfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
return EOPNOTSUPP;
Index: src/sys/sys/mount.h
diff -u src/sys/sys/mount.h:1.235 src/sys/sys/mount.h:1.236
--- src/sys/sys/mount.h:1.235 Sun Dec 22 19:47:34 2019
+++ src/sys/sys/mount.h Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: mount.h,v 1.235 2019/12/22 19:47:34 ad Exp $ */
+/* $NetBSD: mount.h,v 1.236 2020/01/17 20:08:10 ad Exp $ */
/*
* Copyright (c) 1989, 1991, 1993
@@ -190,17 +190,17 @@ struct vfsops {
size_t *);
int (*vfs_start) (struct mount *, int);
int (*vfs_unmount) (struct mount *, int);
- int (*vfs_root) (struct mount *, struct vnode **);
+ int (*vfs_root) (struct mount *, int, struct vnode **);
int (*vfs_quotactl) (struct mount *, struct quotactl_args *);
int (*vfs_statvfs) (struct mount *, struct statvfs *);
int (*vfs_sync) (struct mount *, int, struct kauth_cred *);
- int (*vfs_vget) (struct mount *, ino_t, struct vnode **);
+ int (*vfs_vget) (struct mount *, ino_t, int, struct vnode **);
int (*vfs_loadvnode) (struct mount *, struct vnode *,
const void *, size_t, const void **);
int (*vfs_newvnode) (struct mount *, struct vnode *, struct vnode *,
struct vattr *, kauth_cred_t, void *,
size_t *, const void **);
- int (*vfs_fhtovp) (struct mount *, struct fid *,
+ int (*vfs_fhtovp) (struct mount *, struct fid *, int,
struct vnode **);
int (*vfs_vptofh) (struct vnode *, struct fid *, size_t *);
void (*vfs_init) (void);
@@ -221,7 +221,7 @@ struct vfsops {
};
/* XXX vget is actually file system internal. */
-#define VFS_VGET(MP, INO, VPP) (*(MP)->mnt_op->vfs_vget)(MP, INO, VPP)
+#define VFS_VGET(MP, INO, LK, VPP) (*(MP)->mnt_op->vfs_vget)(MP, INO, LK, VPP)
#define VFS_LOADVNODE(MP, VP, KEY, KEY_LEN, NEW_KEY) \
(*(MP)->mnt_op->vfs_loadvnode)(MP, VP, KEY, KEY_LEN, NEW_KEY)
#define VFS_NEWVNODE(MP, DVP, VP, VAP, CRED, EXTRA, NEW_LEN, NEW_KEY) \
@@ -235,11 +235,11 @@ struct vfsops {
int VFS_MOUNT(struct mount *, const char *, void *, size_t *);
int VFS_START(struct mount *, int);
int VFS_UNMOUNT(struct mount *, int);
-int VFS_ROOT(struct mount *, struct vnode **);
+int VFS_ROOT(struct mount *, int, struct vnode **);
int VFS_QUOTACTL(struct mount *, struct quotactl_args *);
int VFS_STATVFS(struct mount *, struct statvfs *);
int VFS_SYNC(struct mount *, int, struct kauth_cred *);
-int VFS_FHTOVP(struct mount *, struct fid *, struct vnode **);
+int VFS_FHTOVP(struct mount *, struct fid *, int, struct vnode **);
int VFS_VPTOFH(struct vnode *, struct fid *, size_t *);
int VFS_SNAPSHOT(struct mount *, struct vnode *, struct timespec *);
int VFS_EXTATTRCTL(struct mount *, int, struct vnode *, int, const char *);
@@ -255,17 +255,17 @@ int fsname##_mount(struct mount *, const
size_t *); \
int fsname##_start(struct mount *, int); \
int fsname##_unmount(struct mount *, int); \
-int fsname##_root(struct mount *, struct vnode **); \
+int fsname##_root(struct mount *, int, struct vnode **); \
int fsname##_quotactl(struct mount *, struct quotactl_args *); \
int fsname##_statvfs(struct mount *, struct statvfs *); \
int fsname##_sync(struct mount *, int, struct kauth_cred *); \
-int fsname##_vget(struct mount *, ino_t, struct vnode **); \
+int fsname##_vget(struct mount *, ino_t, int, struct vnode **); \
int fsname##_loadvnode(struct mount *, struct vnode *, \
const void *, size_t, const void **); \
int fsname##_newvnode(struct mount *, struct vnode *, \
struct vnode *, struct vattr *, kauth_cred_t, void *, \
size_t *, const void **); \
-int fsname##_fhtovp(struct mount *, struct fid *, struct vnode **); \
+int fsname##_fhtovp(struct mount *, struct fid *, int, struct vnode **);\
int fsname##_vptofh(struct vnode *, struct fid *, size_t *); \
void fsname##_init(void); \
void fsname##_reinit(void); \
Index: src/sys/ufs/chfs/chfs_vfsops.c
diff -u src/sys/ufs/chfs/chfs_vfsops.c:1.20 src/sys/ufs/chfs/chfs_vfsops.c:1.21
--- src/sys/ufs/chfs/chfs_vfsops.c:1.20 Fri Dec 27 09:25:58 2019
+++ src/sys/ufs/chfs/chfs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_vfsops.c,v 1.20 2019/12/27 09:25:58 msaitoh Exp $ */
+/* $NetBSD: chfs_vfsops.c,v 1.21 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -67,11 +67,11 @@
static int chfs_mount(struct mount *, const char *, void *, size_t *);
static int chfs_unmount(struct mount *, int);
-static int chfs_root(struct mount *, struct vnode **);
+static int chfs_root(struct mount *, int, struct vnode **);
static int chfs_loadvnode(struct mount *, struct vnode *,
const void *, size_t, const void **);
-static int chfs_vget(struct mount *, ino_t, struct vnode **);
-static int chfs_fhtovp(struct mount *, struct fid *, struct vnode **);
+static int chfs_vget(struct mount *, ino_t, int, struct vnode **);
+static int chfs_fhtovp(struct mount *, struct fid *, int, struct vnode **);
static int chfs_vptofh(struct vnode *, struct fid *, size_t *);
static int chfs_start(struct mount *, int);
static int chfs_statvfs(struct mount *, struct statvfs *);
@@ -338,7 +338,7 @@ chfs_mountfs(struct vnode *devvp, struct
ump->um_maxfilesize = 1048512 * 1024;
/* Allocate the root vnode. */
- err = VFS_VGET(mp, CHFS_ROOTINO, &vp);
+ err = VFS_VGET(mp, CHFS_ROOTINO, LK_EXCLUSIVE, &vp);
if (err) {
dbg("error: %d while allocating root node\n", err);
return err;
@@ -449,12 +449,12 @@ chfs_unmount(struct mount *mp, int mntfl
/* --------------------------------------------------------------------- */
static int
-chfs_root(struct mount *mp, struct vnode **vpp)
+chfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *vp;
int error;
- if ((error = VFS_VGET(mp, (ino_t)UFS_ROOTINO, &vp)) != 0)
+ if ((error = VFS_VGET(mp, (ino_t)UFS_ROOTINO, lktype, &vp)) != 0)
return error;
*vpp = vp;
return 0;
@@ -656,7 +656,7 @@ chfs_loadvnode(struct mount *mp, struct
/* --------------------------------------------------------------------- */
static int
-chfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+chfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
@@ -664,7 +664,7 @@ chfs_vget(struct mount *mp, ino_t ino, s
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -678,7 +678,7 @@ chfs_vget(struct mount *mp, ino_t ino, s
static int
-chfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+chfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
return ENODEV;
}
Index: src/sys/ufs/chfs/chfs_vnode.c
diff -u src/sys/ufs/chfs/chfs_vnode.c:1.17 src/sys/ufs/chfs/chfs_vnode.c:1.18
--- src/sys/ufs/chfs/chfs_vnode.c:1.17 Wed Sep 18 18:46:00 2019
+++ src/sys/ufs/chfs/chfs_vnode.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_vnode.c,v 1.17 2019/09/18 18:46:00 christos Exp $ */
+/* $NetBSD: chfs_vnode.c,v 1.18 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -210,7 +210,7 @@ chfs_makeinode(int mode, struct vnode *d
/* number of vnode will be the new maximum */
vno = ++(chmp->chm_max_vno);
- error = VFS_VGET(dvp->v_mount, vno, &vp);
+ error = VFS_VGET(dvp->v_mount, vno, LK_EXCLUSIVE, &vp);
if (error)
return (error);
Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.34 src/sys/ufs/chfs/chfs_vnops.c:1.35
--- src/sys/ufs/chfs/chfs_vnops.c:1.34 Mon Jun 17 17:14:56 2019
+++ src/sys/ufs/chfs/chfs_vnops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_vnops.c,v 1.34 2019/06/17 17:14:56 ryoon Exp $ */
+/* $NetBSD: chfs_vnops.c,v 1.35 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -106,7 +106,8 @@ chfs_lookup(void *v)
if (cnp->cn_flags & ISDOTDOT) {
VOP_UNLOCK(dvp);
- error = VFS_VGET(dvp->v_mount, ip->chvc->pvno, vpp);
+ error = VFS_VGET(dvp->v_mount, ip->chvc->pvno, LK_EXCLUSIVE,
+ vpp);
vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
} else if (cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.') {
vref(dvp);
@@ -147,7 +148,8 @@ chfs_lookup(void *v)
dbg("vno@allocating new vnode: %llu\n",
(unsigned long long)fd->vno);
- error = VFS_VGET(dvp->v_mount, fd->vno, vpp);
+ error = VFS_VGET(dvp->v_mount, fd->vno, LK_EXCLUSIVE,
+ vpp);
}
}
/* Store the result of this lookup in the cache. Avoid this if the
@@ -1140,7 +1142,7 @@ chfs_rename(void *v)
newparent, tcnp->cn_nameptr, tcnp->cn_namelen);
vput(tvp);
}
- VFS_VGET(tdvp->v_mount, old->ino, &tvp);
+ VFS_VGET(tdvp->v_mount, old->ino, LK_EXCLUSIVE, &tvp);
ip = VTOI(tvp);
/* link new */
Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.214 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.215
--- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.214 Thu Jun 20 03:31:30 2019
+++ src/sys/ufs/ext2fs/ext2fs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_vfsops.c,v 1.214 2019/06/20 03:31:30 pgoyette Exp $ */
+/* $NetBSD: ext2fs_vfsops.c,v 1.215 2020/01/17 20:08:10 ad Exp $ */
/*
* Copyright (c) 1989, 1991, 1993, 1994
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.214 2019/06/20 03:31:30 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.215 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -1186,7 +1186,7 @@ ext2fs_newvnode(struct mount *mp, struct
* - check for an unallocated inode (i_mode == 0)
*/
int
-ext2fs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+ext2fs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct inode *ip;
struct vnode *nvp;
@@ -1203,7 +1203,7 @@ ext2fs_fhtovp(struct mount *mp, struct f
ufh.ufid_ino >= fs->e2fs_ncg * fs->e2fs.e2fs_ipg)
return ESTALE;
- if ((error = VFS_VGET(mp, ufh.ufid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ufh.ufid_ino, lktype, &nvp)) != 0) {
*vpp = NULLVP;
return error;
}
Index: src/sys/ufs/ffs/ffs_quota2.c
diff -u src/sys/ufs/ffs/ffs_quota2.c:1.6 src/sys/ufs/ffs/ffs_quota2.c:1.7
--- src/sys/ufs/ffs/ffs_quota2.c:1.6 Thu Jul 7 06:55:44 2016
+++ src/sys/ufs/ffs/ffs_quota2.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_quota2.c,v 1.6 2016/07/07 06:55:44 msaitoh Exp $ */
+/* $NetBSD: ffs_quota2.c,v 1.7 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2010 Manuel Bouyer
* All rights reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_quota2.c,v 1.6 2016/07/07 06:55:44 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_quota2.c,v 1.7 2020/01/17 20:08:10 ad Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -78,7 +78,8 @@ ffs_quota2_mount(struct mount *mp)
if (fs->fs_quota_flags & FS_Q2_DO_TYPE(USRQUOTA) &&
ump->um_quotas[USRQUOTA] == NULLVP) {
- error = VFS_VGET(mp, fs->fs_quotafile[USRQUOTA], &vp);
+ error = VFS_VGET(mp, fs->fs_quotafile[USRQUOTA],
+ LK_EXCLUSIVE, &vp);
if (error) {
printf("%s: can't vget() user quota inode: %d\n",
mp->mnt_stat.f_mntonname, error);
@@ -93,7 +94,8 @@ ffs_quota2_mount(struct mount *mp)
}
if (fs->fs_quota_flags & FS_Q2_DO_TYPE(GRPQUOTA) &&
ump->um_quotas[GRPQUOTA] == NULLVP) {
- error = VFS_VGET(mp, fs->fs_quotafile[GRPQUOTA], &vp);
+ error = VFS_VGET(mp, fs->fs_quotafile[GRPQUOTA],
+ LK_EXCLUSIVE, &vp);
if (error) {
vn_close(ump->um_quotas[USRQUOTA],
FREAD|FWRITE, l->l_cred);
Index: src/sys/ufs/ffs/ffs_snapshot.c
diff -u src/sys/ufs/ffs/ffs_snapshot.c:1.149 src/sys/ufs/ffs/ffs_snapshot.c:1.150
--- src/sys/ufs/ffs/ffs_snapshot.c:1.149 Thu Jun 1 02:45:15 2017
+++ src/sys/ufs/ffs/ffs_snapshot.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_snapshot.c,v 1.149 2017/06/01 02:45:15 chs Exp $ */
+/* $NetBSD: ffs_snapshot.c,v 1.150 2020/01/17 20:08:10 ad Exp $ */
/*
* Copyright 2000 Marshall Kirk McKusick. All Rights Reserved.
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.149 2017/06/01 02:45:15 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.150 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -677,8 +677,8 @@ snapshot_expunge(struct mount *mp, struc
*/
if ((fs->fs_flags & FS_DOWAPBL) &&
fs->fs_journal_location == UFS_WAPBL_JOURNALLOC_IN_FILESYSTEM) {
- error = VFS_VGET(mp,
- fs->fs_journallocs[UFS_WAPBL_INFS_INO], &logvp);
+ error = VFS_VGET(mp, fs->fs_journallocs[UFS_WAPBL_INFS_INO],
+ LK_EXCLUSIVE, &logvp);
if (error)
goto out;
}
@@ -1766,7 +1766,7 @@ ffs_snapshot_mount(struct mount *mp)
if (fs->fs_snapinum[snaploc] == 0)
break;
if ((error = VFS_VGET(mp, fs->fs_snapinum[snaploc],
- &vp)) != 0) {
+ LK_EXCLUSIVE, &vp)) != 0) {
printf("ffs_snapshot_mount: vget failed %d\n", error);
continue;
}
Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.362 src/sys/ufs/ffs/ffs_vfsops.c:1.363
--- src/sys/ufs/ffs/ffs_vfsops.c:1.362 Thu Jun 20 03:31:30 2019
+++ src/sys/ufs/ffs/ffs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_vfsops.c,v 1.362 2019/06/20 03:31:30 pgoyette Exp $ */
+/* $NetBSD: ffs_vfsops.c,v 1.363 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.362 2019/06/20 03:31:30 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.363 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -2218,7 +2218,7 @@ ffs_newvnode(struct mount *mp, struct vn
* those rights via. exflagsp and credanonp
*/
int
-ffs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+ffs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct ufid ufh;
int error;
@@ -2230,7 +2230,7 @@ ffs_fhtovp(struct mount *mp, struct fid
if ((error = ffs_checkrange(mp, ufh.ufid_ino)) != 0)
return error;
- return (ufs_fhtovp(mp, &ufh, vpp));
+ return (ufs_fhtovp(mp, &ufh, lktype, vpp));
}
/*
Index: src/sys/ufs/ffs/ffs_wapbl.c
diff -u src/sys/ufs/ffs/ffs_wapbl.c:1.44 src/sys/ufs/ffs/ffs_wapbl.c:1.45
--- src/sys/ufs/ffs/ffs_wapbl.c:1.44 Tue Jan 1 10:06:55 2019
+++ src/sys/ufs/ffs/ffs_wapbl.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_wapbl.c,v 1.44 2019/01/01 10:06:55 hannken Exp $ */
+/* $NetBSD: ffs_wapbl.c,v 1.45 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 2003,2006,2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_wapbl.c,v 1.44 2019/01/01 10:06:55 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_wapbl.c,v 1.45 2020/01/17 20:08:10 ad Exp $");
#define WAPBL_INTERNAL
@@ -124,7 +124,8 @@ ffs_wapbl_replay_finish(struct mount *mp
for (i = 0; i < wr->wr_inodescnt; i++) {
struct vnode *vp;
struct inode *ip;
- error = VFS_VGET(mp, wr->wr_inodes[i].wr_inumber, &vp);
+ error = VFS_VGET(mp, wr->wr_inodes[i].wr_inumber,
+ LK_EXCLUSIVE, &vp);
if (error) {
printf("%s: %s: unable to cleanup inode %" PRIu32 "\n",
__func__, VFSTOUFS(mp)->um_fs->fs_fsmnt,
@@ -254,7 +255,7 @@ wapbl_remove_log(struct mount *mp)
/* if no existing log inode, just clear all fields and bail */
if (log_ino == 0)
goto done;
- error = VFS_VGET(mp, log_ino, &vp);
+ error = VFS_VGET(mp, log_ino, LK_EXCLUSIVE, &vp);
if (error != 0) {
printf("%s: %s: vget failed %d\n", __func__,
fs->fs_fsmnt, error);
@@ -651,7 +652,7 @@ wapbl_create_infs_log(struct mount *mp,
struct inode *ip;
int error;
- if ((error = VFS_ROOT(mp, &rvp)) != 0)
+ if ((error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp)) != 0)
return error;
vattr_null(&va);
Index: src/sys/ufs/lfs/lfs_alloc.c
diff -u src/sys/ufs/lfs/lfs_alloc.c:1.137 src/sys/ufs/lfs/lfs_alloc.c:1.138
--- src/sys/ufs/lfs/lfs_alloc.c:1.137 Sat Aug 19 11:27:42 2017
+++ src/sys/ufs/lfs/lfs_alloc.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_alloc.c,v 1.137 2017/08/19 11:27:42 maya Exp $ */
+/* $NetBSD: lfs_alloc.c,v 1.138 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_alloc.c,v 1.137 2017/08/19 11:27:42 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_alloc.c,v 1.138 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_quota.h"
@@ -758,7 +758,8 @@ lfs_order_freelist(struct lfs *fs)
* happens to such files currently. -- dholland 20160806
*/
if (lfs_if_getnextfree(fs, ifp) == LFS_ORPHAN_NEXTFREE &&
- VFS_VGET(fs->lfs_ivnode->v_mount, ino, &vp) == 0) {
+ VFS_VGET(fs->lfs_ivnode->v_mount, ino, LK_EXCLUSIVE, &vp)
+ == 0) {
unsigned segno;
/* get the segment the inode in on disk */
Index: src/sys/ufs/lfs/lfs_rfw.c
diff -u src/sys/ufs/lfs/lfs_rfw.c:1.34 src/sys/ufs/lfs/lfs_rfw.c:1.35
--- src/sys/ufs/lfs/lfs_rfw.c:1.34 Tue Jan 1 10:06:55 2019
+++ src/sys/ufs/lfs/lfs_rfw.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_rfw.c,v 1.34 2019/01/01 10:06:55 hannken Exp $ */
+/* $NetBSD: lfs_rfw.c,v 1.35 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_rfw.c,v 1.34 2019/01/01 10:06:55 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_rfw.c,v 1.35 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_quota.h"
@@ -113,7 +113,7 @@ lfs_rf_valloc(struct lfs *fs, ino_t ino,
* we don't have to do anything else. If the version number is wrong,
* take appropriate action.
*/
- error = VFS_VGET(fs->lfs_ivnode->v_mount, ino, &vp);
+ error = VFS_VGET(fs->lfs_ivnode->v_mount, ino, LK_EXCLUSIVE, &vp);
if (error == 0) {
DLOG((DLOG_RF, "lfs_rf_valloc[1]: ino %d vp %p\n", ino, vp));
Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.368 src/sys/ufs/lfs/lfs_vfsops.c:1.369
--- src/sys/ufs/lfs/lfs_vfsops.c:1.368 Wed Jan 15 17:55:44 2020
+++ src/sys/ufs/lfs/lfs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_vfsops.c,v 1.368 2020/01/15 17:55:44 ad Exp $ */
+/* $NetBSD: lfs_vfsops.c,v 1.369 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.368 2020/01/15 17:55:44 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.369 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_lfs.h"
@@ -1162,7 +1162,7 @@ lfs_mountfs(struct vnode *devvp, struct
* artificially increment the reference count and keep a pointer
* to it in the incore copy of the superblock.
*/
- if ((error = VFS_VGET(mp, LFS_IFILE_INUM, &vp)) != 0) {
+ if ((error = VFS_VGET(mp, LFS_IFILE_INUM, LK_EXCLUSIVE, &vp)) != 0) {
DLOG((DLOG_MOUNT, "lfs_mountfs: ifile vget failed, error=%d\n", error));
goto out;
}
@@ -1531,14 +1531,14 @@ lfs_sync(struct mount *mp, int waitfor,
* Detection and handling of mount points must be done by the calling routine.
*/
int
-lfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+lfs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -1854,7 +1854,7 @@ lfs_newvnode(struct mount *mp, struct vn
* File handle to vnode
*/
int
-lfs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
+lfs_fhtovp(struct mount *mp, struct fid *fhp, int lktype, struct vnode **vpp)
{
struct lfid lfh;
struct lfs *fs;
@@ -1875,7 +1875,7 @@ lfs_fhtovp(struct mount *mp, struct fid
lfs_sb_getcleansz(fs) - lfs_sb_getsegtabsz(fs)) * lfs_sb_getifpb(fs))
return ESTALE;
- return (ulfs_fhtovp(mp, &lfh.lfid_ufid, vpp));
+ return (ulfs_fhtovp(mp, &lfh.lfid_ufid, lktype, vpp));
}
/*
Index: src/sys/ufs/lfs/ulfs_extattr.c
diff -u src/sys/ufs/lfs/ulfs_extattr.c:1.14 src/sys/ufs/lfs/ulfs_extattr.c:1.15
--- src/sys/ufs/lfs/ulfs_extattr.c:1.14 Wed Nov 9 05:44:42 2016
+++ src/sys/ufs/lfs/ulfs_extattr.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_extattr.c,v 1.14 2016/11/09 05:44:42 dholland Exp $ */
+/* $NetBSD: ulfs_extattr.c,v 1.15 2020/01/17 20:08:10 ad Exp $ */
/* from NetBSD: ulfs_extattr.c,v 1.48 2016/11/09 05:08:35 dholland Exp */
/*-
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.14 2016/11/09 05:44:42 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.15 2020/01/17 20:08:10 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_lfs.h"
@@ -675,7 +675,7 @@ ulfs_extattr_autostart(struct mount *mp,
* Does ULFS_EXTATTR_FSROOTSUBDIR exist off the filesystem root?
* If so, automatically start EA's.
*/
- error = VFS_ROOT(mp, &rvp);
+ error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp);
if (error) {
printf("ulfs_extattr_autostart.VFS_ROOT() returned %d\n",
error);
Index: src/sys/ufs/lfs/ulfs_extern.h
diff -u src/sys/ufs/lfs/ulfs_extern.h:1.24 src/sys/ufs/lfs/ulfs_extern.h:1.25
--- src/sys/ufs/lfs/ulfs_extern.h:1.24 Mon Jun 20 03:36:09 2016
+++ src/sys/ufs/lfs/ulfs_extern.h Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_extern.h,v 1.24 2016/06/20 03:36:09 dholland Exp $ */
+/* $NetBSD: ulfs_extern.h,v 1.25 2020/01/17 20:08:10 ad Exp $ */
/* from NetBSD: ufs_extern.h,v 1.79 2015/03/27 17:27:56 riastradh Exp */
/*-
@@ -147,9 +147,9 @@ void ulfs_init(void);
void ulfs_reinit(void);
void ulfs_done(void);
int ulfs_start(struct mount *, int);
-int ulfs_root(struct mount *, struct vnode **);
+int ulfs_root(struct mount *, int, struct vnode **);
int ulfs_quotactl(struct mount *, struct quotactl_args *);
-int ulfs_fhtovp(struct mount *, struct ulfs_ufid *, struct vnode **);
+int ulfs_fhtovp(struct mount *, struct ulfs_ufid *, int, struct vnode **);
/* ulfs_vnops.c */
void ulfs_vinit(struct mount *, int (**)(void *),
Index: src/sys/ufs/lfs/ulfs_quota2.c
diff -u src/sys/ufs/lfs/ulfs_quota2.c:1.31 src/sys/ufs/lfs/ulfs_quota2.c:1.32
--- src/sys/ufs/lfs/ulfs_quota2.c:1.31 Sat Jun 10 05:29:36 2017
+++ src/sys/ufs/lfs/ulfs_quota2.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_quota2.c,v 1.31 2017/06/10 05:29:36 maya Exp $ */
+/* $NetBSD: ulfs_quota2.c,v 1.32 2020/01/17 20:08:10 ad Exp $ */
/* from NetBSD: ufs_quota2.c,v 1.40 2015/03/28 19:24:05 maxv Exp Exp */
/* from NetBSD: ffs_quota2.c,v 1.5 2015/02/22 14:12:48 maxv Exp */
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_quota2.c,v 1.31 2017/06/10 05:29:36 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_quota2.c,v 1.32 2020/01/17 20:08:10 ad Exp $");
#include <sys/buf.h>
#include <sys/param.h>
@@ -1598,7 +1598,8 @@ lfs_quota2_mount(struct mount *mp)
if (fs->lfs_quota_flags & FS_Q2_DO_TYPE(ULFS_USRQUOTA) &&
ump->um_quotas[ULFS_USRQUOTA] == NULLVP) {
- error = VFS_VGET(mp, fs->lfs_quotaino[ULFS_USRQUOTA], &vp);
+ error = VFS_VGET(mp, fs->lfs_quotaino[ULFS_USRQUOTA],
+ LK_EXCLUSIVE, &vp);
if (error) {
printf("%s: can't vget() user quota inode: %d\n",
mp->mnt_stat.f_mntonname, error);
@@ -1613,7 +1614,8 @@ lfs_quota2_mount(struct mount *mp)
}
if (fs->lfs_quota_flags & FS_Q2_DO_TYPE(ULFS_GRPQUOTA) &&
ump->um_quotas[ULFS_GRPQUOTA] == NULLVP) {
- error = VFS_VGET(mp, fs->lfs_quotaino[ULFS_GRPQUOTA], &vp);
+ error = VFS_VGET(mp, fs->lfs_quotaino[ULFS_GRPQUOTA],
+ LK_EXCLUSIVE, &vp);
if (error) {
vn_close(ump->um_quotas[ULFS_USRQUOTA],
FREAD|FWRITE, l->l_cred);
Index: src/sys/ufs/lfs/ulfs_vfsops.c
diff -u src/sys/ufs/lfs/ulfs_vfsops.c:1.15 src/sys/ufs/lfs/ulfs_vfsops.c:1.16
--- src/sys/ufs/lfs/ulfs_vfsops.c:1.15 Sun Dec 22 19:47:35 2019
+++ src/sys/ufs/lfs/ulfs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_vfsops.c,v 1.15 2019/12/22 19:47:35 ad Exp $ */
+/* $NetBSD: ulfs_vfsops.c,v 1.16 2020/01/17 20:08:10 ad Exp $ */
/* from NetBSD: ufs_vfsops.c,v 1.54 2015/03/17 09:39:29 hannken Exp */
/*
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_vfsops.c,v 1.15 2019/12/22 19:47:35 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_vfsops.c,v 1.16 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_lfs.h"
@@ -85,12 +85,12 @@ ulfs_start(struct mount *mp, int flags)
* Return the root of a filesystem.
*/
int
-ulfs_root(struct mount *mp, struct vnode **vpp)
+ulfs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error;
- if ((error = VFS_VGET(mp, (ino_t)ULFS_ROOTINO, &nvp)) != 0)
+ if ((error = VFS_VGET(mp, (ino_t)ULFS_ROOTINO, lktype, &nvp)) != 0)
return (error);
*vpp = nvp;
return (0);
@@ -212,13 +212,14 @@ ulfs_quotactl(struct mount *mp, struct q
* filesystem has validated the file handle.
*/
int
-ulfs_fhtovp(struct mount *mp, struct ulfs_ufid *ufhp, struct vnode **vpp)
+ulfs_fhtovp(struct mount *mp, struct ulfs_ufid *ufhp, int lktype,
+ struct vnode **vpp)
{
struct vnode *nvp;
struct inode *ip;
int error;
- if ((error = VFS_VGET(mp, ufhp->ufid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ufhp->ufid_ino, lktype, &nvp)) != 0) {
if (error == ENOENT)
error = ESTALE;
*vpp = NULLVP;
Index: src/sys/ufs/ufs/ufs_extattr.c
diff -u src/sys/ufs/ufs/ufs_extattr.c:1.50 src/sys/ufs/ufs/ufs_extattr.c:1.51
--- src/sys/ufs/ufs/ufs_extattr.c:1.50 Mon Aug 19 14:09:12 2019
+++ src/sys/ufs/ufs/ufs_extattr.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_extattr.c,v 1.50 2019/08/19 14:09:12 christos Exp $ */
+/* $NetBSD: ufs_extattr.c,v 1.51 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.50 2019/08/19 14:09:12 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.51 2020/01/17 20:08:10 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_ffs.h"
@@ -694,7 +694,7 @@ ufs_extattr_autostart(struct mount *mp,
* Does UFS_EXTATTR_FSROOTSUBDIR exist off the filesystem root?
* If so, automatically start EA's.
*/
- error = VFS_ROOT(mp, &rvp);
+ error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp);
if (error) {
printf("%s: VFS_ROOT() (%d)\n", __func__, error);
return error;
Index: src/sys/ufs/ufs/ufs_extern.h
diff -u src/sys/ufs/ufs/ufs_extern.h:1.83 src/sys/ufs/ufs/ufs_extern.h:1.84
--- src/sys/ufs/ufs/ufs_extern.h:1.83 Fri Oct 28 20:38:12 2016
+++ src/sys/ufs/ufs/ufs_extern.h Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_extern.h,v 1.83 2016/10/28 20:38:12 jdolecek Exp $ */
+/* $NetBSD: ufs_extern.h,v 1.84 2020/01/17 20:08:10 ad Exp $ */
/*-
* Copyright (c) 1991, 1993, 1994
@@ -176,10 +176,10 @@ void ufs_init(void);
void ufs_reinit(void);
void ufs_done(void);
int ufs_start(struct mount *, int);
-int ufs_root(struct mount *, struct vnode **);
-int ufs_vget(struct mount *, ino_t, struct vnode **);
+int ufs_root(struct mount *, int, struct vnode **);
+int ufs_vget(struct mount *, ino_t, int, struct vnode **);
int ufs_quotactl(struct mount *, struct quotactl_args *);
-int ufs_fhtovp(struct mount *, struct ufid *, struct vnode **);
+int ufs_fhtovp(struct mount *, struct ufid *, int, struct vnode **);
/* ufs_vnops.c */
void ufs_vinit(struct mount *, int (**)(void *),
Index: src/sys/ufs/ufs/ufs_vfsops.c
diff -u src/sys/ufs/ufs/ufs_vfsops.c:1.58 src/sys/ufs/ufs/ufs_vfsops.c:1.59
--- src/sys/ufs/ufs/ufs_vfsops.c:1.58 Sun Dec 22 19:47:35 2019
+++ src/sys/ufs/ufs/ufs_vfsops.c Fri Jan 17 20:08:10 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_vfsops.c,v 1.58 2019/12/22 19:47:35 ad Exp $ */
+/* $NetBSD: ufs_vfsops.c,v 1.59 2020/01/17 20:08:10 ad Exp $ */
/*
* Copyright (c) 1991, 1993, 1994
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_vfsops.c,v 1.58 2019/12/22 19:47:35 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_vfsops.c,v 1.59 2020/01/17 20:08:10 ad Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -86,12 +86,12 @@ ufs_start(struct mount *mp, int flags)
* Return the root of a filesystem.
*/
int
-ufs_root(struct mount *mp, struct vnode **vpp)
+ufs_root(struct mount *mp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
int error;
- if ((error = VFS_VGET(mp, (ino_t)UFS_ROOTINO, &nvp)) != 0)
+ if ((error = VFS_VGET(mp, (ino_t)UFS_ROOTINO, lktype, &nvp)) != 0)
return (error);
*vpp = nvp;
return (0);
@@ -101,14 +101,14 @@ ufs_root(struct mount *mp, struct vnode
* Look up and return a vnode/inode pair by inode number.
*/
int
-ufs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
+ufs_vget(struct mount *mp, ino_t ino, int lktype, struct vnode **vpp)
{
int error;
error = vcache_get(mp, &ino, sizeof(ino), vpp);
if (error)
return error;
- error = vn_lock(*vpp, LK_EXCLUSIVE);
+ error = vn_lock(*vpp, lktype);
if (error) {
vrele(*vpp);
*vpp = NULL;
@@ -233,13 +233,13 @@ ufs_quotactl(struct mount *mp, struct qu
* filesystem has validated the file handle.
*/
int
-ufs_fhtovp(struct mount *mp, struct ufid *ufhp, struct vnode **vpp)
+ufs_fhtovp(struct mount *mp, struct ufid *ufhp, int lktype, struct vnode **vpp)
{
struct vnode *nvp;
struct inode *ip;
int error;
- if ((error = VFS_VGET(mp, ufhp->ufid_ino, &nvp)) != 0) {
+ if ((error = VFS_VGET(mp, ufhp->ufid_ino, lktype, &nvp)) != 0) {
if (error == ENOENT)
error = ESTALE;
*vpp = NULLVP;