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;
}