brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · b246cd0 Raw
74 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2017-2018 HUAWEI, Inc.4 *             https://www.huawei.com/5 */6#ifndef __EROFS_XATTR_H7#define __EROFS_XATTR_H8 9#include "internal.h"10#include <linux/posix_acl_xattr.h>11#include <linux/xattr.h>12 13/* Attribute not found */14#define ENOATTR         ENODATA15 16#ifdef CONFIG_EROFS_FS_XATTR17extern const struct xattr_handler erofs_xattr_user_handler;18extern const struct xattr_handler erofs_xattr_trusted_handler;19extern const struct xattr_handler erofs_xattr_security_handler;20 21static inline const char *erofs_xattr_prefix(unsigned int idx,22					     struct dentry *dentry)23{24	const struct xattr_handler *handler = NULL;25 26	static const struct xattr_handler * const xattr_handler_map[] = {27		[EROFS_XATTR_INDEX_USER] = &erofs_xattr_user_handler,28#ifdef CONFIG_EROFS_FS_POSIX_ACL29		[EROFS_XATTR_INDEX_POSIX_ACL_ACCESS] = &nop_posix_acl_access,30		[EROFS_XATTR_INDEX_POSIX_ACL_DEFAULT] = &nop_posix_acl_default,31#endif32		[EROFS_XATTR_INDEX_TRUSTED] = &erofs_xattr_trusted_handler,33#ifdef CONFIG_EROFS_FS_SECURITY34		[EROFS_XATTR_INDEX_SECURITY] = &erofs_xattr_security_handler,35#endif36	};37 38	if (idx && idx < ARRAY_SIZE(xattr_handler_map))39		handler = xattr_handler_map[idx];40 41	if (!xattr_handler_can_list(handler, dentry))42		return NULL;43 44	return xattr_prefix(handler);45}46 47extern const struct xattr_handler * const erofs_xattr_handlers[];48 49int erofs_xattr_prefixes_init(struct super_block *sb);50void erofs_xattr_prefixes_cleanup(struct super_block *sb);51int erofs_getxattr(struct inode *, int, const char *, void *, size_t);52ssize_t erofs_listxattr(struct dentry *, char *, size_t);53#else54static inline int erofs_xattr_prefixes_init(struct super_block *sb) { return 0; }55static inline void erofs_xattr_prefixes_cleanup(struct super_block *sb) {}56static inline int erofs_getxattr(struct inode *inode, int index,57				 const char *name, void *buffer,58				 size_t buffer_size)59{60	return -EOPNOTSUPP;61}62 63#define erofs_listxattr (NULL)64#define erofs_xattr_handlers (NULL)65#endif	/* !CONFIG_EROFS_FS_XATTR */66 67#ifdef CONFIG_EROFS_FS_POSIX_ACL68struct posix_acl *erofs_get_acl(struct inode *inode, int type, bool rcu);69#else70#define erofs_get_acl	(NULL)71#endif72 73#endif74