fix-nr_unused-accounting-and-avoid-recursing-in-iput-with-i_will_free-set.patch

From: Vladimir V. Saveliev
Date: Tue Oct 25 2005 - 08:11:19 EST


Hello

The patch mentioned in the subject checks I_WILL_FREE bit in inode->i_flags,
while generic_forget_inode sets it in inode->i_state.
Is it really supposed to be so?
If not, does the attached patch look correct?

generic_forget_inode sets I_WILL_FREE bit in inode->i_state.
__writeback_single_inode checks that bit in inode->i_flags.
This patch changes __writeback_single_inode to check inode->i_state.


fs/fs-writeback.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN fs/fs-writeback.c~writeback_single_inode-warn-fix fs/fs-writeback.c
--- linux-2.6.14-rc5-mm1/fs/fs-writeback.c~writeback_single_inode-warn-fix 2005-10-25 15:52:13.857616000 +0400
+++ linux-2.6.14-rc5-mm1-root/fs/fs-writeback.c 2005-10-25 15:52:37.051065500 +0400
@@ -248,9 +248,9 @@ __writeback_single_inode(struct inode *i
wait_queue_head_t *wqh;

if (!atomic_read(&inode->i_count))
- WARN_ON(!(inode->i_flags & I_WILL_FREE));
+ WARN_ON(!(inode->i_state & I_WILL_FREE));
else
- WARN_ON(inode->i_flags & I_WILL_FREE);
+ WARN_ON(inode->i_state & I_WILL_FREE);

if ((wbc->sync_mode != WB_SYNC_ALL) && (inode->i_state & I_LOCK)) {
list_move(&inode->i_list, &inode->i_sb->s_dirty);

_