.. | .. |
---|
15 | 15 | #include <linux/slab.h> |
---|
16 | 16 | #include <linux/types.h> |
---|
17 | 17 | #include <linux/spinlock.h> |
---|
| 18 | +#include <linux/mm.h> |
---|
18 | 19 | #include <uapi/linux/xattr.h> |
---|
19 | 20 | |
---|
20 | 21 | struct inode; |
---|
.. | .. |
---|
32 | 33 | bool (*list)(struct dentry *dentry); |
---|
33 | 34 | int (*get)(const struct xattr_handler *handler, struct dentry *dentry, |
---|
34 | 35 | struct inode *inode, const char *name, void *buffer, |
---|
35 | | - size_t size); |
---|
36 | | - int (*__get)(const struct xattr_handler *handler, struct dentry *dentry, |
---|
37 | | - struct inode *inode, const char *name, void *buffer, |
---|
38 | | - size_t size); |
---|
| 36 | + size_t size, int flags); |
---|
39 | 37 | int (*set)(const struct xattr_handler *handler, struct dentry *dentry, |
---|
40 | 38 | struct inode *inode, const char *name, const void *buffer, |
---|
41 | 39 | size_t size, int flags); |
---|
.. | .. |
---|
49 | 47 | size_t value_len; |
---|
50 | 48 | }; |
---|
51 | 49 | |
---|
52 | | -ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); |
---|
| 50 | +ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, |
---|
| 51 | + const char *name, void *buffer, size_t size, int flags); |
---|
53 | 52 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
---|
54 | 53 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
---|
55 | 54 | int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int); |
---|
.. | .. |
---|
63 | 62 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); |
---|
64 | 63 | ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name, |
---|
65 | 64 | char **xattr_value, size_t size, gfp_t flags); |
---|
| 65 | + |
---|
| 66 | +int xattr_supported_namespace(struct inode *inode, const char *prefix); |
---|
66 | 67 | |
---|
67 | 68 | static inline const char *xattr_prefix(const struct xattr_handler *handler) |
---|
68 | 69 | { |
---|
.. | .. |
---|
78 | 79 | struct list_head list; |
---|
79 | 80 | char *name; |
---|
80 | 81 | size_t size; |
---|
81 | | - char value[0]; |
---|
| 82 | + char value[]; |
---|
82 | 83 | }; |
---|
83 | 84 | |
---|
84 | 85 | /* |
---|
.. | .. |
---|
99 | 100 | |
---|
100 | 101 | list_for_each_entry_safe(xattr, node, &xattrs->head, list) { |
---|
101 | 102 | kfree(xattr->name); |
---|
102 | | - kfree(xattr); |
---|
| 103 | + kvfree(xattr); |
---|
103 | 104 | } |
---|
104 | 105 | } |
---|
105 | 106 | |
---|
.. | .. |
---|
107 | 108 | int simple_xattr_get(struct simple_xattrs *xattrs, const char *name, |
---|
108 | 109 | void *buffer, size_t size); |
---|
109 | 110 | int simple_xattr_set(struct simple_xattrs *xattrs, const char *name, |
---|
110 | | - const void *value, size_t size, int flags); |
---|
| 111 | + const void *value, size_t size, int flags, |
---|
| 112 | + ssize_t *removed_size); |
---|
111 | 113 | ssize_t simple_xattr_list(struct inode *inode, struct simple_xattrs *xattrs, char *buffer, |
---|
112 | 114 | size_t size); |
---|
113 | 115 | void simple_xattr_list_add(struct simple_xattrs *xattrs, |
---|