[PATCH 3/4] erofs: unexport erofs_getxattr()

Hongbo Li lihongbo22 at huawei.com
Tue Dec 30 13:46:45 AEDT 2025



On 2025/12/29 17:29, Gao Xiang wrote:
> No external users other than those in xattr.c.
> 
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>

Reviewed-by: Hongbo Li <lihongbo22 at huawei.com>

Thanks,
Hongbo

> ---
>   fs/erofs/xattr.c | 108 +++++++++++++++++++++++------------------------
>   fs/erofs/xattr.h |   7 ---
>   2 files changed, 54 insertions(+), 61 deletions(-)
> 
> diff --git a/fs/erofs/xattr.c b/fs/erofs/xattr.c
> index 396536d9a862..972941ecb71c 100644
> --- a/fs/erofs/xattr.c
> +++ b/fs/erofs/xattr.c
> @@ -125,58 +125,6 @@ static int erofs_init_inode_xattrs(struct inode *inode)
>   	return ret;
>   }
>   
> -static bool erofs_xattr_user_list(struct dentry *dentry)
> -{
> -	return test_opt(&EROFS_SB(dentry->d_sb)->opt, XATTR_USER);
> -}
> -
> -static bool erofs_xattr_trusted_list(struct dentry *dentry)
> -{
> -	return capable(CAP_SYS_ADMIN);
> -}
> -
> -static int erofs_xattr_generic_get(const struct xattr_handler *handler,
> -				   struct dentry *unused, struct inode *inode,
> -				   const char *name, void *buffer, size_t size)
> -{
> -	if (handler->flags == EROFS_XATTR_INDEX_USER &&
> -	    !test_opt(&EROFS_I_SB(inode)->opt, XATTR_USER))
> -		return -EOPNOTSUPP;
> -
> -	return erofs_getxattr(inode, handler->flags, name, buffer, size);
> -}
> -
> -const struct xattr_handler erofs_xattr_user_handler = {
> -	.prefix	= XATTR_USER_PREFIX,
> -	.flags	= EROFS_XATTR_INDEX_USER,
> -	.list	= erofs_xattr_user_list,
> -	.get	= erofs_xattr_generic_get,
> -};
> -
> -const struct xattr_handler erofs_xattr_trusted_handler = {
> -	.prefix	= XATTR_TRUSTED_PREFIX,
> -	.flags	= EROFS_XATTR_INDEX_TRUSTED,
> -	.list	= erofs_xattr_trusted_list,
> -	.get	= erofs_xattr_generic_get,
> -};
> -
> -#ifdef CONFIG_EROFS_FS_SECURITY
> -const struct xattr_handler __maybe_unused erofs_xattr_security_handler = {
> -	.prefix	= XATTR_SECURITY_PREFIX,
> -	.flags	= EROFS_XATTR_INDEX_SECURITY,
> -	.get	= erofs_xattr_generic_get,
> -};
> -#endif
> -
> -const struct xattr_handler * const erofs_xattr_handlers[] = {
> -	&erofs_xattr_user_handler,
> -	&erofs_xattr_trusted_handler,
> -#ifdef CONFIG_EROFS_FS_SECURITY
> -	&erofs_xattr_security_handler,
> -#endif
> -	NULL,
> -};
> -
>   static int erofs_xattr_copy_to_buffer(struct erofs_xattr_iter *it,
>   				      unsigned int len)
>   {
> @@ -391,8 +339,8 @@ static int erofs_xattr_iter_shared(struct erofs_xattr_iter *it,
>   	return i ? ret : -ENODATA;
>   }
>   
> -int erofs_getxattr(struct inode *inode, int index, const char *name,
> -		   void *buffer, size_t buffer_size)
> +static int erofs_getxattr(struct inode *inode, int index, const char *name,
> +			  void *buffer, size_t buffer_size)
>   {
>   	int ret;
>   	unsigned int hashbit;
> @@ -462,6 +410,58 @@ ssize_t erofs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
>   	return ret ? ret : it.buffer_ofs;
>   }
>   
> +static bool erofs_xattr_user_list(struct dentry *dentry)
> +{
> +	return test_opt(&EROFS_SB(dentry->d_sb)->opt, XATTR_USER);
> +}
> +
> +static bool erofs_xattr_trusted_list(struct dentry *dentry)
> +{
> +	return capable(CAP_SYS_ADMIN);
> +}
> +
> +static int erofs_xattr_generic_get(const struct xattr_handler *handler,
> +				   struct dentry *unused, struct inode *inode,
> +				   const char *name, void *buffer, size_t size)
> +{
> +	if (handler->flags == EROFS_XATTR_INDEX_USER &&
> +	    !test_opt(&EROFS_I_SB(inode)->opt, XATTR_USER))
> +		return -EOPNOTSUPP;
> +
> +	return erofs_getxattr(inode, handler->flags, name, buffer, size);
> +}
> +
> +const struct xattr_handler erofs_xattr_user_handler = {
> +	.prefix	= XATTR_USER_PREFIX,
> +	.flags	= EROFS_XATTR_INDEX_USER,
> +	.list	= erofs_xattr_user_list,
> +	.get	= erofs_xattr_generic_get,
> +};
> +
> +const struct xattr_handler erofs_xattr_trusted_handler = {
> +	.prefix	= XATTR_TRUSTED_PREFIX,
> +	.flags	= EROFS_XATTR_INDEX_TRUSTED,
> +	.list	= erofs_xattr_trusted_list,
> +	.get	= erofs_xattr_generic_get,
> +};
> +
> +#ifdef CONFIG_EROFS_FS_SECURITY
> +const struct xattr_handler __maybe_unused erofs_xattr_security_handler = {
> +	.prefix	= XATTR_SECURITY_PREFIX,
> +	.flags	= EROFS_XATTR_INDEX_SECURITY,
> +	.get	= erofs_xattr_generic_get,
> +};
> +#endif
> +
> +const struct xattr_handler * const erofs_xattr_handlers[] = {
> +	&erofs_xattr_user_handler,
> +	&erofs_xattr_trusted_handler,
> +#ifdef CONFIG_EROFS_FS_SECURITY
> +	&erofs_xattr_security_handler,
> +#endif
> +	NULL,
> +};
> +
>   void erofs_xattr_prefixes_cleanup(struct super_block *sb)
>   {
>   	struct erofs_sb_info *sbi = EROFS_SB(sb);
> diff --git a/fs/erofs/xattr.h b/fs/erofs/xattr.h
> index 6317caa8413e..ee1d8c310d97 100644
> --- a/fs/erofs/xattr.h
> +++ b/fs/erofs/xattr.h
> @@ -45,17 +45,10 @@ extern const struct xattr_handler * const erofs_xattr_handlers[];
>   
>   int erofs_xattr_prefixes_init(struct super_block *sb);
>   void erofs_xattr_prefixes_cleanup(struct super_block *sb);
> -int erofs_getxattr(struct inode *, int, const char *, void *, size_t);
>   ssize_t erofs_listxattr(struct dentry *, char *, size_t);
>   #else
>   static inline int erofs_xattr_prefixes_init(struct super_block *sb) { return 0; }
>   static inline void erofs_xattr_prefixes_cleanup(struct super_block *sb) {}
> -static inline int erofs_getxattr(struct inode *inode, int index,
> -				 const char *name, void *buffer,
> -				 size_t buffer_size)
> -{
> -	return -EOPNOTSUPP;
> -}
>   
>   #define erofs_listxattr (NULL)
>   #define erofs_xattr_handlers (NULL)


More information about the Linux-erofs mailing list