svn commit: r328765 - stable/10/sys/kern
Kirk McKusick
mckusick at FreeBSD.org
Fri Feb 2 01:28:15 UTC 2018
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;
}
More information about the svn-src-stable
mailing list