Commit 661074e91b1da1ee262dfde6dd836deacccb9def
1 parent
c6287315cb
Exists in
master
and in
4 other branches
Take ->i_bdev/->i_cdev handling out of clear_inode()
All call chains to clear_inode() pass through evict_inode() and clear_inode() should be called by evict_inode() exactly once. So we can pull i_bdev/i_cdev detaching up to evict_inode() itself. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 1 changed file with 4 additions and 4 deletions Side-by-side Diff
fs/inode.c
... | ... | @@ -313,10 +313,6 @@ |
313 | 313 | inode_sync_wait(inode); |
314 | 314 | if (inode->i_sb->s_op->clear_inode) |
315 | 315 | inode->i_sb->s_op->clear_inode(inode); |
316 | - if (S_ISBLK(inode->i_mode) && inode->i_bdev) | |
317 | - bd_forget(inode); | |
318 | - if (S_ISCHR(inode->i_mode) && inode->i_cdev) | |
319 | - cd_forget(inode); | |
320 | 316 | inode->i_state = I_FREEING | I_CLEAR; |
321 | 317 | } |
322 | 318 | EXPORT_SYMBOL(clear_inode); |
... | ... | @@ -334,6 +330,10 @@ |
334 | 330 | truncate_inode_pages(&inode->i_data, 0); |
335 | 331 | clear_inode(inode); |
336 | 332 | } |
333 | + if (S_ISBLK(inode->i_mode) && inode->i_bdev) | |
334 | + bd_forget(inode); | |
335 | + if (S_ISCHR(inode->i_mode) && inode->i_cdev) | |
336 | + cd_forget(inode); | |
337 | 337 | } |
338 | 338 | |
339 | 339 | /* |