Blame view

include/linux/xattr.h 3.61 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
9
10
11
12
  /*
    File: linux/xattr.h
  
    Extended attributes handling.
  
    Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
    Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
    Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
  */
  #ifndef _LINUX_XATTR_H
  #define _LINUX_XATTR_H
1dbe39424   Eric Paris   xattr.h: expose s...
13

38f386574   Aristeu Rozanski   xattr: extract si...
14
  #include <linux/slab.h>
1dbe39424   Eric Paris   xattr.h: expose s...
15
  #include <linux/types.h>
38f386574   Aristeu Rozanski   xattr: extract si...
16
  #include <linux/spinlock.h>
3bef735ad   Chengguang Xu   vfs/xattr: mm/shm...
17
  #include <linux/mm.h>
607ca46e9   David Howells   UAPI: (Scripted) ...
18
  #include <uapi/linux/xattr.h>
1dbe39424   Eric Paris   xattr.h: expose s...
19

5b0a2075a   Adrian Bunk   [PATCH] cleanup i...
20
21
  struct inode;
  struct dentry;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22

98e9cb571   Andreas Gruenbacher   vfs: Distinguish ...
23
24
25
26
27
  /*
   * struct xattr_handler: When @name is set, match attributes with exactly that
   * name.  When @prefix is set instead, match attributes with that prefix and
   * with a non-empty suffix.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
  struct xattr_handler {
98e9cb571   Andreas Gruenbacher   vfs: Distinguish ...
29
  	const char *name;
bb4354538   Stephen Hemminger   fs: xattr_handler...
30
  	const char *prefix;
e409de992   Andreas Gruenbacher   9p: xattr simplif...
31
  	int flags;      /* fs private flags */
764a5c6b1   Andreas Gruenbacher   xattr handlers: S...
32
  	bool (*list)(struct dentry *dentry);
3484eba91   Mark Salyzyn   FROMLIST: Add fla...
33
  	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
b296821a7   Al Viro   xattr_handler: pa...
34
  		   struct inode *inode, const char *name, void *buffer,
3484eba91   Mark Salyzyn   FROMLIST: Add fla...
35
36
  		   size_t size, int flags);
  	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
593012268   Al Viro   switch xattr_hand...
37
38
  		   struct inode *inode, const char *name, const void *buffer,
  		   size_t size, int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
  };
e409de992   Andreas Gruenbacher   9p: xattr simplif...
40
  const char *xattr_full_name(const struct xattr_handler *, const char *);
9d8f13ba3   Mimi Zohar   security: new sec...
41
  struct xattr {
9548906b2   Tetsuo Handa   xattr: Constify -...
42
  	const char *name;
9d8f13ba3   Mimi Zohar   security: new sec...
43
44
45
  	void *value;
  	size_t value_len;
  };
3484eba91   Mark Salyzyn   FROMLIST: Add fla...
46
47
  ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode,
  		       const char *name, void *buffer, size_t size, int flags);
8f0cfa52a   David Howells   xattr: add missin...
48
  ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
659564c8a   Bill Nottingham   [PATCH] Introduce...
49
  ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
5d6c31910   Andreas Gruenbacher   xattr: Add __vfs_...
50
  int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
b1ab7e4b2   David P. Quigley   VFS: Factor out p...
51
  int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int);
08b5d5014   Frank van der Linden   xattr: break dele...
52
  int __vfs_setxattr_locked(struct dentry *, const char *, const void *, size_t, int, struct inode **);
8f0cfa52a   David Howells   xattr: add missin...
53
  int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
5d6c31910   Andreas Gruenbacher   xattr: Add __vfs_...
54
  int __vfs_removexattr(struct dentry *, const char *);
08b5d5014   Frank van der Linden   xattr: break dele...
55
  int __vfs_removexattr_locked(struct dentry *, const char *, struct inode **);
8f0cfa52a   David Howells   xattr: add missin...
56
  int vfs_removexattr(struct dentry *, const char *);
5be196e5f   Christoph Hellwig   [PATCH] add vfs_*...
57

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
  ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
1601fbad2   Mimi Zohar   xattr: define vfs...
59
60
  ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name,
  			   char **xattr_value, size_t size, gfp_t flags);
38f386574   Aristeu Rozanski   xattr: extract si...
61

cab8d289c   Frank van der Linden   xattr: add a func...
62
  int xattr_supported_namespace(struct inode *inode, const char *prefix);
98e9cb571   Andreas Gruenbacher   vfs: Distinguish ...
63
64
65
66
  static inline const char *xattr_prefix(const struct xattr_handler *handler)
  {
  	return handler->prefix ?: handler->name;
  }
38f386574   Aristeu Rozanski   xattr: extract si...
67
68
69
70
71
72
73
74
75
  struct simple_xattrs {
  	struct list_head head;
  	spinlock_t lock;
  };
  
  struct simple_xattr {
  	struct list_head list;
  	char *name;
  	size_t size;
43951585e   Gustavo A. R. Silva   xattr.h: Replace ...
76
  	char value[];
38f386574   Aristeu Rozanski   xattr: extract si...
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  };
  
  /*
   * initialize the simple_xattrs structure
   */
  static inline void simple_xattrs_init(struct simple_xattrs *xattrs)
  {
  	INIT_LIST_HEAD(&xattrs->head);
  	spin_lock_init(&xattrs->lock);
  }
  
  /*
   * free all the xattrs
   */
  static inline void simple_xattrs_free(struct simple_xattrs *xattrs)
  {
  	struct simple_xattr *xattr, *node;
  
  	list_for_each_entry_safe(xattr, node, &xattrs->head, list) {
  		kfree(xattr->name);
3bef735ad   Chengguang Xu   vfs/xattr: mm/shm...
97
  		kvfree(xattr);
38f386574   Aristeu Rozanski   xattr: extract si...
98
99
100
101
102
103
104
  	}
  }
  
  struct simple_xattr *simple_xattr_alloc(const void *value, size_t size);
  int simple_xattr_get(struct simple_xattrs *xattrs, const char *name,
  		     void *buffer, size_t size);
  int simple_xattr_set(struct simple_xattrs *xattrs, const char *name,
a46a22955   Daniel Xu   kernfs: Add remov...
105
106
  		     const void *value, size_t size, int flags,
  		     ssize_t *removed_size);
786534b92   Andreas Gruenbacher   tmpfs: listxattr ...
107
108
  ssize_t simple_xattr_list(struct inode *inode, struct simple_xattrs *xattrs, char *buffer,
  			  size_t size);
38f386574   Aristeu Rozanski   xattr: extract si...
109
110
  void simple_xattr_list_add(struct simple_xattrs *xattrs,
  			   struct simple_xattr *new_xattr);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
  #endif	/* _LINUX_XATTR_H */