Blame view

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