aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nilfs2/inode.c
diff options
context:
space:
mode:
authorRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2011-02-11 01:23:27 -0500
committerRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2011-03-08 00:58:04 -0500
commit25b18d39cca207f8559af1aac00313deda2d652e (patch)
tree70815c9799a82b53785d9daf75e598f47b84243c /fs/nilfs2/inode.c
parenta5abba989deceb731047425812d268daf7536575 (diff)
nilfs2: decrement inodes count only if raw inode was successfully deleted
This fixes the issue that inodes count will not add up after removal of raw inodes fails. Hence, this prevents possible under flow of the inodes count. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Diffstat (limited to 'fs/nilfs2/inode.c')
-rw-r--r--fs/nilfs2/inode.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index 2fd440d8d6b8..3a6967d14e1c 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -707,6 +707,7 @@ void nilfs_evict_inode(struct inode *inode)
707 struct nilfs_transaction_info ti; 707 struct nilfs_transaction_info ti;
708 struct super_block *sb = inode->i_sb; 708 struct super_block *sb = inode->i_sb;
709 struct nilfs_inode_info *ii = NILFS_I(inode); 709 struct nilfs_inode_info *ii = NILFS_I(inode);
710 int ret;
710 711
711 if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) { 712 if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) {
712 if (inode->i_data.nrpages) 713 if (inode->i_data.nrpages)
@@ -725,8 +726,9 @@ void nilfs_evict_inode(struct inode *inode)
725 nilfs_mark_inode_dirty(inode); 726 nilfs_mark_inode_dirty(inode);
726 end_writeback(inode); 727 end_writeback(inode);
727 728
728 nilfs_ifile_delete_inode(ii->i_root->ifile, inode->i_ino); 729 ret = nilfs_ifile_delete_inode(ii->i_root->ifile, inode->i_ino);
729 atomic_dec(&ii->i_root->inodes_count); 730 if (!ret)
731 atomic_dec(&ii->i_root->inodes_count);
730 732
731 nilfs_clear_inode(inode); 733 nilfs_clear_inode(inode);
732 734