diff options
author | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2010-08-28 08:57:15 +0000 |
---|---|---|
committer | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2010-08-28 08:57:15 +0000 |
commit | c87f1ad43ce664de499084f7662dd59b1c180eff (patch) | |
tree | 5216e09d1d3ceb4e2984d034b547bc157ff7fbb3 /sys/kern/vfs_mount.c | |
parent | 4d02a00a57d8ce2bd81efc6c9b65ab7ce241bc5e (diff) | |
download | src-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.c | 8 |
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); |