Commit 0b8fd303 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Ben Myers

xfs: log the inode in ->write_inode calls for kupdate

If the writeback code writes back an inode because it has expired we currently
use the non-blockin ->write_inode path.  This means any inode that is pinned
is skipped.  With delayed logging and a workload that has very little log
traffic otherwise it is very likely that an inode that gets constantly
written to is always pinned, and thus we keep refusing to write it.  The VM
writeback code at that point redirties it and doesn't try to write it again
for another 30 seconds.  This means under certain scenarious time based
metadata writeback never happens.

Fix this by calling into xfs_log_inode for kupdate in addition to data
integrity syncs, and thus transfer the inode to the log ASAP.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Tested-by: default avatarMark Tinguely <tinguely@sgi.com>
Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent 9f9c19ec
...@@ -905,7 +905,7 @@ xfs_fs_write_inode( ...@@ -905,7 +905,7 @@ xfs_fs_write_inode(
if (!ip->i_update_core) if (!ip->i_update_core)
return 0; return 0;
if (wbc->sync_mode == WB_SYNC_ALL) { if (wbc->sync_mode == WB_SYNC_ALL || wbc->for_kupdate) {
/* /*
* Make sure the inode has made it it into the log. Instead * Make sure the inode has made it it into the log. Instead
* of forcing it all the way to stable storage using a * of forcing it all the way to stable storage using a
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment