summaryrefslogtreecommitdiffstats
path: root/sys/fs/smbfs/smbfs_vfsops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/smbfs/smbfs_vfsops.c')
-rw-r--r--sys/fs/smbfs/smbfs_vfsops.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/fs/smbfs/smbfs_vfsops.c b/sys/fs/smbfs/smbfs_vfsops.c
index 2c847c3..8dba8c8 100644
--- a/sys/fs/smbfs/smbfs_vfsops.c
+++ b/sys/fs/smbfs/smbfs_vfsops.c
@@ -209,7 +209,7 @@ smbfs_mount(struct mount *mp, char *path, caddr_t data,
if (error)
goto bad;
VOP_UNLOCK(vp, 0, td);
- SMBVDEBUG("root.v_usecount = %d\n", vp->v_usecount);
+ SMBVDEBUG("root.v_usecount = %d\n", vrefcnt(vp));
#ifdef DIAGNOSTICS
SMBERROR("mp=%p\n", mp);
@@ -426,14 +426,17 @@ loop:
*/
if (vp->v_mount != mp)
goto loop;
+ VI_LOCK(vp);
#ifndef FB_RELENG3
if (VOP_ISLOCKED(vp, NULL) || TAILQ_EMPTY(&vp->v_dirtyblkhd) ||
#else
if (VOP_ISLOCKED(vp) || TAILQ_EMPTY(&vp->v_dirtyblkhd) ||
#endif
- waitfor == MNT_LAZY)
+ waitfor == MNT_LAZY) {
+ VI_UNLOCK(vp);
continue;
- if (vget(vp, LK_EXCLUSIVE, td))
+ }
+ if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK, td))
goto loop;
error = VOP_FSYNC(vp, cred, waitfor, td);
if (error)
OpenPOWER on IntegriCloud