summaryrefslogtreecommitdiffstats
path: root/sys/fs/ntfs/ntfs_vfsops.c
diff options
context:
space:
mode:
authorssouhlal <ssouhlal@FreeBSD.org>2005-09-02 15:27:23 +0000
committerssouhlal <ssouhlal@FreeBSD.org>2005-09-02 15:27:23 +0000
commitf8217f350bcfc82b94c814a04faf8cdd5326d033 (patch)
tree6d3fd63626ff1d58add99ac395ebda844196e694 /sys/fs/ntfs/ntfs_vfsops.c
parent912d183e0b4eff2d1cfeacc98dc5720f1461a947 (diff)
downloadFreeBSD-src-f8217f350bcfc82b94c814a04faf8cdd5326d033.zip
FreeBSD-src-f8217f350bcfc82b94c814a04faf8cdd5326d033.tar.gz
*_mountfs() (if the filesystem mounts from a device) needs devvp to be
locked, so lock it. Glanced at by: phk MFC after: 3 days
Diffstat (limited to 'sys/fs/ntfs/ntfs_vfsops.c')
-rw-r--r--sys/fs/ntfs/ntfs_vfsops.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/sys/fs/ntfs/ntfs_vfsops.c b/sys/fs/ntfs/ntfs_vfsops.c
index 1aae24a..5180d83 100644
--- a/sys/fs/ntfs/ntfs_vfsops.c
+++ b/sys/fs/ntfs/ntfs_vfsops.c
@@ -191,7 +191,7 @@ ntfs_mount (
* Not an update, or updating the name: look up the name
* and verify that it refers to a sensible block device.
*/
- NDINIT(&ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, from, td);
+ NDINIT(&ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, from, td);
err = namei(&ndp);
if (err) {
/* can't get devvp!*/
@@ -200,8 +200,11 @@ ntfs_mount (
NDFREE(&ndp, NDF_ONLY_PNBUF);
devvp = ndp.ni_vp;
- if (!vn_isdisk(devvp, &err))
- goto error_2;
+ if (!vn_isdisk(devvp, &err)) {
+ vput(devvp);
+ return (err);
+ }
+
if (mp->mnt_flag & MNT_UPDATE) {
#if 0
/*
@@ -212,8 +215,9 @@ ntfs_mount (
if (devvp != ntmp->um_devvp)
err = EINVAL; /* needs translation */
- else
- vrele(devvp);
+ vput(devvp);
+ if (err)
+ return (err);
#endif
} else {
/*
@@ -237,17 +241,12 @@ ntfs_mount (
err = ntfs_mountfs(devvp, mp, td);
}
if (err) {
- goto error_2;
+ vrele(devvp);
+ return (err);
}
goto success;
-
-error_2: /* error with devvp held*/
-
- /* release devvp before failing*/
- vrele(devvp);
-
error_1: /* no state to back out*/
/* XXX: missing NDFREE(&ndp, ...) */
OpenPOWER on IntegriCloud