summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-07-21 10:59:53 +0300
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-08-13 11:22:09 +0300
commit1e0f358e29cc91c8eb09e10cbf1f6bb58a62c795 (patch)
treed15490d3381cd19fa5decc7ef1464a60e93283eb
parent7d32c2bb143fa1ca3b0c420feb08a832d65395be (diff)
downloadop-kernel-dev-1e0f358e29cc91c8eb09e10cbf1f6bb58a62c795.zip
op-kernel-dev-1e0f358e29cc91c8eb09e10cbf1f6bb58a62c795.tar.gz
UBIFS: free budget in delete_inode as well
Although the inode is marked as clean when it is being deleted, it might stay and be used as orphan, and be marked as dirty. So we have to free the budget when we delete it. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r--fs/ubifs/super.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 06e3b22a..884beed 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -314,8 +314,9 @@ static void ubifs_delete_inode(struct inode *inode)
{
int err;
struct ubifs_info *c = inode->i_sb->s_fs_info;
+ struct ubifs_inode *ui = ubifs_inode(inode);
- if (ubifs_inode(inode)->xattr)
+ if (ui->xattr)
/*
* Extended attribute inode deletions are fully handled in
* 'ubifs_removexattr()'. These inodes are special and have
@@ -326,13 +327,12 @@ static void ubifs_delete_inode(struct inode *inode)
dbg_gen("inode %lu, mode %#x", inode->i_ino, (int)inode->i_mode);
ubifs_assert(!atomic_read(&inode->i_count));
ubifs_assert(inode->i_nlink == 0);
- ubifs_assert(!ubifs_inode(inode)->dirty);
truncate_inode_pages(&inode->i_data, 0);
if (is_bad_inode(inode))
goto out;
- ubifs_inode(inode)->ui_size = inode->i_size = 0;
+ ui->ui_size = inode->i_size = 0;
err = ubifs_jnl_write_inode(c, inode, 1);
if (err)
/*
@@ -341,6 +341,8 @@ static void ubifs_delete_inode(struct inode *inode)
*/
ubifs_err("can't write inode %lu, error %d", inode->i_ino, err);
out:
+ if (ui->dirty)
+ ubifs_release_dirty_inode_budget(c, ui);
clear_inode(inode);
}
OpenPOWER on IntegriCloud