Messages in this thread | | | Date | Thu, 7 May 2015 09:58:26 +0200 | From | Jan Kara <> | Subject | Re: [PATCH V2 1/2 linux-next] affs: mark new inode before hashtable insertion |
| |
On Wed 06-05-15 17:54:52, 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> Looks good. You can add: Reviewed-by: Jan Kara <jack@suse.cz>
Honza
> --- > V2: -remove insert_inode_hash() to avoid double insert > -update patch subject > > fs/affs/inode.c | 4 ++-- > fs/affs/namei.c | 6 ++++++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/fs/affs/inode.c b/fs/affs/inode.c > index 1734950..a9dbb41 100644 > --- a/fs/affs/inode.c > +++ b/fs/affs/inode.c > @@ -323,8 +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; > - > - insert_inode_hash(inode); > + if (insert_inode_locked(inode) < 0) > + goto err_inode; > > return inode; > > 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; > } > -- > 2.4.0 > -- Jan Kara <jack@suse.cz> SUSE Labs, CR
| |