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

Reply via email to