diff options
Diffstat (limited to 'fs/ext4/xattr.h')
| -rw-r--r-- | fs/ext4/xattr.h | 105 | 
1 files changed, 43 insertions, 62 deletions
diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h index 1ef16520b95..29bedf5589f 100644 --- a/fs/ext4/xattr.h +++ b/fs/ext4/xattr.h @@ -21,13 +21,17 @@  #define EXT4_XATTR_INDEX_TRUSTED		4  #define	EXT4_XATTR_INDEX_LUSTRE			5  #define EXT4_XATTR_INDEX_SECURITY	        6 +#define EXT4_XATTR_INDEX_SYSTEM			7 +#define EXT4_XATTR_INDEX_RICHACL		8  struct ext4_xattr_header {  	__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 */ +	__le32	h_checksum;	/* crc32c(uuid+id+xattrblock) */ +				/* id = inum if refcount=1, blknum otherwise */ +	__u32	h_reserved[3];	/* zero right now */  };  struct ext4_xattr_ibody_header { @@ -63,12 +67,35 @@ struct ext4_xattr_entry {  		EXT4_I(inode)->i_extra_isize))  #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1)) -# ifdef CONFIG_EXT4_FS_XATTR +#define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data)) +#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr)) +#define BFIRST(bh) ENTRY(BHDR(bh)+1) +#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0) + +#define EXT4_ZERO_XATTR_VALUE ((void *)-1) + +struct ext4_xattr_info { +	int name_index; +	const char *name; +	const void *value; +	size_t value_len; +}; + +struct ext4_xattr_search { +	struct ext4_xattr_entry *first; +	void *base; +	void *end; +	struct ext4_xattr_entry *here; +	int not_found; +}; + +struct ext4_xattr_ibody_find { +	struct ext4_xattr_search s; +	struct ext4_iloc iloc; +};  extern const struct xattr_handler ext4_xattr_user_handler;  extern const struct xattr_handler ext4_xattr_trusted_handler; -extern const struct xattr_handler ext4_xattr_acl_access_handler; -extern const struct xattr_handler ext4_xattr_acl_default_handler;  extern const struct xattr_handler ext4_xattr_security_handler;  extern ssize_t ext4_listxattr(struct dentry *, char *, size_t); @@ -83,72 +110,26 @@ extern void ext4_xattr_put_super(struct super_block *);  extern int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,  			    struct ext4_inode *raw_inode, handle_t *handle); -extern int __init ext4_init_xattr(void); -extern void ext4_exit_xattr(void); -  extern const struct xattr_handler *ext4_xattr_handlers[]; -# else  /* CONFIG_EXT4_FS_XATTR */ - -static inline int -ext4_xattr_get(struct inode *inode, int name_index, const char *name, -	       void *buffer, size_t size, int flags) -{ -	return -EOPNOTSUPP; -} - -static inline int -ext4_xattr_set(struct inode *inode, int name_index, const char *name, -	       const void *value, size_t size, int flags) -{ -	return -EOPNOTSUPP; -} - -static inline int -ext4_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index, -	       const char *name, const void *value, size_t size, int flags) -{ -	return -EOPNOTSUPP; -} - -static inline void -ext4_xattr_delete_inode(handle_t *handle, struct inode *inode) -{ -} - -static inline void -ext4_xattr_put_super(struct super_block *sb) -{ -} - -static __init inline int -ext4_init_xattr(void) -{ -	return 0; -} - -static inline void -ext4_exit_xattr(void) -{ -} - -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; -} - -#define ext4_xattr_handlers	NULL +extern int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i, +				 struct ext4_xattr_ibody_find *is); +extern int ext4_xattr_ibody_get(struct inode *inode, int name_index, +				const char *name, +				void *buffer, size_t buffer_size); +extern int ext4_xattr_ibody_inline_set(handle_t *handle, struct inode *inode, +				       struct ext4_xattr_info *i, +				       struct ext4_xattr_ibody_find *is); -# endif  /* CONFIG_EXT4_FS_XATTR */ +extern struct mb_cache *ext4_xattr_create_cache(char *name); +extern void ext4_xattr_destroy_cache(struct mb_cache *);  #ifdef CONFIG_EXT4_FS_SECURITY  extern int ext4_init_security(handle_t *handle, struct inode *inode, -				struct inode *dir); +			      struct inode *dir, const struct qstr *qstr);  #else  static inline int ext4_init_security(handle_t *handle, struct inode *inode, -				struct inode *dir) +				     struct inode *dir, const struct qstr *qstr)  {  	return 0;  }  | 
