softdep_request_cleanup: wait for softdep_request_clean_flush() to pass

if we noted a parallel request is active and declined to overflow the
system with parallel redundant sync of the vnodes.  But we need to wait
for the flush to finish to see if there are any freed resources.

Reviewed by:	chs, mckusick
Tested by:	pho
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Konstantin Belousov 2021-02-04 01:58:05 +02:00
parent 013168db8c
commit 2011b44fa3

View File

@ -13847,6 +13847,7 @@ retry:
failed_vnode = softdep_request_cleanup_flush(mp, ump);
ACQUIRE_LOCK(ump);
ump->um_softdep->sd_flags &= ~FLUSH_RC_ACTIVE;
wakeup(&ump->um_softdep->sd_flags);
FREE_LOCK(ump);
if (ump->softdep_on_worklist > 0) {
stat_cleanup_retries += 1;
@ -13854,6 +13855,11 @@ retry:
goto retry;
}
} else {
while ((ump->um_softdep->sd_flags &
FLUSH_RC_ACTIVE) != 0) {
msleep(&ump->um_softdep->sd_flags,
LOCK_PTR(ump), PVM, "ffsrca", hz);
}
FREE_LOCK(ump);
error = 0;
}