From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754933AbbEFHEQ (ORCPT ); Wed, 6 May 2015 03:04:16 -0400 Received: from cantor2.suse.de ([195.135.220.15]:58420 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754622AbbEFHEO (ORCPT ); Wed, 6 May 2015 03:04:14 -0400 Date: Wed, 6 May 2015 09:04:08 +0200 From: Jan Kara To: Fabian Frederick Cc: linux-kernel@vger.kernel.org, Andrew Morton , Alexander Viro , Jan Kara Subject: Re: [PATCH 1/2 linux-next] fs/affs/inode.c: mark new inode before hashtable insertion Message-ID: <20150506070408.GA3872@quack.suse.cz> References: <1430849170-1171-1-git-send-email-fabf@skynet.be> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1430849170-1171-1-git-send-email-fabf@skynet.be> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue 05-05-15 20:06:09, Fabian Frederick wrote: > AFFS didn't mark new inode to I_NEW state like other FS > using insert_inode_locked() during creation. > This patch also unlocks inode when setup is complete > or operation failed. > > Problem appeared when trying to add tmpfile support. > > Cc: Andrew Morton > Cc: Alexander Viro > Cc: Jan Kara > Suggested-by: Jan Kara > Signed-off-by: Fabian Frederick > --- > fs/affs/inode.c | 2 ++ > fs/affs/namei.c | 6 ++++++ > 2 files changed, 8 insertions(+) > > diff --git a/fs/affs/inode.c b/fs/affs/inode.c > index 1734950..859a9cb 100644 > --- a/fs/affs/inode.c > +++ b/fs/affs/inode.c > @@ -323,6 +323,8 @@ affs_new_inode(struct inode *dir) > AFFS_I(inode)->i_pa_cnt = 0; > AFFS_I(inode)->i_extcnt = 1; > AFFS_I(inode)->i_ext_last = ~1; > + if (insert_inode_locked(inode) < 0) > + goto err_inode; > > insert_inode_hash(inode); But you need to also remove insert_inode_hash() to avoid double insert. Otherwise the patch looks good. Honza > > diff --git a/fs/affs/namei.c b/fs/affs/namei.c > index 181e05b..b183540 100644 > --- a/fs/affs/namei.c > +++ b/fs/affs/namei.c > @@ -281,9 +281,11 @@ affs_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool excl) > error = affs_add_entry(dir, inode, dentry, ST_FILE); > if (error) { > clear_nlink(inode); > + unlock_new_inode(inode); > iput(inode); > return error; > } > + unlock_new_inode(inode); > return 0; > } > > @@ -310,9 +312,11 @@ affs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) > if (error) { > clear_nlink(inode); > mark_inode_dirty(inode); > + unlock_new_inode(inode); > iput(inode); > return error; > } > + unlock_new_inode(inode); > return 0; > } > > @@ -391,11 +395,13 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) > if (error) > goto err; > > + unlock_new_inode(inode); > return 0; > > err: > clear_nlink(inode); > mark_inode_dirty(inode); > + unlock_new_inode(inode); > iput(inode); > return error; > } > -- > 1.9.1 > -- Jan Kara SUSE Labs, CR