diff options
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r-- | fs/ubifs/super.c | 8 |
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); |
343 | out: | 343 | out: |
344 | if (ui->dirty) | ||
345 | ubifs_release_dirty_inode_budget(c, ui); | ||
344 | clear_inode(inode); | 346 | clear_inode(inode); |
345 | } | 347 | } |
346 | 348 | ||