2006-01-16 19:50:04 +03:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2006-05-18 23:09:15 +04:00
* Copyright ( C ) 2004 - 2006 Red Hat , Inc . All rights reserved .
2006-01-16 19:50:04 +03:00
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2006-09-01 19:05:15 +04:00
* of the GNU General Public License version 2.
2006-01-16 19:50:04 +03:00
*/
# ifndef __EATTR_DOT_H__
# define __EATTR_DOT_H__
2006-09-05 18:39:21 +04:00
struct gfs2_inode ;
struct iattr ;
2006-01-16 19:50:04 +03:00
# define GFS2_EA_REC_LEN(ea) be32_to_cpu((ea)->ea_rec_len)
# define GFS2_EA_DATA_LEN(ea) be32_to_cpu((ea)->ea_data_len)
# define GFS2_EA_SIZE(ea) \
ALIGN ( sizeof ( struct gfs2_ea_header ) + ( ea ) - > ea_name_len + \
( ( GFS2_EA_IS_STUFFED ( ea ) ) ? GFS2_EA_DATA_LEN ( ea ) : \
2009-09-14 12:50:57 +04:00
( sizeof ( __be64 ) * ( ea ) - > ea_num_ptrs ) ) , 8 )
2006-01-16 19:50:04 +03:00
# define GFS2_EA_IS_STUFFED(ea) (!(ea)->ea_num_ptrs)
# define GFS2_EA_IS_LAST(ea) ((ea)->ea_flags & GFS2_EAFLAG_LAST)
# define GFS2_EAREQ_SIZE_STUFFED(er) \
ALIGN ( sizeof ( struct gfs2_ea_header ) + ( er ) - > er_name_len + ( er ) - > er_data_len , 8 )
# define GFS2_EA2NAME(ea) ((char *)((struct gfs2_ea_header *)(ea) + 1))
# define GFS2_EA2DATA(ea) (GFS2_EA2NAME(ea) + (ea)->ea_name_len)
# define GFS2_EA2DATAPTRS(ea) \
2006-10-14 18:46:30 +04:00
( ( __be64 * ) ( GFS2_EA2NAME ( ea ) + ALIGN ( ( ea ) - > ea_name_len , 8 ) ) )
2006-01-16 19:50:04 +03:00
# define GFS2_EA2NEXT(ea) \
( ( struct gfs2_ea_header * ) ( ( char * ) ( ea ) + GFS2_EA_REC_LEN ( ea ) ) )
# define GFS2_EA_BH2FIRST(bh) \
( ( struct gfs2_ea_header * ) ( ( bh ) - > b_data + sizeof ( struct gfs2_meta_header ) ) )
struct gfs2_ea_request {
2006-09-05 21:15:18 +04:00
const char * er_name ;
2006-01-16 19:50:04 +03:00
char * er_data ;
unsigned int er_name_len ;
unsigned int er_data_len ;
unsigned int er_type ; /* GFS2_EATYPE_... */
} ;
struct gfs2_ea_location {
struct buffer_head * el_bh ;
struct gfs2_ea_header * el_ea ;
struct gfs2_ea_header * el_prev ;
} ;
2009-11-13 12:52:56 +03:00
extern int __gfs2_xattr_set ( struct inode * inode , const char * name ,
const void * value , size_t size ,
int flags , int type ) ;
2009-08-26 21:41:32 +04:00
extern ssize_t gfs2_listxattr ( struct dentry * dentry , char * buffer , size_t size ) ;
extern int gfs2_ea_dealloc ( struct gfs2_inode * ip ) ;
2006-01-16 19:50:04 +03:00
/* Exported to acl.c */
2009-10-02 15:00:00 +04:00
extern int gfs2_xattr_acl_get ( struct gfs2_inode * ip , const char * name , char * * data ) ;
2006-05-22 18:08:35 +04:00
2006-01-16 19:50:04 +03:00
# endif /* __EATTR_DOT_H__ */