diff options
author | kib <kib@FreeBSD.org> | 2010-12-01 21:19:11 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-12-01 21:19:11 +0000 |
commit | e3e1ae2c87e9c90fc1af144567e491f3f049512d (patch) | |
tree | fadf63f4d3be867955c620edc930caf7ea5ee4e1 | |
parent | 0a3bc2b1b96399af7fd4120eb826e426ede43530 (diff) | |
download | FreeBSD-src-e3e1ae2c87e9c90fc1af144567e491f3f049512d.zip FreeBSD-src-e3e1ae2c87e9c90fc1af144567e491f3f049512d.tar.gz |
Journal start looks up .sujournal file by doing lookup on the root dvp.
As result, failed softdep_mount() might leave up to two vnodes on the
mp mountlist, preventing mnt_ref from going to zero.
Call ffs_flushfiles() after failed softdep_mount() to clean mountlist.
Initial report by: Garrett Cooper
Reproduced and tested by: pho
-rw-r--r-- | sys/ufs/ffs/ffs_vfsops.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 94951e4..72f40da 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -928,6 +928,7 @@ ffs_mountfs(devvp, mp, td) if ((fs->fs_flags & FS_DOSOFTDEP) && (error = softdep_mount(devvp, mp, fs, cred)) != 0) { free(fs->fs_csp, M_UFSMNT); + ffs_flushfiles(mp, FORCECLOSE, td); goto out; } if (fs->fs_snapinum[0] != 0) |