linux/fs/ext2/xattr.h
<<
>>
Prefs
   1/*
   2  File: linux/ext2_xattr.h
   3
   4  On-disk format of extended attributes for the ext2 filesystem.
   5
   6  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
   7*/
   8
   9#include <linux/init.h>
  10#include <linux/xattr.h>
  11
  12/* Magic value in attribute blocks */
  13#define EXT2_XATTR_MAGIC                0xEA020000
  14
  15/* Maximum number of references to one attribute block */
  16#define EXT2_XATTR_REFCOUNT_MAX         1024
  17
  18/* Name indexes */
  19#define EXT2_XATTR_INDEX_USER                   1
  20#define EXT2_XATTR_INDEX_POSIX_ACL_ACCESS       2
  21#define EXT2_XATTR_INDEX_POSIX_ACL_DEFAULT      3
  22#define EXT2_XATTR_INDEX_TRUSTED                4
  23#define EXT2_XATTR_INDEX_LUSTRE                 5
  24#define EXT2_XATTR_INDEX_SECURITY               6
  25
  26struct ext2_xattr_header {
  27        __le32  h_magic;        /* magic number for identification */
  28        __le32  h_refcount;     /* reference count */
  29        __le32  h_blocks;       /* number of disk blocks used */
  30        __le32  h_hash;         /* hash value of all attributes */
  31        __u32   h_reserved[4];  /* zero right now */
  32};
  33
  34struct ext2_xattr_entry {
  35        __u8    e_name_len;     /* length of name */
  36        __u8    e_name_index;   /* attribute name index */
  37        __le16  e_value_offs;   /* offset in disk block of value */
  38        __le32  e_value_block;  /* disk block attribute is stored on (n/i) */
  39        __le32  e_value_size;   /* size of attribute value */
  40        __le32  e_hash;         /* hash value of name and value */
  41        char    e_name[0];      /* attribute name */
  42};
  43
  44#define EXT2_XATTR_PAD_BITS             2
  45#define EXT2_XATTR_PAD          (1<<EXT2_XATTR_PAD_BITS)
  46#define EXT2_XATTR_ROUND                (EXT2_XATTR_PAD-1)
  47#define EXT2_XATTR_LEN(name_len) \
  48        (((name_len) + EXT2_XATTR_ROUND + \
  49        sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
  50#define EXT2_XATTR_NEXT(entry) \
  51        ( (struct ext2_xattr_entry *)( \
  52          (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
  53#define EXT2_XATTR_SIZE(size) \
  54        (((size) + EXT2_XATTR_ROUND) & ~EXT2_XATTR_ROUND)
  55
  56# ifdef CONFIG_EXT2_FS_XATTR
  57
  58extern const struct xattr_handler ext2_xattr_user_handler;
  59extern const struct xattr_handler ext2_xattr_trusted_handler;
  60extern const struct xattr_handler ext2_xattr_acl_access_handler;
  61extern const struct xattr_handler ext2_xattr_acl_default_handler;
  62extern const struct xattr_handler ext2_xattr_security_handler;
  63
  64extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
  65
  66extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
  67extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
  68
  69extern void ext2_xattr_delete_inode(struct inode *);
  70extern void ext2_xattr_put_super(struct super_block *);
  71
  72extern int init_ext2_xattr(void);
  73extern void exit_ext2_xattr(void);
  74
  75extern const struct xattr_handler *ext2_xattr_handlers[];
  76
  77# else  /* CONFIG_EXT2_FS_XATTR */
  78
  79static inline int
  80ext2_xattr_get(struct inode *inode, int name_index,
  81               const char *name, void *buffer, size_t size)
  82{
  83        return -EOPNOTSUPP;
  84}
  85
  86static inline int
  87ext2_xattr_set(struct inode *inode, int name_index, const char *name,
  88               const void *value, size_t size, int flags)
  89{
  90        return -EOPNOTSUPP;
  91}
  92
  93static inline void
  94ext2_xattr_delete_inode(struct inode *inode)
  95{
  96}
  97
  98static inline void
  99ext2_xattr_put_super(struct super_block *sb)
 100{
 101}
 102
 103static inline int
 104init_ext2_xattr(void)
 105{
 106        return 0;
 107}
 108
 109static inline void
 110exit_ext2_xattr(void)
 111{
 112}
 113
 114#define ext2_xattr_handlers NULL
 115
 116# endif  /* CONFIG_EXT2_FS_XATTR */
 117
 118#ifdef CONFIG_EXT2_FS_SECURITY
 119extern int ext2_init_security(struct inode *inode, struct inode *dir,
 120                              const struct qstr *qstr);
 121#else
 122static inline int ext2_init_security(struct inode *inode, struct inode *dir,
 123                                     const struct qstr *qstr)
 124{
 125        return 0;
 126}
 127#endif
 128