Module Name: src Committed By: jdolecek Date: Mon Dec 10 19:29:41 UTC 2018
Modified Files: src/sys/ufs/ffs: ffs_alloc.c ffs_inode.c ffs_vfsops.c ffs_wapbl.c src/sys/ufs/ufs: ufs_inode.c ufs_readwrite.c ufs_vnops.c ufs_wapbl.h Log Message: make UFS_WAPBL_JLOCK_ASSERT() #ifdef DIAGNOSTIC, same as the underlying function KASSERT(), so that it actually does something; fix code using it to actually pass correct params, so that it compiles remove UFS_WAPBL_JUNLOCK_ASSERT(), as that is inherently racy (it's okay on those places if the rwlock is held by other lwp); depend on the RW_ASSERT()/LOCKDEBUG inside rw_enter() to catch the case with wapbl rwlock held by current lwp To generate a diff of this commit: cvs rdiff -u -r1.161 -r1.162 src/sys/ufs/ffs/ffs_alloc.c cvs rdiff -u -r1.124 -r1.125 src/sys/ufs/ffs/ffs_inode.c cvs rdiff -u -r1.359 -r1.360 src/sys/ufs/ffs/ffs_vfsops.c cvs rdiff -u -r1.42 -r1.43 src/sys/ufs/ffs/ffs_wapbl.c cvs rdiff -u -r1.103 -r1.104 src/sys/ufs/ufs/ufs_inode.c cvs rdiff -u -r1.121 -r1.122 src/sys/ufs/ufs/ufs_readwrite.c cvs rdiff -u -r1.239 -r1.240 src/sys/ufs/ufs/ufs_vnops.c cvs rdiff -u -r1.14 -r1.15 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.161 src/sys/ufs/ffs/ffs_alloc.c:1.162 --- src/sys/ufs/ffs/ffs_alloc.c:1.161 Mon Sep 3 16:29:37 2018 +++ src/sys/ufs/ffs/ffs_alloc.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_alloc.c,v 1.161 2018/09/03 16:29:37 riastradh Exp $ */ +/* $NetBSD: ffs_alloc.c,v 1.162 2018/12/10 19:29:41 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.161 2018/09/03 16:29:37 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.162 2018/12/10 19:29:41 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -566,8 +566,6 @@ 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/ffs/ffs_inode.c diff -u src/sys/ufs/ffs/ffs_inode.c:1.124 src/sys/ufs/ffs/ffs_inode.c:1.125 --- src/sys/ufs/ffs/ffs_inode.c:1.124 Sat Mar 18 05:26:40 2017 +++ src/sys/ufs/ffs/ffs_inode.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_inode.c,v 1.124 2017/03/18 05:26:40 riastradh Exp $ */ +/* $NetBSD: ffs_inode.c,v 1.125 2018/12/10 19:29:41 jdolecek Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_inode.c,v 1.124 2017/03/18 05:26:40 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_inode.c,v 1.125 2018/12/10 19:29:41 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -220,7 +220,7 @@ ffs_truncate(struct vnode *ovp, off_t le struct ufsmount *ump = oip->i_ump; void *dcookie; - UFS_WAPBL_JLOCK_ASSERT(ip->i_ump->um_mountp); + UFS_WAPBL_JLOCK_ASSERT(ump->um_mountp); if (ovp->v_type == VCHR || ovp->v_type == VBLK || ovp->v_type == VFIFO || ovp->v_type == VSOCK) { Index: src/sys/ufs/ffs/ffs_vfsops.c diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.359 src/sys/ufs/ffs/ffs_vfsops.c:1.360 --- src/sys/ufs/ffs/ffs_vfsops.c:1.359 Mon Dec 10 14:46:24 2018 +++ src/sys/ufs/ffs/ffs_vfsops.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_vfsops.c,v 1.359 2018/12/10 14:46:24 maxv Exp $ */ +/* $NetBSD: ffs_vfsops.c,v 1.360 2018/12/10 19:29:41 jdolecek Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.359 2018/12/10 14:46:24 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.360 2018/12/10 19:29:41 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -2334,7 +2334,7 @@ ffs_cgupdate(struct ufsmount *mp, int wa void *space; int i, size, error = 0, allerror = 0; - UFS_WAPBL_JLOCK_ASSERT(mp); + UFS_WAPBL_JLOCK_ASSERT(mp->um_mountp); allerror = ffs_sbupdate(mp, waitfor); blks = howmany(fs->fs_cssize, fs->fs_fsize); Index: src/sys/ufs/ffs/ffs_wapbl.c diff -u src/sys/ufs/ffs/ffs_wapbl.c:1.42 src/sys/ufs/ffs/ffs_wapbl.c:1.43 --- src/sys/ufs/ffs/ffs_wapbl.c:1.42 Mon Sep 3 16:29:37 2018 +++ src/sys/ufs/ffs/ffs_wapbl.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_wapbl.c,v 1.42 2018/09/03 16:29:37 riastradh Exp $ */ +/* $NetBSD: ffs_wapbl.c,v 1.43 2018/12/10 19:29:41 jdolecek 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.42 2018/09/03 16:29:37 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_wapbl.c,v 1.43 2018/12/10 19:29:41 jdolecek Exp $"); #define WAPBL_INTERNAL @@ -176,7 +176,7 @@ ffs_wapbl_sync_metadata(struct mount *mp int error __diagused; struct wapbl_dealloc *wd; - UFS_WAPBL_JLOCK_ASSERT(mp); + UFS_WAPBL_JLOCK_ASSERT(ump->um_mountp); #ifdef WAPBL_DEBUG_INODES ufs_wapbl_verify_inodes(mp, __func__); Index: src/sys/ufs/ufs/ufs_inode.c diff -u src/sys/ufs/ufs/ufs_inode.c:1.103 src/sys/ufs/ufs/ufs_inode.c:1.104 --- src/sys/ufs/ufs/ufs_inode.c:1.103 Sun Jan 28 10:01:18 2018 +++ src/sys/ufs/ufs/ufs_inode.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_inode.c,v 1.103 2018/01/28 10:01:18 hannken Exp $ */ +/* $NetBSD: ufs_inode.c,v 1.104 2018/12/10 19:29:41 jdolecek Exp $ */ /* * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.103 2018/01/28 10:01:18 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.104 2018/12/10 19:29:41 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -86,8 +86,6 @@ ufs_inactive(void *v) int allerror = 0, error; bool wapbl_locked = false; - UFS_WAPBL_JUNLOCK_ASSERT(mp); - /* * Ignore inodes related to stale file handles. */ @@ -298,8 +296,6 @@ 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.121 src/sys/ufs/ufs/ufs_readwrite.c:1.122 --- src/sys/ufs/ufs/ufs_readwrite.c:1.121 Wed Mar 1 10:42:45 2017 +++ src/sys/ufs/ufs/ufs_readwrite.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_readwrite.c,v 1.121 2017/03/01 10:42:45 hannken Exp $ */ +/* $NetBSD: ufs_readwrite.c,v 1.122 2018/12/10 19:29:41 jdolecek Exp $ */ /*- * Copyright (c) 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.121 2017/03/01 10:42:45 hannken Exp $"); +__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.122 2018/12/10 19:29:41 jdolecek Exp $"); #ifdef LFS_READWRITE #define FS struct lfs @@ -291,7 +291,6 @@ 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.239 src/sys/ufs/ufs/ufs_vnops.c:1.240 --- src/sys/ufs/ufs/ufs_vnops.c:1.239 Sat Oct 28 00:37:13 2017 +++ src/sys/ufs/ufs/ufs_vnops.c Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_vnops.c,v 1.239 2017/10/28 00:37:13 pgoyette Exp $ */ +/* $NetBSD: ufs_vnops.c,v 1.240 2018/12/10 19:29:41 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.239 2017/10/28 00:37:13 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.240 2018/12/10 19:29:41 jdolecek Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -460,8 +460,6 @@ 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; @@ -1781,8 +1779,6 @@ 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.14 src/sys/ufs/ufs/ufs_wapbl.h:1.15 --- src/sys/ufs/ufs/ufs_wapbl.h:1.14 Fri Nov 11 22:59:26 2016 +++ src/sys/ufs/ufs/ufs_wapbl.h Mon Dec 10 19:29:41 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_wapbl.h,v 1.14 2016/11/11 22:59:26 jdolecek Exp $ */ +/* $NetBSD: ufs_wapbl.h,v 1.15 2018/12/10 19:29:41 jdolecek Exp $ */ /*- * Copyright (c) 2003,2006,2008 The NetBSD Foundation, Inc. @@ -131,14 +131,11 @@ ufs_wapbl_end(struct mount *mp) UFS_UPDATE(vp, access, modify, flags); \ } -#ifdef UFS_WAPBL_DEBUG_JLOCK +#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) \ @@ -168,7 +165,6 @@ 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