Blame view
fs/ext4/xattr.h
4.46 KB
ac27a0ec1
|
1 |
/* |
617ba13b3
|
2 |
File: fs/ext4/xattr.h |
ac27a0ec1
|
3 |
|
617ba13b3
|
4 |
On-disk format of extended attributes for the ext4 filesystem. |
ac27a0ec1
|
5 6 7 8 9 10 11 |
(C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org> */ #include <linux/xattr.h> /* Magic value in attribute blocks */ |
617ba13b3
|
12 |
#define EXT4_XATTR_MAGIC 0xEA020000 |
ac27a0ec1
|
13 14 |
/* Maximum number of references to one attribute block */ |
617ba13b3
|
15 |
#define EXT4_XATTR_REFCOUNT_MAX 1024 |
ac27a0ec1
|
16 17 |
/* Name indexes */ |
617ba13b3
|
18 19 20 21 22 23 24 25 |
#define EXT4_XATTR_INDEX_USER 1 #define EXT4_XATTR_INDEX_POSIX_ACL_ACCESS 2 #define EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT 3 #define EXT4_XATTR_INDEX_TRUSTED 4 #define EXT4_XATTR_INDEX_LUSTRE 5 #define EXT4_XATTR_INDEX_SECURITY 6 struct ext4_xattr_header { |
ac27a0ec1
|
26 27 28 29 30 31 |
__le32 h_magic; /* magic number for identification */ __le32 h_refcount; /* reference count */ __le32 h_blocks; /* number of disk blocks used */ __le32 h_hash; /* hash value of all attributes */ __u32 h_reserved[4]; /* zero right now */ }; |
617ba13b3
|
32 |
struct ext4_xattr_ibody_header { |
ac27a0ec1
|
33 34 |
__le32 h_magic; /* magic number for identification */ }; |
617ba13b3
|
35 |
struct ext4_xattr_entry { |
ac27a0ec1
|
36 37 38 39 40 41 42 43 |
__u8 e_name_len; /* length of name */ __u8 e_name_index; /* attribute name index */ __le16 e_value_offs; /* offset in disk block of value */ __le32 e_value_block; /* disk block attribute is stored on (n/i) */ __le32 e_value_size; /* size of attribute value */ __le32 e_hash; /* hash value of name and value */ char e_name[0]; /* attribute name */ }; |
617ba13b3
|
44 45 46 47 48 49 50 51 52 53 54 |
#define EXT4_XATTR_PAD_BITS 2 #define EXT4_XATTR_PAD (1<<EXT4_XATTR_PAD_BITS) #define EXT4_XATTR_ROUND (EXT4_XATTR_PAD-1) #define EXT4_XATTR_LEN(name_len) \ (((name_len) + EXT4_XATTR_ROUND + \ sizeof(struct ext4_xattr_entry)) & ~EXT4_XATTR_ROUND) #define EXT4_XATTR_NEXT(entry) \ ( (struct ext4_xattr_entry *)( \ (char *)(entry) + EXT4_XATTR_LEN((entry)->e_name_len)) ) #define EXT4_XATTR_SIZE(size) \ (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND) |
ac27a0ec1
|
55 |
|
6dd4ee7ca
|
56 57 58 59 60 61 |
#define IHDR(inode, raw_inode) \ ((struct ext4_xattr_ibody_header *) \ ((void *)raw_inode + \ EXT4_GOOD_OLD_INODE_SIZE + \ EXT4_I(inode)->i_extra_isize)) #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1)) |
617ba13b3
|
62 |
# ifdef CONFIG_EXT4DEV_FS_XATTR |
ac27a0ec1
|
63 |
|
617ba13b3
|
64 65 66 67 68 |
extern struct xattr_handler ext4_xattr_user_handler; extern struct xattr_handler ext4_xattr_trusted_handler; extern struct xattr_handler ext4_xattr_acl_access_handler; extern struct xattr_handler ext4_xattr_acl_default_handler; extern struct xattr_handler ext4_xattr_security_handler; |
ac27a0ec1
|
69 |
|
617ba13b3
|
70 |
extern ssize_t ext4_listxattr(struct dentry *, char *, size_t); |
ac27a0ec1
|
71 |
|
617ba13b3
|
72 73 74 75 |
extern int ext4_xattr_get(struct inode *, int, const char *, void *, size_t); extern int ext4_xattr_list(struct inode *, char *, size_t); extern int ext4_xattr_set(struct inode *, int, const char *, const void *, size_t, int); extern int ext4_xattr_set_handle(handle_t *, struct inode *, int, const char *, const void *, size_t, int); |
ac27a0ec1
|
76 |
|
617ba13b3
|
77 78 |
extern void ext4_xattr_delete_inode(handle_t *, struct inode *); extern void ext4_xattr_put_super(struct super_block *); |
ac27a0ec1
|
79 |
|
6dd4ee7ca
|
80 81 |
extern int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, struct ext4_inode *raw_inode, handle_t *handle); |
617ba13b3
|
82 83 |
extern int init_ext4_xattr(void); extern void exit_ext4_xattr(void); |
ac27a0ec1
|
84 |
|
617ba13b3
|
85 |
extern struct xattr_handler *ext4_xattr_handlers[]; |
ac27a0ec1
|
86 |
|
617ba13b3
|
87 |
# else /* CONFIG_EXT4DEV_FS_XATTR */ |
ac27a0ec1
|
88 89 |
static inline int |
617ba13b3
|
90 |
ext4_xattr_get(struct inode *inode, int name_index, const char *name, |
ac27a0ec1
|
91 92 93 94 95 96 |
void *buffer, size_t size, int flags) { return -EOPNOTSUPP; } static inline int |
617ba13b3
|
97 |
ext4_xattr_list(struct inode *inode, void *buffer, size_t size) |
ac27a0ec1
|
98 99 100 101 102 |
{ return -EOPNOTSUPP; } static inline int |
617ba13b3
|
103 |
ext4_xattr_set(struct inode *inode, int name_index, const char *name, |
ac27a0ec1
|
104 105 106 107 108 109 |
const void *value, size_t size, int flags) { return -EOPNOTSUPP; } static inline int |
617ba13b3
|
110 |
ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, |
ac27a0ec1
|
111 112 113 114 115 116 |
const char *name, const void *value, size_t size, int flags) { return -EOPNOTSUPP; } static inline void |
617ba13b3
|
117 |
ext4_xattr_delete_inode(handle_t *handle, struct inode *inode) |
ac27a0ec1
|
118 119 120 121 |
{ } static inline void |
617ba13b3
|
122 |
ext4_xattr_put_super(struct super_block *sb) |
ac27a0ec1
|
123 124 125 126 |
{ } static inline int |
617ba13b3
|
127 |
init_ext4_xattr(void) |
ac27a0ec1
|
128 129 130 131 132 |
{ return 0; } static inline void |
617ba13b3
|
133 |
exit_ext4_xattr(void) |
ac27a0ec1
|
134 135 |
{ } |
6dd4ee7ca
|
136 137 138 139 140 141 |
static inline int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize, struct ext4_inode *raw_inode, handle_t *handle) { return -EOPNOTSUPP; } |
617ba13b3
|
142 |
#define ext4_xattr_handlers NULL |
ac27a0ec1
|
143 |
|
617ba13b3
|
144 |
# endif /* CONFIG_EXT4DEV_FS_XATTR */ |
ac27a0ec1
|
145 |
|
617ba13b3
|
146 147 |
#ifdef CONFIG_EXT4DEV_FS_SECURITY extern int ext4_init_security(handle_t *handle, struct inode *inode, |
ac27a0ec1
|
148 149 |
struct inode *dir); #else |
617ba13b3
|
150 |
static inline int ext4_init_security(handle_t *handle, struct inode *inode, |
ac27a0ec1
|
151 152 153 154 155 |
struct inode *dir) { return 0; } #endif |