Module Name:    src
Committed By:   riastradh
Date:           Fri Mar 27 19:47:14 UTC 2015

Modified Files:
        src/sys/ufs/lfs: ulfs_readwrite.c ulfs_vnops.c
        src/sys/ufs/ufs: ufs_readwrite.c ufs_vnops.c

Log Message:
Tighten some kasserts in ufs_bufio code paths.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/ufs/lfs/ulfs_readwrite.c
cvs rdiff -u -r1.22 -r1.23 src/sys/ufs/lfs/ulfs_vnops.c
cvs rdiff -u -r1.108 -r1.109 src/sys/ufs/ufs/ufs_readwrite.c
cvs rdiff -u -r1.226 -r1.227 src/sys/ufs/ufs/ufs_vnops.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/lfs/ulfs_readwrite.c
diff -u src/sys/ufs/lfs/ulfs_readwrite.c:1.8 src/sys/ufs/lfs/ulfs_readwrite.c:1.9
--- src/sys/ufs/lfs/ulfs_readwrite.c:1.8	Fri Mar 27 17:27:56 2015
+++ src/sys/ufs/lfs/ulfs_readwrite.c	Fri Mar 27 19:47:14 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_readwrite.c,v 1.8 2015/03/27 17:27:56 riastradh Exp $	*/
+/*	$NetBSD: ulfs_readwrite.c,v 1.9 2015/03/27 19:47:14 riastradh Exp $	*/
 /*  from NetBSD: ufs_readwrite.c,v 1.105 2013/01/22 09:39:18 dholland Exp  */
 
 /*-
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.8 2015/03/27 17:27:56 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.9 2015/03/27 19:47:14 riastradh Exp $");
 
 #ifdef LFS_READWRITE
 #define	FS			struct lfs
@@ -510,6 +510,7 @@ BUFWR(struct vnode *vp, struct uio *uio,
 	bool need_unreserve = false;
 #endif
 
+	KASSERT(ISSET(ioflag, IO_NODELOCKED));
 	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	KASSERT(vp->v_type == VDIR || vp->v_type == VLNK);
 	KASSERT(vp->v_type != VDIR || ISSET(ioflag, IO_SYNC));

Index: src/sys/ufs/lfs/ulfs_vnops.c
diff -u src/sys/ufs/lfs/ulfs_vnops.c:1.22 src/sys/ufs/lfs/ulfs_vnops.c:1.23
--- src/sys/ufs/lfs/ulfs_vnops.c:1.22	Fri Mar 27 17:27:56 2015
+++ src/sys/ufs/lfs/ulfs_vnops.c	Fri Mar 27 19:47:14 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_vnops.c,v 1.22 2015/03/27 17:27:56 riastradh Exp $	*/
+/*	$NetBSD: ulfs_vnops.c,v 1.23 2015/03/27 19:47:14 riastradh Exp $	*/
 /*  from NetBSD: ufs_vnops.c,v 1.213 2013/06/08 05:47:02 kardel Exp  */
 
 /*-
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.22 2015/03/27 17:27:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.23 2015/03/27 19:47:14 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -1329,13 +1329,9 @@ ulfs_bufio(enum uio_rw rw, struct vnode 
 	struct uio uio;
 	int error;
 
-	/* XXX Remove me -- all callers should be locked.  */
-	if (!ISSET(ioflg, IO_NODELOCKED)) {
-		if (rw == UIO_READ)
-			vn_lock(vp, LK_SHARED | LK_RETRY);
-		else /* UIO_WRITE */
-			vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
-	}
+	KASSERT(ISSET(ioflg, IO_NODELOCKED));
+	KASSERT(VOP_ISLOCKED(vp));
+	KASSERT(rw != UIO_WRITE || VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 
 	iov.iov_base = buf;
 	iov.iov_len = len;
@@ -1362,7 +1358,7 @@ ulfs_bufio(enum uio_rw rw, struct vnode 
 	else if (uio.uio_resid && error == 0)
 		error = EIO;
 
-	if (!ISSET(ioflg, IO_NODELOCKED))
-		VOP_UNLOCK(vp);
+	KASSERT(VOP_ISLOCKED(vp));
+	KASSERT(rw != UIO_WRITE || VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	return error;
 }

Index: src/sys/ufs/ufs/ufs_readwrite.c
diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.108 src/sys/ufs/ufs/ufs_readwrite.c:1.109
--- src/sys/ufs/ufs/ufs_readwrite.c:1.108	Fri Mar 27 17:27:56 2015
+++ src/sys/ufs/ufs/ufs_readwrite.c	Fri Mar 27 19:47:14 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_readwrite.c,v 1.108 2015/03/27 17:27:56 riastradh Exp $	*/
+/*	$NetBSD: ufs_readwrite.c,v 1.109 2015/03/27 19:47:14 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.108 2015/03/27 17:27:56 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.109 2015/03/27 19:47:14 riastradh Exp $");
 
 #ifdef LFS_READWRITE
 #define	FS			struct lfs
@@ -543,10 +543,13 @@ BUFWR(struct vnode *vp, struct uio *uio,
 	bool need_unreserve = false;
 #endif
 
+	KASSERT(ISSET(ioflag, IO_NODELOCKED));
 	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	KASSERT(vp->v_type == VDIR || vp->v_type == VLNK);
 	KASSERT(vp->v_type != VDIR || ISSET(ioflag, IO_SYNC));
 	KASSERT(uio->uio_rw == UIO_WRITE);
+	KASSERT(ISSET(ioflag, IO_JOURNALLOCKED));
+	UFS_WAPBL_JLOCK_ASSERT(vp->v_mount);
 
 	ip = VTOI(vp);
 	ump = ip->i_ump;
@@ -573,8 +576,6 @@ BUFWR(struct vnode *vp, struct uio *uio,
 	error = 0;
 
 	KASSERT(vp->v_type != VREG);
-	KASSERT(ISSET(ioflag, IO_JOURNALLOCKED));
-	UFS_WAPBL_JLOCK_ASSERT(vp->v_mount);
 
 #ifdef LFS_READWRITE
 	lfs_availwait(fs, btofsb(fs, uio->uio_resid));

Index: src/sys/ufs/ufs/ufs_vnops.c
diff -u src/sys/ufs/ufs/ufs_vnops.c:1.226 src/sys/ufs/ufs/ufs_vnops.c:1.227
--- src/sys/ufs/ufs/ufs_vnops.c:1.226	Fri Mar 27 17:27:56 2015
+++ src/sys/ufs/ufs/ufs_vnops.c	Fri Mar 27 19:47:14 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_vnops.c,v 1.226 2015/03/27 17:27:56 riastradh Exp $	*/
+/*	$NetBSD: ufs_vnops.c,v 1.227 2015/03/27 19:47:14 riastradh 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.226 2015/03/27 17:27:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.227 2015/03/27 19:47:14 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -1896,13 +1896,11 @@ ufs_bufio(enum uio_rw rw, struct vnode *
 	struct uio uio;
 	int error;
 
-	/* XXX Remove me -- all callers should be locked.  */
-	if (!ISSET(ioflg, IO_NODELOCKED)) {
-		if (rw == UIO_READ)
-			vn_lock(vp, LK_SHARED | LK_RETRY);
-		else /* UIO_WRITE */
-			vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
-	}
+	KASSERT(ISSET(ioflg, IO_NODELOCKED));
+	KASSERT(VOP_ISLOCKED(vp));
+	KASSERT(rw != UIO_WRITE || VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
+	KASSERT(rw != UIO_WRITE || vp->v_mount->mnt_wapbl == NULL ||
+	    ISSET(ioflg, IO_JOURNALLOCKED));
 
 	iov.iov_base = buf;
 	iov.iov_len = len;
@@ -1929,7 +1927,7 @@ ufs_bufio(enum uio_rw rw, struct vnode *
 	else if (uio.uio_resid && error == 0)
 		error = EIO;
 
-	if (!ISSET(ioflg, IO_NODELOCKED))
-		VOP_UNLOCK(vp);
+	KASSERT(VOP_ISLOCKED(vp));
+	KASSERT(rw != UIO_WRITE || VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	return error;
 }

Reply via email to