diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2018-08-22 10:55:22 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-10-10 08:56:04 +0200 |
commit | a6aa74c2ad61278ebd419b36aecb7806070d1555 (patch) | |
tree | ffd631b930e374f085f03a5baff5fd17e0335ca7 /fs | |
parent | 90f06e1b81b9921290703aaf071aabb01f7ac012 (diff) |
ovl: set I_CREATING on inode being created
commit 6faf05c2b2b4fe70d9068067437649401531de0a upstream.
...otherwise there will be list corruption due to inode_sb_list_add() being
called for inode already on the sb list.
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: e950564b97fd ("vfs: don't evict uninitialized inode")
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
To: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/overlayfs/dir.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index f480b1a2cd2e..da9b3ccfde23 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -601,6 +601,10 @@ static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev, if (!inode) goto out_drop_write; + spin_lock(&inode->i_lock); + inode->i_state |= I_CREATING; + spin_unlock(&inode->i_lock); + inode_init_owner(inode, dentry->d_parent->d_inode, mode); attr.mode = inode->i_mode; |