include/linux/reiserfs_xattr.h
changeset 0 aa628870c1d3
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 /*
       
     2   File: linux/reiserfs_xattr.h
       
     3 */
       
     4 
       
     5 #ifndef _LINUX_REISERFS_XATTR_H
       
     6 #define _LINUX_REISERFS_XATTR_H
       
     7 
       
     8 #include <linux/types.h>
       
     9 
       
    10 /* Magic value in header */
       
    11 #define REISERFS_XATTR_MAGIC 0x52465841	/* "RFXA" */
       
    12 
       
    13 struct reiserfs_xattr_header {
       
    14 	__le32 h_magic;		/* magic number for identification */
       
    15 	__le32 h_hash;		/* hash of the value */
       
    16 };
       
    17 
       
    18 #ifdef __KERNEL__
       
    19 
       
    20 #include <linux/init.h>
       
    21 #include <linux/list.h>
       
    22 #include <linux/rwsem.h>
       
    23 #include <linux/reiserfs_fs_i.h>
       
    24 #include <linux/reiserfs_fs.h>
       
    25 
       
    26 struct inode;
       
    27 struct dentry;
       
    28 struct iattr;
       
    29 struct super_block;
       
    30 struct nameidata;
       
    31 
       
    32 struct reiserfs_xattr_handler {
       
    33 	char *prefix;
       
    34 	int (*init) (void);
       
    35 	void (*exit) (void);
       
    36 	int (*get) (struct inode * inode, const char *name, void *buffer,
       
    37 		    size_t size);
       
    38 	int (*set) (struct inode * inode, const char *name, const void *buffer,
       
    39 		    size_t size, int flags);
       
    40 	int (*del) (struct inode * inode, const char *name);
       
    41 	int (*list) (struct inode * inode, const char *name, int namelen,
       
    42 		     char *out);
       
    43 	struct list_head handlers;
       
    44 };
       
    45 
       
    46 #ifdef CONFIG_REISERFS_FS_XATTR
       
    47 #define is_reiserfs_priv_object(inode) IS_PRIVATE(inode)
       
    48 #define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir)
       
    49 ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name,
       
    50 			  void *buffer, size_t size);
       
    51 int reiserfs_setxattr(struct dentry *dentry, const char *name,
       
    52 		      const void *value, size_t size, int flags);
       
    53 ssize_t reiserfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
       
    54 int reiserfs_removexattr(struct dentry *dentry, const char *name);
       
    55 int reiserfs_delete_xattrs(struct inode *inode);
       
    56 int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs);
       
    57 int reiserfs_xattr_init(struct super_block *sb, int mount_flags);
       
    58 int reiserfs_permission(struct inode *inode, int mask);
       
    59 
       
    60 int reiserfs_xattr_del(struct inode *, const char *);
       
    61 int reiserfs_xattr_get(const struct inode *, const char *, void *, size_t);
       
    62 int reiserfs_xattr_set(struct inode *, const char *, const void *, size_t, int);
       
    63 
       
    64 extern struct reiserfs_xattr_handler user_handler;
       
    65 extern struct reiserfs_xattr_handler trusted_handler;
       
    66 extern struct reiserfs_xattr_handler security_handler;
       
    67 
       
    68 int reiserfs_xattr_register_handlers(void) __init;
       
    69 void reiserfs_xattr_unregister_handlers(void);
       
    70 
       
    71 static inline void reiserfs_write_lock_xattrs(struct super_block *sb)
       
    72 {
       
    73 	down_write(&REISERFS_XATTR_DIR_SEM(sb));
       
    74 }
       
    75 static inline void reiserfs_write_unlock_xattrs(struct super_block *sb)
       
    76 {
       
    77 	up_write(&REISERFS_XATTR_DIR_SEM(sb));
       
    78 }
       
    79 static inline void reiserfs_read_lock_xattrs(struct super_block *sb)
       
    80 {
       
    81 	down_read(&REISERFS_XATTR_DIR_SEM(sb));
       
    82 }
       
    83 
       
    84 static inline void reiserfs_read_unlock_xattrs(struct super_block *sb)
       
    85 {
       
    86 	up_read(&REISERFS_XATTR_DIR_SEM(sb));
       
    87 }
       
    88 
       
    89 static inline void reiserfs_write_lock_xattr_i(struct inode *inode)
       
    90 {
       
    91 	down_write(&REISERFS_I(inode)->xattr_sem);
       
    92 }
       
    93 static inline void reiserfs_write_unlock_xattr_i(struct inode *inode)
       
    94 {
       
    95 	up_write(&REISERFS_I(inode)->xattr_sem);
       
    96 }
       
    97 static inline void reiserfs_read_lock_xattr_i(struct inode *inode)
       
    98 {
       
    99 	down_read(&REISERFS_I(inode)->xattr_sem);
       
   100 }
       
   101 
       
   102 static inline void reiserfs_read_unlock_xattr_i(struct inode *inode)
       
   103 {
       
   104 	up_read(&REISERFS_I(inode)->xattr_sem);
       
   105 }
       
   106 
       
   107 static inline void reiserfs_mark_inode_private(struct inode *inode)
       
   108 {
       
   109 	inode->i_flags |= S_PRIVATE;
       
   110 }
       
   111 
       
   112 static inline void reiserfs_init_xattr_rwsem(struct inode *inode)
       
   113 {
       
   114 	init_rwsem(&REISERFS_I(inode)->xattr_sem);
       
   115 }
       
   116 
       
   117 #else
       
   118 
       
   119 #define is_reiserfs_priv_object(inode) 0
       
   120 #define reiserfs_mark_inode_private(inode) do {;} while(0)
       
   121 #define reiserfs_getxattr NULL
       
   122 #define reiserfs_setxattr NULL
       
   123 #define reiserfs_listxattr NULL
       
   124 #define reiserfs_removexattr NULL
       
   125 #define reiserfs_write_lock_xattrs(sb) do {;} while(0)
       
   126 #define reiserfs_write_unlock_xattrs(sb) do {;} while(0)
       
   127 #define reiserfs_read_lock_xattrs(sb)
       
   128 #define reiserfs_read_unlock_xattrs(sb)
       
   129 
       
   130 #define reiserfs_permission NULL
       
   131 
       
   132 #define reiserfs_xattr_register_handlers() 0
       
   133 #define reiserfs_xattr_unregister_handlers()
       
   134 
       
   135 static inline int reiserfs_delete_xattrs(struct inode *inode)
       
   136 {
       
   137 	return 0;
       
   138 };
       
   139 static inline int reiserfs_chown_xattrs(struct inode *inode,
       
   140 					struct iattr *attrs)
       
   141 {
       
   142 	return 0;
       
   143 };
       
   144 static inline int reiserfs_xattr_init(struct super_block *sb, int mount_flags)
       
   145 {
       
   146 	sb->s_flags = (sb->s_flags & ~MS_POSIXACL);	/* to be sure */
       
   147 	return 0;
       
   148 };
       
   149 static inline void reiserfs_init_xattr_rwsem(struct inode *inode)
       
   150 {
       
   151 }
       
   152 #endif  /*  CONFIG_REISERFS_FS_XATTR  */
       
   153 
       
   154 #endif  /*  __KERNEL__  */
       
   155 
       
   156 #endif  /*  _LINUX_REISERFS_XATTR_H  */