@ -65,6 +65,32 @@ struct ext4_xattr_entry {
EXT4_I ( inode ) - > i_extra_isize ) )
# define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
# 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)
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 ;
} ;
# ifdef CONFIG_EXT4_FS_XATTR
extern const struct xattr_handler ext4_xattr_user_handler ;
@ -90,6 +116,15 @@ extern void ext4_exit_xattr(void);
extern const struct xattr_handler * ext4_xattr_handlers [ ] ;
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_set ( handle_t * handle , struct inode * inode ,
struct ext4_xattr_info * i ,
struct ext4_xattr_ibody_find * is ) ;
# else /* CONFIG_EXT4_FS_XATTR */
static inline int
@ -143,6 +178,29 @@ ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
# define ext4_xattr_handlers NULL
static inline int
ext4_xattr_ibody_find ( struct inode * inode , struct ext4_xattr_info * i ,
struct ext4_xattr_ibody_find * is )
{
return - EOPNOTSUPP ;
}
static inline int
ext4_xattr_ibody_set ( handle_t * handle , struct inode * inode ,
struct ext4_xattr_info * i ,
struct ext4_xattr_ibody_find * is )
{
return - EOPNOTSUPP ;
}
static inline int
ext4_xattr_ibody_get ( struct inode * inode , int name_index ,
const char * name ,
void * buffer , size_t buffer_size )
{
return - EOPNOTSUPP ;
}
# endif /* CONFIG_EXT4_FS_XATTR */
# ifdef CONFIG_EXT4_FS_SECURITY