Branch data Line data Source code
1 : : /*
2 : : File: linux/xattr.h
3 : :
4 : : Extended attributes handling.
5 : :
6 : : Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
7 : : Copyright (c) 2001-2002 Silicon Graphics, Inc. All Rights Reserved.
8 : : Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
9 : : */
10 : : #ifndef _LINUX_XATTR_H
11 : : #define _LINUX_XATTR_H
12 : :
13 : :
14 : : #include <linux/slab.h>
15 : : #include <linux/types.h>
16 : : #include <linux/spinlock.h>
17 : : #include <uapi/linux/xattr.h>
18 : :
19 : : struct inode;
20 : : struct dentry;
21 : :
22 : : struct xattr_handler {
23 : : const char *prefix;
24 : : int flags; /* fs private flags passed back to the handlers */
25 : : size_t (*list)(struct dentry *dentry, char *list, size_t list_size,
26 : : const char *name, size_t name_len, int handler_flags);
27 : : int (*get)(struct dentry *dentry, const char *name, void *buffer,
28 : : size_t size, int handler_flags);
29 : : int (*set)(struct dentry *dentry, const char *name, const void *buffer,
30 : : size_t size, int flags, int handler_flags);
31 : : };
32 : :
33 : : struct xattr {
34 : : const char *name;
35 : : void *value;
36 : : size_t value_len;
37 : : };
38 : :
39 : : ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
40 : : ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
41 : : ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
42 : : int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int);
43 : : int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
44 : : int vfs_removexattr(struct dentry *, const char *);
45 : :
46 : : ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);
47 : : ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
48 : : int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags);
49 : : int generic_removexattr(struct dentry *dentry, const char *name);
50 : : ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name,
51 : : char **xattr_value, size_t size, gfp_t flags);
52 : : int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
53 : : const char *value, size_t size, gfp_t flags);
54 : :
55 : : struct simple_xattrs {
56 : : struct list_head head;
57 : : spinlock_t lock;
58 : : };
59 : :
60 : : struct simple_xattr {
61 : : struct list_head list;
62 : : char *name;
63 : : size_t size;
64 : : char value[0];
65 : : };
66 : :
67 : : /*
68 : : * initialize the simple_xattrs structure
69 : : */
70 : : static inline void simple_xattrs_init(struct simple_xattrs *xattrs)
71 : : {
72 : 877646 : INIT_LIST_HEAD(&xattrs->head);
73 : 877646 : spin_lock_init(&xattrs->lock);
74 : : }
75 : :
76 : : /*
77 : : * free all the xattrs
78 : : */
79 : : static inline void simple_xattrs_free(struct simple_xattrs *xattrs)
80 : : {
81 : : struct simple_xattr *xattr, *node;
82 : :
83 [ - + ][ - + ]: 877309 : list_for_each_entry_safe(xattr, node, &xattrs->head, list) {
[ - + ][ - + ]
84 : 0 : kfree(xattr->name);
85 : 0 : kfree(xattr);
86 : : }
87 : : }
88 : :
89 : : struct simple_xattr *simple_xattr_alloc(const void *value, size_t size);
90 : : int simple_xattr_get(struct simple_xattrs *xattrs, const char *name,
91 : : void *buffer, size_t size);
92 : : int simple_xattr_set(struct simple_xattrs *xattrs, const char *name,
93 : : const void *value, size_t size, int flags);
94 : : int simple_xattr_remove(struct simple_xattrs *xattrs, const char *name);
95 : : ssize_t simple_xattr_list(struct simple_xattrs *xattrs, char *buffer,
96 : : size_t size);
97 : : void simple_xattr_list_add(struct simple_xattrs *xattrs,
98 : : struct simple_xattr *new_xattr);
99 : :
100 : : #endif /* _LINUX_XATTR_H */
|