From: Andrew Morton <akpm@zip.com.au>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: lkml <linux-kernel@vger.kernel.org>
Subject: [patch 18/18] avoid sys_sync livelocks
Date: Sun, 26 May 2002 13:48:04 -0700 [thread overview]
Message-ID: <3CF14A04.69A00C87@zip.com.au> (raw)
This makes sure that sys_sync() will terminate. It counts up the
number of dirty pages in the machine and will refuse to write out more
than 1.25 times this number of pages. This function is called twice
on the sys_sync() path, so the kernel will actually write 2.5x the number
of initially-dirty pages before giving up.
--- 2.5.18/fs/fs-writeback.c~sync_livelock Sun May 26 12:38:15 2002
+++ 2.5.18-akpm/fs/fs-writeback.c Sun May 26 12:38:15 2002
@@ -325,11 +325,21 @@ static void __wait_on_locked(struct list
* writeback and wait upon the filesystem's dirty inodes. The caller will
* do this in two passes - one to write, and one to wait. WB_SYNC_HOLD is
* used to park the written inodes on sb->s_dirty for the wait pass.
+ *
+ * A finite limit is set on the number of pages which will be written.
+ * To prevent infinite livelock of sys_sync().
*/
void sync_inodes_sb(struct super_block *sb, int wait)
{
+ struct page_state ps;
+ int nr_to_write;
+
+ get_page_state(&ps);
+ nr_to_write = ps.nr_dirty + ps.nr_dirty / 4;
+
spin_lock(&inode_lock);
- sync_sb_inodes(sb, wait ? WB_SYNC_ALL : WB_SYNC_HOLD, NULL, NULL);
+ sync_sb_inodes(sb, wait ? WB_SYNC_ALL : WB_SYNC_HOLD,
+ &nr_to_write, NULL);
if (wait)
__wait_on_locked(&sb->s_locked_inodes);
spin_unlock(&inode_lock);
-
reply other threads:[~2002-05-26 20:51 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3CF14A04.69A00C87@zip.com.au \
--to=akpm@zip.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox