root/fs/ext2/xattr.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ext2_xattr_get
  2. ext2_xattr_set
  3. ext2_xattr_delete_inode
  4. ext2_xattr_destroy_cache
  5. ext2_init_security

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

/* [<][>][^][v][top][bottom][index][help] */