Messages in this thread | | | Date | Wed, 6 May 2015 09:04:08 +0200 | From | Jan Kara <> | Subject | Re: [PATCH 1/2 linux-next] fs/affs/inode.c: mark new inode before hashtable insertion |
| |
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 <akpm@linux-foundation.org> > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > Cc: Jan Kara <jack@suse.cz> > Suggested-by: Jan Kara <jack@suse.cz> > Signed-off-by: Fabian Frederick <fabf@skynet.be> > --- > 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 <jack@suse.cz> SUSE Labs, CR
| |