aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ubifs
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-07-21 03:59:53 -0400
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-08-13 04:22:09 -0400
commit1e0f358e29cc91c8eb09e10cbf1f6bb58a62c795 (patch)
treed15490d3381cd19fa5decc7ef1464a60e93283eb /fs/ubifs
parent7d32c2bb143fa1ca3b0c420feb08a832d65395be (diff)
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>
Diffstat (limited to 'fs/ubifs')
-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 06e3b22a0c1b..884beed1dcb8 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -314,8 +314,9 @@ static void ubifs_delete_inode(struct inode *inode)
314{ 314{
315 int err; 315 int err;
316 struct ubifs_info *c = inode->i_sb->s_fs_info; 316 struct ubifs_info *c = inode->i_sb->s_fs_info;
317 struct ubifs_inode *ui = ubifs_inode(inode);
317 318
318 if (ubifs_inode(inode)->xattr) 319 if (ui->xattr)
319 /* 320 /*
320 * Extended attribute inode deletions are fully handled in 321 * Extended attribute inode deletions are fully handled in
321 * 'ubifs_removexattr()'. These inodes are special and have 322 * 'ubifs_removexattr()'. These inodes are special and have
@@ -326,13 +327,12 @@ static void ubifs_delete_inode(struct inode *inode)
326 dbg_gen("inode %lu, mode %#x", inode->i_ino, (int)inode->i_mode); 327 dbg_gen("inode %lu, mode %#x", inode->i_ino, (int)inode->i_mode);
327 ubifs_assert(!atomic_read(&inode->i_count)); 328 ubifs_assert(!atomic_read(&inode->i_count));
328 ubifs_assert(inode->i_nlink == 0); 329 ubifs_assert(inode->i_nlink == 0);
329 ubifs_assert(!ubifs_inode(inode)->dirty);
330 330
331 truncate_inode_pages(&inode->i_data, 0); 331 truncate_inode_pages(&inode->i_data, 0);
332 if (is_bad_inode(inode)) 332 if (is_bad_inode(inode))
333 goto out; 333 goto out;
334 334
335 ubifs_inode(inode)->ui_size = inode->i_size = 0; 335 ui->ui_size = inode->i_size = 0;
336 err = ubifs_jnl_write_inode(c, inode, 1); 336 err = ubifs_jnl_write_inode(c, inode, 1);
337 if (err) 337 if (err)
338 /* 338 /*
@@ -341,6 +341,8 @@ static void ubifs_delete_inode(struct inode *inode)
341 */ 341 */
342 ubifs_err("can't write inode %lu, error %d", inode->i_ino, err); 342 ubifs_err("can't write inode %lu, error %d", inode->i_ino, err);
343out: 343out:
344 if (ui->dirty)
345 ubifs_release_dirty_inode_budget(c, ui);
344 clear_inode(inode); 346 clear_inode(inode);
345} 347}
346 348