diff options
| -rw-r--r-- | fs/overlayfs/export.c | 2 | ||||
| -rw-r--r-- | fs/overlayfs/inode.c | 4 | ||||
| -rw-r--r-- | fs/overlayfs/namei.c | 4 | ||||
| -rw-r--r-- | fs/overlayfs/overlayfs.h | 6 | ||||
| -rw-r--r-- | fs/overlayfs/super.c | 13 | 
5 files changed, 21 insertions, 8 deletions
| diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c index 2eada97bbd23..e065a5b9a442 100644 --- a/fs/overlayfs/export.c +++ b/fs/overlayfs/export.c @@ -259,7 +259,7 @@ static int ovl_encode_fh(struct inode *inode, u32 *fid, int *max_len,  		return FILEID_INVALID;  	dentry = d_find_any_alias(inode); -	if (WARN_ON(!dentry)) +	if (!dentry)  		return FILEID_INVALID;  	bytes = ovl_dentry_to_fid(ofs, dentry, fid, buflen); diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 7922b619f6c8..b45fea69fff3 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -454,6 +454,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)  	return res;  } +#ifdef CONFIG_FS_POSIX_ACL  /*   * Apply the idmapping of the layer to POSIX ACLs. The caller must pass a clone   * of the POSIX ACLs retrieved from the lower layer to this function to not @@ -497,7 +498,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu)  	struct posix_acl *acl, *clone;  	struct path realpath; -	if (!IS_ENABLED(CONFIG_FS_POSIX_ACL) || !IS_POSIXACL(realinode)) +	if (!IS_POSIXACL(realinode))  		return NULL;  	/* Careful in RCU walk mode */ @@ -543,6 +544,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu)  	posix_acl_release(acl);  	return clone;  } +#endif  int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)  { diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c index 65c4346a5b43..69dc577974f8 100644 --- a/fs/overlayfs/namei.c +++ b/fs/overlayfs/namei.c @@ -42,7 +42,7 @@ static int ovl_check_redirect(struct path *path, struct ovl_lookup_data *d,  		 * One of the ancestor path elements in an absolute path  		 * lookup in ovl_lookup_layer() could have been opaque and  		 * that will stop further lookup in lower layers (d->stop=true) -		 * But we have found an absolute redirect in decendant path +		 * But we have found an absolute redirect in descendant path  		 * element and that should force continue lookup in lower  		 * layers (reset d->stop).  		 */ @@ -648,7 +648,7 @@ static int ovl_get_index_name_fh(struct ovl_fh *fh, struct qstr *name)   * If the index dentry for a copy up origin inode is positive, but points   * to an inode different than the upper inode, then either the upper inode   * has been copied up and not indexed or it was indexed, but since then - * index dir was cleared. Either way, that index cannot be used to indentify + * index dir was cleared. Either way, that index cannot be used to identify   * the overlay inode.   */  int ovl_get_index_name(struct ovl_fs *ofs, struct dentry *origin, diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 6ec815b84d48..87759165d32b 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -590,7 +590,13 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,  int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,  		  void *value, size_t size);  ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); + +#ifdef CONFIG_FS_POSIX_ACL  struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu); +#else +#define ovl_get_acl	NULL +#endif +  int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);  bool ovl_is_private_xattr(struct super_block *sb, const char *name); diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index e0a2e0468ee7..ec746d447f1b 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -301,7 +301,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait)  /**   * ovl_statfs - * @sb: The overlayfs super block + * @dentry: The dentry to query   * @buf: The struct kstatfs to fill in with stats   *   * Get the filesystem statistics.  As writes always target the upper layer @@ -349,6 +349,8 @@ static inline int ovl_xino_def(void)  /**   * ovl_show_options + * @m: the seq_file handle + * @dentry: The dentry to query   *   * Prints the mount options for a given superblock.   * Returns zero; does not fail. @@ -1412,11 +1414,12 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,  	 */  	err = ovl_setxattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE, "0", 1);  	if (err) { +		pr_warn("failed to set xattr on upper\n");  		ofs->noxattr = true;  		if (ofs->config.index || ofs->config.metacopy) {  			ofs->config.index = false;  			ofs->config.metacopy = false; -			pr_warn("upper fs does not support xattr, falling back to index=off,metacopy=off.\n"); +			pr_warn("...falling back to index=off,metacopy=off.\n");  		}  		/*  		 * xattr support is required for persistent st_ino. @@ -1424,8 +1427,10 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,  		 */  		if (ofs->config.xino == OVL_XINO_AUTO) {  			ofs->config.xino = OVL_XINO_OFF; -			pr_warn("upper fs does not support xattr, falling back to xino=off.\n"); +			pr_warn("...falling back to xino=off.\n");  		} +		if (err == -EPERM && !ofs->config.userxattr) +			pr_info("try mounting with 'userxattr' option\n");  		err = 0;  	} else {  		ovl_removexattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE); @@ -2032,7 +2037,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)  	sb->s_stack_depth = 0;  	sb->s_maxbytes = MAX_LFS_FILESIZE;  	atomic_long_set(&ofs->last_ino, 1); -	/* Assume underlaying fs uses 32bit inodes unless proven otherwise */ +	/* Assume underlying fs uses 32bit inodes unless proven otherwise */  	if (ofs->config.xino != OVL_XINO_OFF) {  		ofs->xino_mode = BITS_PER_LONG - 32;  		if (!ofs->xino_mode) { | 
