Module Name: src Committed By: jdolecek Date: Mon Dec 10 20:48:34 UTC 2018
Modified Files: src/sys/ufs/ffs: ffs_alloc.c src/sys/ufs/ufs: ufs_inode.c ufs_readwrite.c ufs_vnops.c ufs_wapbl.h Log Message: put back UFS_WAPBL_JUNLOCK_ASSERT(), the underlying rw_write_held() check doesn't actually have a race since it checks if the rwlock is held by current lwp To generate a diff of this commit: cvs rdiff -u -r1.162 -r1.163 src/sys/ufs/ffs/ffs_alloc.c cvs rdiff -u -r1.104 -r1.105 src/sys/ufs/ufs/ufs_inode.c cvs rdiff -u -r1.122 -r1.123 src/sys/ufs/ufs/ufs_readwrite.c cvs rdiff -u -r1.240 -r1.241 src/sys/ufs/ufs/ufs_vnops.c cvs rdiff -u -r1.15 -r1.16 src/sys/ufs/ufs/ufs_wapbl.h 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_alloc.c diff -u src/sys/ufs/ffs/ffs_alloc.c:1.162 src/sys/ufs/ffs/ffs_alloc.c:1.163 --- src/sys/ufs/ffs/ffs_alloc.c:1.162 Mon Dec 10 19:29:41 2018 +++ src/sys/ufs/ffs/ffs_alloc.c Mon Dec 10 20:48:34 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_alloc.c,v 1.162 2018/12/10 19:29:41 jdolecek Exp $ */ +/* $NetBSD: ffs_alloc.c,v 1.163 2018/12/10 20:48:34 jdolecek Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.162 2018/12/10 19:29:41 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.163 2018/12/10 20:48:34 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -566,6 +566,8 @@ ffs_valloc(struct vnode *pvp, int mode, ino_t ino, ipref; int cg, error; + UFS_WAPBL_JUNLOCK_ASSERT(pvp->v_mount); + pip = VTOI(pvp); fs = pip->i_fs; ump = pip->i_ump; Index: src/sys/ufs/ufs/ufs_inode.c diff -u src/sys/ufs/ufs/ufs_inode.c:1.104 src/sys/ufs/ufs/ufs_inode.c:1.105 --- src/sys/ufs/ufs/ufs_inode.c:1.104 Mon Dec 10 19:29:41 2018 +++ src/sys/ufs/ufs/ufs_inode.c Mon Dec 10 20:48:34 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_inode.c,v 1.104 2018/12/10 19:29:41 jdolecek Exp $ */ +/* $NetBSD: ufs_inode.c,v 1.105 2018/12/10 20:48:34 jdolecek Exp $ */ /* * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.104 2018/12/10 19:29:41 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.105 2018/12/10 20:48:34 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -86,6 +86,8 @@ ufs_inactive(void *v) int allerror = 0, error; bool wapbl_locked = false; + UFS_WAPBL_JUNLOCK_ASSERT(mp); + /* * Ignore inodes related to stale file handles. */ @@ -296,6 +298,8 @@ ufs_truncate_retry(struct vnode *vp, uin struct mount *mp = vp->v_mount; int error = 0; + UFS_WAPBL_JUNLOCK_ASSERT(mp); + /* * Truncate might temporarily fail, loop until done. */ Index: src/sys/ufs/ufs/ufs_readwrite.c diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.122 src/sys/ufs/ufs/ufs_readwrite.c:1.123 --- src/sys/ufs/ufs/ufs_readwrite.c:1.122 Mon Dec 10 19:29:41 2018 +++ src/sys/ufs/ufs/ufs_readwrite.c Mon Dec 10 20:48:34 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_readwrite.c,v 1.122 2018/12/10 19:29:41 jdolecek Exp $ */ +/* $NetBSD: ufs_readwrite.c,v 1.123 2018/12/10 20:48:34 jdolecek Exp $ */ /*- * Copyright (c) 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.122 2018/12/10 19:29:41 jdolecek Exp $"); +__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.123 2018/12/10 20:48:34 jdolecek Exp $"); #ifdef LFS_READWRITE #define FS struct lfs @@ -291,6 +291,7 @@ WRITE(void *v) KASSERT(uio->uio_rw == UIO_WRITE); KASSERT(vp->v_type == VREG); KASSERT(!ISSET(ioflag, IO_JOURNALLOCKED)); + UFS_WAPBL_JUNLOCK_ASSERT(vp->v_mount); if (ioflag & IO_APPEND) uio->uio_offset = ip->i_size; Index: src/sys/ufs/ufs/ufs_vnops.c diff -u src/sys/ufs/ufs/ufs_vnops.c:1.240 src/sys/ufs/ufs/ufs_vnops.c:1.241 --- src/sys/ufs/ufs/ufs_vnops.c:1.240 Mon Dec 10 19:29:41 2018 +++ src/sys/ufs/ufs/ufs_vnops.c Mon Dec 10 20:48:34 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_vnops.c,v 1.240 2018/12/10 19:29:41 jdolecek Exp $ */ +/* $NetBSD: ufs_vnops.c,v 1.241 2018/12/10 20:48:34 jdolecek Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.240 2018/12/10 19:29:41 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.241 2018/12/10 20:48:34 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -460,6 +460,8 @@ ufs_setattr(void *v) return (EINVAL); } + UFS_WAPBL_JUNLOCK_ASSERT(vp->v_mount); + if (vap->va_flags != VNOVAL) { if (vp->v_mount->mnt_flag & MNT_RDONLY) { error = EROFS; @@ -1779,6 +1781,8 @@ ufs_makeinode(struct vattr *vap, struct struct vnode *tvp; int error; + UFS_WAPBL_JUNLOCK_ASSERT(dvp->v_mount); + error = vcache_new(dvp->v_mount, dvp, vap, cnp->cn_cred, &tvp); if (error) return error; Index: src/sys/ufs/ufs/ufs_wapbl.h diff -u src/sys/ufs/ufs/ufs_wapbl.h:1.15 src/sys/ufs/ufs/ufs_wapbl.h:1.16 --- src/sys/ufs/ufs/ufs_wapbl.h:1.15 Mon Dec 10 19:29:41 2018 +++ src/sys/ufs/ufs/ufs_wapbl.h Mon Dec 10 20:48:34 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_wapbl.h,v 1.15 2018/12/10 19:29:41 jdolecek Exp $ */ +/* $NetBSD: ufs_wapbl.h,v 1.16 2018/12/10 20:48:34 jdolecek Exp $ */ /*- * Copyright (c) 2003,2006,2008 The NetBSD Foundation, Inc. @@ -134,8 +134,11 @@ ufs_wapbl_end(struct mount *mp) #ifdef DIAGNOSTIC #define UFS_WAPBL_JLOCK_ASSERT(mp) \ if (mp->mnt_wapbl) wapbl_jlock_assert(mp->mnt_wapbl) +#define UFS_WAPBL_JUNLOCK_ASSERT(mp) \ + if (mp->mnt_wapbl) wapbl_junlock_assert(mp->mnt_wapbl) #else #define UFS_WAPBL_JLOCK_ASSERT(mp) +#define UFS_WAPBL_JUNLOCK_ASSERT(mp) #endif #define UFS_WAPBL_REGISTER_INODE(mp, ino, mode) \ @@ -165,6 +168,7 @@ ufs_wapbl_end(struct mount *mp) #define UFS_WAPBL_END(mp) do { } while (0) #define UFS_WAPBL_UPDATE(vp, access, modify, flags) do { } while (0) #define UFS_WAPBL_JLOCK_ASSERT(mp) +#define UFS_WAPBL_JUNLOCK_ASSERT(mp) #define UFS_WAPBL_REGISTER_INODE(mp, ino, mode) do { } while (0) #define UFS_WAPBL_UNREGISTER_INODE(mp, ino, mode) do { } while (0) #define UFS_WAPBL_REGISTER_DEALLOCATION(mp, blk, len, cookiep) 0