svn commit: r344153 - stable/12/sys/fs/nullfs
Konstantin Belousov
kib at FreeBSD.org
Fri Feb 15 11:19:13 UTC 2019
Author: kib
Date: Fri Feb 15 11:19:12 2019
New Revision: 344153
URL: https://svnweb.freebsd.org/changeset/base/344153
Log:
MFC r343897, r343898:
Some style for nullfs_mount().
Before using VTONULL(), check that the covered vnode belongs to nullfs.
Modified:
stable/12/sys/fs/nullfs/null_vfsops.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/fs/nullfs/null_vfsops.c
==============================================================================
--- stable/12/sys/fs/nullfs/null_vfsops.c Fri Feb 15 11:13:39 2019 (r344152)
+++ stable/12/sys/fs/nullfs/null_vfsops.c Fri Feb 15 11:19:12 2019 (r344153)
@@ -74,13 +74,14 @@ static vfs_extattrctl_t nullfs_extattrctl;
static int
nullfs_mount(struct mount *mp)
{
- int error = 0;
struct vnode *lowerrootvp, *vp;
struct vnode *nullm_rootvp;
struct null_mount *xmp;
+ struct null_node *nn;
+ struct nameidata nd, *ndp;
char *target;
- int isvnunlocked = 0, len;
- struct nameidata nd, *ndp = &nd;
+ int error, len;
+ bool isvnunlocked;
NULLFSDEBUG("nullfs_mount(mp = %p)\n", (void *)mp);
@@ -110,14 +111,18 @@ nullfs_mount(struct mount *mp)
/*
* Unlock lower node to avoid possible deadlock.
*/
- if ((mp->mnt_vnodecovered->v_op == &null_vnodeops) &&
+ if (mp->mnt_vnodecovered->v_op == &null_vnodeops &&
VOP_ISLOCKED(mp->mnt_vnodecovered) == LK_EXCLUSIVE) {
VOP_UNLOCK(mp->mnt_vnodecovered, 0);
- isvnunlocked = 1;
+ isvnunlocked = true;
+ } else {
+ isvnunlocked = false;
}
+
/*
* Find lower node
*/
+ ndp = &nd;
NDINIT(ndp, LOOKUP, FOLLOW|LOCKLEAF, UIO_SYSSPACE, target, curthread);
error = namei(ndp);
@@ -140,10 +145,13 @@ nullfs_mount(struct mount *mp)
/*
* Check multi null mount to avoid `lock against myself' panic.
*/
- if (lowerrootvp == VTONULL(mp->mnt_vnodecovered)->null_lowervp) {
- NULLFSDEBUG("nullfs_mount: multi null mount?\n");
- vput(lowerrootvp);
- return (EDEADLK);
+ if (mp->mnt_vnodecovered->v_op == &null_vnodeops) {
+ nn = VTONULL(mp->mnt_vnodecovered);
+ if (nn == NULL || lowerrootvp == nn->null_lowervp) {
+ NULLFSDEBUG("nullfs_mount: multi null mount?\n");
+ vput(lowerrootvp);
+ return (EDEADLK);
+ }
}
xmp = (struct null_mount *) malloc(sizeof(struct null_mount),
More information about the svn-src-all
mailing list