Btrfs: optimize btrget/set/removexattr

btrfs actually stores the whole xattr name, including the prefix ondisk,
so using the generic resolver that strips off the prefix is not very
helpful.  Instead do the real ondisk xattrs manually and only use the
generic resolver for synthetic xattrs like ACLs.

(Sorry Josef for guiding you towards the wrong direction here intially)

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
Christoph Hellwig
2008-08-28 06:21:17 -04:00
committed by Chris Mason
parent eaa47d8612
commit 95819c0573
4 changed files with 104 additions and 170 deletions

View File

@@ -20,31 +20,20 @@
#define __XATTR__
#include <linux/xattr.h>
#include "ctree.h"
/* Name indexes */
enum {
BTRFS_XATTR_INDEX_USER,
BTRFS_XATTR_INDEX_POSIX_ACL_ACCESS,
BTRFS_XATTR_INDEX_POSIX_ACL_DEFAULT,
BTRFS_XATTR_INDEX_TRUSTED,
BTRFS_XATTR_INDEX_SECURITY,
BTRFS_XATTR_INDEX_SYSTEM,
BTRFS_XATTR_INDEX_END,
};
extern struct xattr_handler btrfs_xattr_user_handler;
extern struct xattr_handler btrfs_xattr_trusted_handler;
extern struct xattr_handler btrfs_xattr_acl_access_handler;
extern struct xattr_handler btrfs_xattr_acl_default_handler;
extern struct xattr_handler btrfs_xattr_security_handler;
extern struct xattr_handler btrfs_xattr_system_handler;
extern struct xattr_handler *btrfs_xattr_handlers[];
ssize_t btrfs_xattr_get(struct inode *inode, int name_index, const char *name,
void *buffer, size_t size);
int btrfs_xattr_set(struct inode *inode, int name_index, const char *name,
const void *value, size_t size, int flags);
extern ssize_t __btrfs_getxattr(struct inode *inode, const char *name,
void *buffer, size_t size);
extern int __btrfs_setxattr(struct inode *inode, const char *name,
const void *value, size_t size, int flags);
extern ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,
void *buffer, size_t size);
extern int btrfs_setxattr(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
extern int btrfs_removexattr(struct dentry *dentry, const char *name);
#endif /* __XATTR__ */