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 13struct 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 26struct inode; 27struct dentry; 28struct iattr; 29struct super_block; 30struct nameidata; 31 32struct 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) 49ssize_t reiserfs_getxattr(struct dentry *dentry, const char *name, 50 void *buffer, size_t size); 51int reiserfs_setxattr(struct dentry *dentry, const char *name, 52 const void *value, size_t size, int flags); 53ssize_t reiserfs_listxattr(struct dentry *dentry, char *buffer, size_t size); 54int reiserfs_removexattr(struct dentry *dentry, const char *name); 55int reiserfs_delete_xattrs(struct inode *inode); 56int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs); 57int reiserfs_xattr_init(struct super_block *sb, int mount_flags); 58int reiserfs_permission(struct inode *inode, int mask, struct nameidata *nd); 59 60int reiserfs_xattr_del(struct inode *, const char *); 61int reiserfs_xattr_get(const struct inode *, const char *, void *, size_t); 62int reiserfs_xattr_set(struct inode *, const char *, const void *, size_t, int); 63 64extern struct reiserfs_xattr_handler user_handler; 65extern struct reiserfs_xattr_handler trusted_handler; 66extern struct reiserfs_xattr_handler security_handler; 67 68int reiserfs_xattr_register_handlers(void) __init; 69void reiserfs_xattr_unregister_handlers(void); 70 71static inline void reiserfs_write_lock_xattrs(struct super_block *sb) 72{ 73 down_write(&REISERFS_XATTR_DIR_SEM(sb)); 74} 75static inline void reiserfs_write_unlock_xattrs(struct super_block *sb) 76{ 77 up_write(&REISERFS_XATTR_DIR_SEM(sb)); 78} 79static inline void reiserfs_read_lock_xattrs(struct super_block *sb) 80{ 81 down_read(&REISERFS_XATTR_DIR_SEM(sb)); 82} 83 84static inline void reiserfs_read_unlock_xattrs(struct super_block *sb) 85{ 86 up_read(&REISERFS_XATTR_DIR_SEM(sb)); 87} 88 89static inline void reiserfs_write_lock_xattr_i(struct inode *inode) 90{ 91 down_write(&REISERFS_I(inode)->xattr_sem); 92} 93static inline void reiserfs_write_unlock_xattr_i(struct inode *inode) 94{ 95 up_write(&REISERFS_I(inode)->xattr_sem); 96} 97static inline void reiserfs_read_lock_xattr_i(struct inode *inode) 98{ 99 down_read(&REISERFS_I(inode)->xattr_sem); 100} 101 102static inline void reiserfs_read_unlock_xattr_i(struct inode *inode) 103{ 104 up_read(&REISERFS_I(inode)->xattr_sem); 105} 106 107static inline void reiserfs_mark_inode_private(struct inode *inode) 108{ 109 inode->i_flags |= S_PRIVATE; 110} 111 112static 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 135static inline int reiserfs_delete_xattrs(struct inode *inode) 136{ 137 return 0; 138}; 139static inline int reiserfs_chown_xattrs(struct inode *inode, 140 struct iattr *attrs) 141{ 142 return 0; 143}; 144static 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}; 149static 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 */ 157