aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_mount.c
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2010-08-28 08:57:15 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2010-08-28 08:57:15 +0000
commitc87f1ad43ce664de499084f7662dd59b1c180eff (patch)
tree5216e09d1d3ceb4e2984d034b547bc157ff7fbb3 /sys/kern/vfs_mount.c
parent4d02a00a57d8ce2bd81efc6c9b65ab7ce241bc5e (diff)
downloadsrc-c87f1ad43ce664de499084f7662dd59b1c180eff.tar.gz
src-c87f1ad43ce664de499084f7662dd59b1c180eff.zip
There is a bug in vfs_allocate_syncvnode() failure handling in mount code.
Actually it is hard to properly handle such a failure, especially in MNT_UPDATE case. The only reason for the vfs_allocate_syncvnode() function to fail is getnewvnode() failure. Fortunately it is impossible for current implementation of getnewvnode() to fail, so we can assert this and make vfs_allocate_syncvnode() void. This in turn free us from handling its failures in the mount code. Reviewed by: kib MFC after: 1 month
Notes
Notes: svn path=/head/; revision=211930
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r--sys/kern/vfs_mount.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 088d93973bd7..fe9f16c33555 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -1036,7 +1036,7 @@ vfs_domount(
MNT_IUNLOCK(mp);
if ((mp->mnt_flag & MNT_RDONLY) == 0) {
if (mp->mnt_syncer == NULL)
- error = vfs_allocate_syncvnode(mp);
+ vfs_allocate_syncvnode(mp);
} else {
if (mp->mnt_syncer != NULL)
vrele(mp->mnt_syncer);
@@ -1078,10 +1078,8 @@ vfs_domount(
mountcheckdirs(vp, newdp);
vrele(newdp);
if ((mp->mnt_flag & MNT_RDONLY) == 0)
- error = vfs_allocate_syncvnode(mp);
+ vfs_allocate_syncvnode(mp);
vfs_unbusy(mp);
- if (error)
- vrele(vp);
} else {
vfs_unbusy(mp);
vfs_mount_destroy(mp);
@@ -1311,7 +1309,7 @@ dounmount(mp, flags, td)
mp->mnt_kern_flag &= ~MNTK_NOINSMNTQ;
if ((mp->mnt_flag & MNT_RDONLY) == 0 && mp->mnt_syncer == NULL) {
MNT_IUNLOCK(mp);
- (void) vfs_allocate_syncvnode(mp);
+ vfs_allocate_syncvnode(mp);
MNT_ILOCK(mp);
}
mp->mnt_kern_flag &= ~(MNTK_UNMOUNT | MNTK_UNMOUNTF);