summaryrefslogtreecommitdiff
path: root/sys/gnu
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2005-09-30 06:26:42 +0000
committerXin LI <delphij@FreeBSD.org>2005-09-30 06:26:42 +0000
commit3bd2cc9dc53287f92b30e0a0867ad4e4f7875905 (patch)
tree017ea165718beea2893a0f1a5f72b67322046cda /sys/gnu
parent7d15289b58a1d354fc9d316e584575da7fe3de6f (diff)
Notes
Diffstat (limited to 'sys/gnu')
-rw-r--r--sys/gnu/fs/ext2fs/ext2_vfsops.c15
-rw-r--r--sys/gnu/fs/reiserfs/reiserfs_vfsops.c10
2 files changed, 11 insertions, 14 deletions
diff --git a/sys/gnu/fs/ext2fs/ext2_vfsops.c b/sys/gnu/fs/ext2fs/ext2_vfsops.c
index de198ce70669..b801b974c759 100644
--- a/sys/gnu/fs/ext2fs/ext2_vfsops.c
+++ b/sys/gnu/fs/ext2fs/ext2_vfsops.c
@@ -248,14 +248,14 @@ ext2_mount(mp, td)
*/
if (fspec == NULL)
return (EINVAL);
- NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, fspec, td);
+ NDINIT(ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, fspec, td);
if ((error = namei(ndp)) != 0)
return (error);
NDFREE(ndp, NDF_ONLY_PNBUF);
devvp = ndp->ni_vp;
if (!vn_isdisk(devvp, &error)) {
- vrele(devvp);
+ vput(devvp);
return (error);
}
@@ -267,21 +267,20 @@ ext2_mount(mp, td)
accessmode = VREAD;
if ((mp->mnt_flag & MNT_RDONLY) == 0)
accessmode |= VWRITE;
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
if ((error = VOP_ACCESS(devvp, accessmode, td->td_ucred, td)) != 0) {
vput(devvp);
return (error);
}
- VOP_UNLOCK(devvp, 0, td);
}
if ((mp->mnt_flag & MNT_UPDATE) == 0) {
error = ext2_mountfs(devvp, mp, td);
} else {
- if (devvp != ump->um_devvp)
- error = EINVAL; /* needs translation */
- else
- vrele(devvp);
+ if (devvp != ump->um_devvp) {
+ vput(devvp);
+ return (EINVAL); /* needs translation */
+ } else
+ vput(devvp);
}
if (error) {
vrele(devvp);
diff --git a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
index 4bb425ac85ae..db9511260ee0 100644
--- a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
+++ b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
@@ -114,14 +114,14 @@ reiserfs_mount(struct mount *mp, struct thread *td)
if (fspec == NULL)
return (EINVAL);
- NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, fspec, td);
+ NDINIT(ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, fspec, td);
if ((error = namei(ndp)) != 0)
return (error);
NDFREE(ndp, NDF_ONLY_PNBUF);
devvp = ndp->ni_vp;
if (!vn_isdisk(devvp, &error)) {
- vrele(devvp);
+ vput(devvp);
return (error);
}
@@ -131,20 +131,19 @@ reiserfs_mount(struct mount *mp, struct thread *td)
accessmode = VREAD;
if ((mp->mnt_flag & MNT_RDONLY) == 0)
accessmode |= VWRITE;
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
if ((error = VOP_ACCESS(devvp,
accessmode, td->td_ucred, td)) != 0) {
vput(devvp);
return (error);
}
- VOP_UNLOCK(devvp, 0, td);
}
if ((mp->mnt_flag & MNT_UPDATE) == 0) {
error = reiserfs_mountfs(devvp, mp, td);
} else {
/* TODO Handle MNT_UPDATE */
- error = (EOPNOTSUPP);
+ vput(devvp);
+ return (EOPNOTSUPP);
}
if (error) {
@@ -473,7 +472,6 @@ reiserfs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td)
if (vcount(devvp) > 1)
return (EBUSY);
- vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td);
error = vinvalbuf(devvp, V_SAVE, td->td_ucred, td, 0, 0);
if (error) {
VOP_UNLOCK(devvp, 0, td);