Hi,
Can we use more list macros for v_dirtyblkhd? ok?
bluhm
Index: kern/spec_vnops.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/spec_vnops.c,v
retrieving revision 1.92
diff -u -p -r1.92 spec_vnops.c
--- kern/spec_vnops.c 2 May 2018 02:24:56 -0000 1.92
+++ kern/spec_vnops.c 2 Jul 2018 15:32:52 -0000
@@ -429,8 +429,7 @@ spec_fsync(void *v)
*/
loop:
s = splbio();
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp != NULL; bp = nbp) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
if ((bp->b_flags & B_BUSY))
continue;
if ((bp->b_flags & B_DELWRI) == 0)
Index: kern/vfs_subr.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/vfs_subr.c,v
retrieving revision 1.275
diff -u -p -r1.275 vfs_subr.c
--- kern/vfs_subr.c 6 Jun 2018 19:02:38 -0000 1.275
+++ kern/vfs_subr.c 2 Jul 2018 15:37:06 -0000
@@ -2025,7 +2025,7 @@ brelvp(struct buf *bp)
if (LIST_NEXT(bp, b_vnbufs) != NOLIST)
bufremvn(bp);
if ((vp->v_bioflag & VBIOONSYNCLIST) &&
- LIST_FIRST(&vp->v_dirtyblkhd) == NULL) {
+ LIST_EMPTY(&vp->v_dirtyblkhd)) {
vp->v_bioflag &= ~VBIOONSYNCLIST;
LIST_REMOVE(vp, v_synclist);
}
@@ -2091,7 +2091,7 @@ reassignbuf(struct buf *bp)
if ((bp->b_flags & B_DELWRI) == 0) {
listheadp = &vp->v_cleanblkhd;
if ((vp->v_bioflag & VBIOONSYNCLIST) &&
- LIST_FIRST(&vp->v_dirtyblkhd) == NULL) {
+ LIST_EMPTY(&vp->v_dirtyblkhd)) {
vp->v_bioflag &= ~VBIOONSYNCLIST;
LIST_REMOVE(vp, v_synclist);
}
Index: nfs/nfs_subs.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/nfs/nfs_subs.c,v
retrieving revision 1.136
diff -u -p -r1.136 nfs_subs.c
--- nfs/nfs_subs.c 28 Apr 2018 03:13:05 -0000 1.136
+++ nfs/nfs_subs.c 2 Jul 2018 15:38:24 -0000
@@ -1519,10 +1519,9 @@ loop:
if (vp->v_mount != mp) /* Paranoia */
goto loop;
nvp = LIST_NEXT(vp, v_mntvnodes);
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp != NULL; bp = nbp) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT))
- == (B_DELWRI | B_NEEDCOMMIT))
+ == (B_DELWRI | B_NEEDCOMMIT))
bp->b_flags &= ~B_NEEDCOMMIT;
}
}
Index: nfs/nfs_vfsops.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/nfs/nfs_vfsops.c,v
retrieving revision 1.121
diff -u -p -r1.121 nfs_vfsops.c
--- nfs/nfs_vfsops.c 27 May 2018 06:02:15 -0000 1.121
+++ nfs/nfs_vfsops.c 2 Jul 2018 15:39:21 -0000
@@ -812,7 +812,7 @@ loop:
*/
if (vp->v_mount != mp)
goto loop;
- if (VOP_ISLOCKED(vp) || LIST_FIRST(&vp->v_dirtyblkhd) == NULL)
+ if (VOP_ISLOCKED(vp) || LIST_EMPTY(&vp->v_dirtyblkhd))
continue;
if (vget(vp, LK_EXCLUSIVE))
goto loop;
Index: nfs/nfs_vnops.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/nfs/nfs_vnops.c,v
retrieving revision 1.178
diff -u -p -r1.178 nfs_vnops.c
--- nfs/nfs_vnops.c 21 Jun 2018 14:17:23 -0000 1.178
+++ nfs/nfs_vnops.c 2 Jul 2018 15:42:53 -0000
@@ -2867,18 +2867,15 @@ again:
bvecpos = 0;
if (NFS_ISV3(vp) && commit) {
s = splbio();
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp != NULL; bp = nbp) {
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
if (bvecpos >= NFS_COMMITBVECSIZ)
break;
if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT))
- != (B_DELWRI | B_NEEDCOMMIT)) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ != (B_DELWRI | B_NEEDCOMMIT))
continue;
- }
bremfree(bp);
bp->b_flags |= B_WRITEINPROG;
buf_acquire(bp);
- nbp = LIST_NEXT(bp, b_vnbufs);
/*
* A list of these buffers is kept so that the
@@ -2939,8 +2936,7 @@ again:
*/
loop:
s = splbio();
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp != NULL; bp = nbp) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
if (bp->b_flags & B_BUSY) {
if (waitfor != MNT_WAIT || passone)
continue;
@@ -2993,7 +2989,7 @@ loop:
goto loop2;
}
- if (LIST_FIRST(&vp->v_dirtyblkhd) && commit) {
+ if (!LIST_EMPTY(&vp->v_dirtyblkhd) && commit) {
#if 0
vprint("nfs_fsync: dirty", vp);
#endif
Index: ufs/ffs/ffs_softdep.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/ufs/ffs/ffs_softdep.c,v
retrieving revision 1.142
diff -u -p -r1.142 ffs_softdep.c
--- ufs/ffs/ffs_softdep.c 2 May 2018 02:24:56 -0000 1.142
+++ ufs/ffs/ffs_softdep.c 2 Jul 2018 15:59:24 -0000
@@ -4640,8 +4640,7 @@ softdep_fsync_mountdev(struct vnode *vp,
if (!vn_isdisk(vp, NULL))
panic("softdep_fsync_mountdev: vnode not a disk");
ACQUIRE_LOCK(&lk);
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
/*
* If it is already scheduled, skip to the next buffer.
*/
@@ -4932,7 +4931,7 @@ loop:
* all potential buffers on the dirty list will be visible.
*/
drain_output(vp, 1);
- if (LIST_FIRST(&vp->v_dirtyblkhd) == NULL) {
+ if (LIST_EMPTY(&vp->v_dirtyblkhd)) {
FREE_LOCK(&lk);
return (0);
}
Index: ufs/ffs/ffs_vnops.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/ufs/ffs/ffs_vnops.c,v
retrieving revision 1.90
diff -u -p -r1.90 ffs_vnops.c
--- ufs/ffs/ffs_vnops.c 13 Jan 2018 15:56:02 -0000 1.90
+++ ufs/ffs/ffs_vnops.c 2 Jul 2018 15:58:20 -0000
@@ -435,11 +435,10 @@ ffs_fsync(void *v)
skipmeta = 1;
s = splbio();
loop:
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp;
- bp = LIST_NEXT(bp, b_vnbufs))
+ LIST_FOREACH(bp, &vp->v_dirtyblkhd, b_vnbufs) {
bp->b_flags &= ~B_SCANNED;
- for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
- nbp = LIST_NEXT(bp, b_vnbufs);
+ }
+ LIST_FOREACH_SAFE(bp, &vp->v_dirtyblkhd, b_vnbufs, nbp) {
/*
* Reasons to skip this buffer: it has already been considered
* on this pass, this pass is the first time through on a