aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/overlayfs/dir.c2
-rw-r--r--fs/overlayfs/inode.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 82c129bfe58d..93872bb50230 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -260,7 +260,7 @@ static int ovl_instantiate(struct dentry *dentry, struct inode *inode,
260 * hashed directory inode aliases. 260 * hashed directory inode aliases.
261 */ 261 */
262 inode = ovl_get_inode(dentry->d_sb, &oip); 262 inode = ovl_get_inode(dentry->d_sb, &oip);
263 if (WARN_ON(IS_ERR(inode))) 263 if (IS_ERR(inode))
264 return PTR_ERR(inode); 264 return PTR_ERR(inode);
265 } else { 265 } else {
266 WARN_ON(ovl_inode_real(inode) != d_inode(newdentry)); 266 WARN_ON(ovl_inode_real(inode) != d_inode(newdentry));
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 3b7ed5d2279c..b48273e846ad 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -832,7 +832,7 @@ struct inode *ovl_get_inode(struct super_block *sb,
832 int fsid = bylower ? oip->lowerpath->layer->fsid : 0; 832 int fsid = bylower ? oip->lowerpath->layer->fsid : 0;
833 bool is_dir, metacopy = false; 833 bool is_dir, metacopy = false;
834 unsigned long ino = 0; 834 unsigned long ino = 0;
835 int err = -ENOMEM; 835 int err = oip->newinode ? -EEXIST : -ENOMEM;
836 836
837 if (!realinode) 837 if (!realinode)
838 realinode = d_inode(lowerdentry); 838 realinode = d_inode(lowerdentry);
@@ -917,6 +917,7 @@ out:
917 return inode; 917 return inode;
918 918
919out_err: 919out_err:
920 pr_warn_ratelimited("overlayfs: failed to get inode (%i)\n", err);
920 inode = ERR_PTR(err); 921 inode = ERR_PTR(err);
921 goto out; 922 goto out;
922} 923}