Author: mckusick
Date: Fri Feb  2 01:28:14 2018
New Revision: 328765
URL: https://svnweb.freebsd.org/changeset/base/328765

Log:
  MFC of 328444.
  
  Eliminate "fsync: giving up on dirty" messages.

Modified:
  stable/10/sys/kern/vfs_default.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/vfs_default.c
==============================================================================
--- stable/10/sys/kern/vfs_default.c    Fri Feb  2 00:52:29 2018        
(r328764)
+++ stable/10/sys/kern/vfs_default.c    Fri Feb  2 01:28:14 2018        
(r328765)
@@ -639,13 +639,21 @@ vop_stdfsync(ap)
                struct thread *a_td;
        } */ *ap;
 {
-       struct vnode *vp = ap->a_vp;
-       struct buf *bp;
+       struct vnode *vp;
+       struct buf *bp, *nbp;
        struct bufobj *bo;
-       struct buf *nbp;
-       int error = 0;
-       int maxretry = 1000;     /* large, arbitrarily chosen */
+       struct mount *mp;
+       int error, maxretry;
 
+       error = 0;
+       maxretry = 10000;     /* large, arbitrarily chosen */
+       vp = ap->a_vp;
+       mp = NULL;
+       if (vp->v_type == VCHR) {
+               VI_LOCK(vp);
+               mp = vp->v_rdev->si_mountpt;
+               VI_UNLOCK(vp);
+       }
        bo = &vp->v_bufobj;
        BO_LOCK(bo);
 loop1:
@@ -688,6 +696,8 @@ loop2:
                        bremfree(bp);
                        bawrite(bp);
                }
+               if (maxretry < 1000)
+                       pause("dirty", hz < 1000 ? 1 : hz / 1000);
                BO_LOCK(bo);
                goto loop2;
        }
@@ -709,7 +719,8 @@ loop2:
                        TAILQ_FOREACH(bp, &bo->bo_dirty.bv_hd, b_bobufs)
                                if ((error = bp->b_error) == 0)
                                        continue;
-                       if (error == 0 && --maxretry >= 0)
+                       if ((mp != NULL && mp->mnt_secondary_writes > 0) ||
+                           (error == 0 && --maxretry >= 0))
                                goto loop1;
                        error = EAGAIN;
                }
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to