From 998ce1380917d282a8e27e2a470ffbfec756c1b0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 9 Apr 2008 15:23:46 -0700 Subject: [PATCH] kclient: made pdflush do our dirty work --- src/kernel/inode.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 28645ad0c8918..95abfb18fd543 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -7,6 +7,7 @@ #include #include #include +#include int ceph_debug_inode = -1; #define DOUT_VAR ceph_debug_inode @@ -1019,8 +1020,17 @@ out: spin_unlock(&inode->i_lock); if (wake) wake_up(&ci->i_cap_wq); - if (writeback_now) - write_inode_now(inode, 0); + if (writeback_now) { + /* + * _queue_ inode for writeback, but don't actually + * call writepages from this context!! + */ + dout(10, "queueing %p for writeback\n", inode); + spin_lock(&inode_lock); + list_move(&inode->i_list, &inode->i_sb->s_more_io); + spin_unlock(&inode_lock); + wakeup_pdflush(0); /* this is overkill? */ + } if (invalidate) invalidate_mapping_pages(&inode->i_data, 0, -1); return reply; -- 2.39.5