Module Name: src Committed By: mlelstv Date: Fri Dec 24 13:38:58 UTC 2010
Modified Files: src/sys/ufs/ffs: ffs_wapbl.c Log Message: For update mounts the root vnode is already in use and we must not free it. Since the mount persists even when the update fails, this is not a problem either. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/ufs/ffs/ffs_wapbl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/ufs/ffs/ffs_wapbl.c diff -u src/sys/ufs/ffs/ffs_wapbl.c:1.16 src/sys/ufs/ffs/ffs_wapbl.c:1.17 --- src/sys/ufs/ffs/ffs_wapbl.c:1.16 Thu Dec 23 14:43:37 2010 +++ src/sys/ufs/ffs/ffs_wapbl.c Fri Dec 24 13:38:57 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_wapbl.c,v 1.16 2010/12/23 14:43:37 mlelstv Exp $ */ +/* $NetBSD: ffs_wapbl.c,v 1.17 2010/12/24 13:38:57 mlelstv Exp $ */ /*- * Copyright (c) 2003,2006,2008 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_wapbl.c,v 1.16 2010/12/23 14:43:37 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_wapbl.c,v 1.17 2010/12/24 13:38:57 mlelstv Exp $"); #define WAPBL_INTERNAL @@ -608,13 +608,15 @@ if ((error = VFS_ROOT(mp, &rvp)) != 0) return error; - if ((error = UFS_VALLOC(rvp, 0 | S_IFREG, NOCRED, &vp)) != 0) { + error = UFS_VALLOC(rvp, 0 | S_IFREG, NOCRED, &vp); + if (mp->mnt_flag & MNT_UPDATE) { + vput(rvp); + } else { VOP_UNLOCK(rvp); vgone(rvp); - return error; } - VOP_UNLOCK(rvp); - vgone(rvp); + if (error != 0) + return error; vp->v_type = VREG; ip = VTOI(vp);