From: Al Viro Subject: [PATCH 6/58] Take ->i_bdev/->i_cdev handling out of clear_inode() Date: Tue, 08 Jun 2010 23:15:52 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: linux-fsdevel@vger.kernel.org Return-path: Received: from zeniv.linux.org.uk ([195.92.253.2]:38816 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932237Ab0FHWPx (ORCPT ); Tue, 8 Jun 2010 18:15:53 -0400 Received: from viro by ZenIV.linux.org.uk with local (Exim 4.69 #1 (Red Hat Linux)) id 1OM75M-0004Xv-Vc for linux-fsdevel@vger.kernel.org; Tue, 08 Jun 2010 22:15:52 +0000 Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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 --- fs/inode.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/inode.c b/fs/inode.c index be2ba5b..139d475 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -313,10 +313,6 @@ void clear_inode(struct inode *inode) inode_sync_wait(inode); if (inode->i_sb->s_op->clear_inode) inode->i_sb->s_op->clear_inode(inode); - if (S_ISBLK(inode->i_mode) && inode->i_bdev) - bd_forget(inode); - if (S_ISCHR(inode->i_mode) && inode->i_cdev) - cd_forget(inode); inode->i_state = I_FREEING | I_CLEAR; } EXPORT_SYMBOL(clear_inode); @@ -334,6 +330,10 @@ static void evict(struct inode *inode, int delete) truncate_inode_pages(&inode->i_data, 0); clear_inode(inode); } + if (S_ISBLK(inode->i_mode) && inode->i_bdev) + bd_forget(inode); + if (S_ISCHR(inode->i_mode) && inode->i_cdev) + cd_forget(inode); } /* -- 1.5.6.5