Do not fall back to slow synchronous i/o when low on memory or buffers.

The bawrite() schedules the write to happen immediately, and its use
frees the current thread to do more cleanups.

Submitted by:	bde
Reviewed by:	mckusick
Tested by:	pho
MFC after:	2 weeks
This commit is contained in:
Konstantin Belousov 2012-03-11 20:23:46 +00:00
parent 4cd74eecda
commit 2fd2c0b1e3

View File

@ -133,9 +133,11 @@ ffs_update(vp, waitfor)
else
*((struct ufs2_dinode *)bp->b_data +
ino_to_fsbo(fs, ip->i_number)) = *ip->i_din2;
if ((waitfor && !DOINGASYNC(vp)) ||
(vm_page_count_severe() || buf_dirty_count_severe())) {
if ((waitfor && !DOINGASYNC(vp)))
error = bwrite(bp);
else if (vm_page_count_severe() || buf_dirty_count_severe()) {
bawrite(bp);
error = 0;
} else {
if (bp->b_bufsize == fs->fs_bsize)
bp->b_flags |= B_CLUSTEROK;