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 <a...@linux-foundation.org> Cc: Alexander Viro <v...@zeniv.linux.org.uk> Cc: Jan Kara <j...@suse.cz> Suggested-by: Jan Kara <j...@suse.cz> Reviewed-by: Jan Kara <j...@suse.cz> Signed-off-by: Fabian Frederick <f...@skynet.be> --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/