From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from merlin.infradead.org ([205.233.59.134]:58666 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751253AbdBXQlS (ORCPT ); Fri, 24 Feb 2017 11:41:18 -0500 Message-Id: <20170224162044.132686858@infradead.org> Date: Fri, 24 Feb 2017 16:43:33 +0100 From: Peter Zijlstra To: Al Viro , Linus Torvalds , Chris Mason Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells , elena.reshetova@intel.com, ishkamiel@gmail.com, dwindsor@gmail.com, gregkh@linuxfoundation.org, peterz@infradead.org Subject: [RFC][PATCH 04/10] fs: Restructure iput() References: <20170224154329.478276481@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline; filename=peterz-fs-inode-3b.patch Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Preparatory patch for elimination of iput_final(). No functional change. Signed-off-by: Peter Zijlstra (Intel) --- fs/inode.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) --- a/fs/inode.c +++ b/fs/inode.c @@ -1528,19 +1528,21 @@ void iput(struct inode *inode) { if (!inode) return; + BUG_ON(inode->i_state & I_CLEAR); retry: - if (atomic_dec_and_lock(&inode->i_count, &inode->i_lock)) { - if (inode->i_nlink && (inode->i_state & I_DIRTY_TIME)) { - atomic_inc(&inode->i_count); - inode->i_state &= ~I_DIRTY_TIME; - spin_unlock(&inode->i_lock); - trace_writeback_lazytime_iput(inode); - mark_inode_dirty_sync(inode); - goto retry; - } - iput_final(inode); + if (!atomic_dec_and_lock(&inode->i_count, &inode->i_lock)) + return; + + if (inode->i_nlink && (inode->i_state & I_DIRTY_TIME)) { + atomic_inc(&inode->i_count); + inode->i_state &= ~I_DIRTY_TIME; + spin_unlock(&inode->i_lock); + trace_writeback_lazytime_iput(inode); + mark_inode_dirty_sync(inode); + goto retry; } + iput_final(inode); } EXPORT_SYMBOL(iput);