hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/xfs/libxfs/xfs_attr.h
....@@ -1,4 +1,4 @@
1
-// SPDX-License-Identifier: GPL-2.0
1
+/* SPDX-License-Identifier: GPL-2.0 */
22 /*
33 * Copyright (c) 2000,2002-2003,2005 Silicon Graphics, Inc.
44 * All Rights Reserved.
....@@ -21,34 +21,6 @@
2121 * as possible so as to fit into the literal area of the inode.
2222 */
2323
24
-/*========================================================================
25
- * External interfaces
26
- *========================================================================*/
27
-
28
-
29
-#define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */
30
-#define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */
31
-#define ATTR_TRUST 0x0004 /* -- unused, from IRIX -- */
32
-#define ATTR_SECURE 0x0008 /* use attrs in security namespace */
33
-#define ATTR_CREATE 0x0010 /* pure create: fail if attr already exists */
34
-#define ATTR_REPLACE 0x0020 /* pure set: fail if attr does not exist */
35
-
36
-#define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */
37
-#define ATTR_KERNOVAL 0x2000 /* [kernel] get attr size only, not value */
38
-
39
-#define ATTR_INCOMPLETE 0x4000 /* [kernel] return INCOMPLETE attr keys */
40
-
41
-#define XFS_ATTR_FLAGS \
42
- { ATTR_DONTFOLLOW, "DONTFOLLOW" }, \
43
- { ATTR_ROOT, "ROOT" }, \
44
- { ATTR_TRUST, "TRUST" }, \
45
- { ATTR_SECURE, "SECURE" }, \
46
- { ATTR_CREATE, "CREATE" }, \
47
- { ATTR_REPLACE, "REPLACE" }, \
48
- { ATTR_KERNOTIME, "KERNOTIME" }, \
49
- { ATTR_KERNOVAL, "KERNOVAL" }, \
50
- { ATTR_INCOMPLETE, "INCOMPLETE" }
51
-
5224 /*
5325 * The maximum size (into the kernel or returned from the kernel) of an
5426 * attribute value or the buffer used for an attr_list() call. Larger
....@@ -57,45 +29,16 @@
5729 #define ATTR_MAX_VALUELEN (64*1024) /* max length of a value */
5830
5931 /*
60
- * Define how lists of attribute names are returned to the user from
61
- * the attr_list() call. A large, 32bit aligned, buffer is passed in
62
- * along with its size. We put an array of offsets at the top that each
63
- * reference an attrlist_ent_t and pack the attrlist_ent_t's at the bottom.
64
- */
65
-typedef struct attrlist {
66
- __s32 al_count; /* number of entries in attrlist */
67
- __s32 al_more; /* T/F: more attrs (do call again) */
68
- __s32 al_offset[1]; /* byte offsets of attrs [var-sized] */
69
-} attrlist_t;
70
-
71
-/*
72
- * Show the interesting info about one attribute. This is what the
73
- * al_offset[i] entry points to.
74
- */
75
-typedef struct attrlist_ent { /* data from attr_list() */
76
- __u32 a_valuelen; /* number bytes in value of attr */
77
- char a_name[1]; /* attr name (NULL terminated) */
78
-} attrlist_ent_t;
79
-
80
-/*
81
- * Given a pointer to the (char*) buffer containing the attr_list() result,
82
- * and an index, return a pointer to the indicated attribute in the buffer.
83
- */
84
-#define ATTR_ENTRY(buffer, index) \
85
- ((attrlist_ent_t *) \
86
- &((char *)buffer)[ ((attrlist_t *)(buffer))->al_offset[index] ])
87
-
88
-/*
8932 * Kernel-internal version of the attrlist cursor.
9033 */
91
-typedef struct attrlist_cursor_kern {
34
+struct xfs_attrlist_cursor_kern {
9235 __u32 hashval; /* hash value of next entry to add */
9336 __u32 blkno; /* block containing entry (suggestion) */
9437 __u32 offset; /* offset in list of equal-hashvals */
9538 __u16 pad1; /* padding to match user-level */
9639 __u8 pad2; /* padding to match user-level */
9740 __u8 initted; /* T/F: cursor has been initialized */
98
-} attrlist_cursor_kern_t;
41
+};
9942
10043
10144 /*========================================================================
....@@ -107,21 +50,28 @@
10750 typedef void (*put_listent_func_t)(struct xfs_attr_list_context *, int,
10851 unsigned char *, int, int);
10952
110
-typedef struct xfs_attr_list_context {
111
- struct xfs_trans *tp;
112
- struct xfs_inode *dp; /* inode */
113
- struct attrlist_cursor_kern *cursor; /* position in list */
114
- char *alist; /* output buffer */
115
- int seen_enough; /* T/F: seen enough of list? */
116
- ssize_t count; /* num used entries */
117
- int dupcnt; /* count dup hashvals seen */
118
- int bufsize; /* total buffer size */
119
- int firstu; /* first used byte in buffer */
120
- int flags; /* from VOP call */
121
- int resynch; /* T/F: resynch with cursor */
122
- put_listent_func_t put_listent; /* list output fmt function */
123
- int index; /* index into output buffer */
124
-} xfs_attr_list_context_t;
53
+struct xfs_attr_list_context {
54
+ struct xfs_trans *tp;
55
+ struct xfs_inode *dp; /* inode */
56
+ struct xfs_attrlist_cursor_kern cursor; /* position in list */
57
+ void *buffer; /* output buffer */
58
+
59
+ /*
60
+ * Abort attribute list iteration if non-zero. Can be used to pass
61
+ * error values to the xfs_attr_list caller.
62
+ */
63
+ int seen_enough;
64
+ bool allow_incomplete;
65
+
66
+ ssize_t count; /* num used entries */
67
+ int dupcnt; /* count dup hashvals seen */
68
+ int bufsize; /* total buffer size */
69
+ int firstu; /* first used byte in buffer */
70
+ unsigned int attr_filter; /* XFS_ATTR_{ROOT,SECURE} */
71
+ int resynch; /* T/F: resynch with cursor */
72
+ put_listent_func_t put_listent; /* list output fmt function */
73
+ int index; /* index into output buffer */
74
+};
12575
12676
12777 /*========================================================================
....@@ -132,19 +82,15 @@
13282 * Overall external interface routines.
13383 */
13484 int xfs_attr_inactive(struct xfs_inode *dp);
135
-int xfs_attr_list_int_ilocked(struct xfs_attr_list_context *);
136
-int xfs_attr_list_int(struct xfs_attr_list_context *);
85
+int xfs_attr_list_ilocked(struct xfs_attr_list_context *);
86
+int xfs_attr_list(struct xfs_attr_list_context *);
13787 int xfs_inode_hasattr(struct xfs_inode *ip);
138
-int xfs_attr_get_ilocked(struct xfs_inode *ip, struct xfs_da_args *args);
139
-int xfs_attr_get(struct xfs_inode *ip, const unsigned char *name,
140
- unsigned char *value, int *valuelenp, int flags);
141
-int xfs_attr_set(struct xfs_inode *dp, const unsigned char *name,
142
- unsigned char *value, int valuelen, int flags);
88
+int xfs_attr_get_ilocked(struct xfs_da_args *args);
89
+int xfs_attr_get(struct xfs_da_args *args);
90
+int xfs_attr_set(struct xfs_da_args *args);
14391 int xfs_attr_set_args(struct xfs_da_args *args);
144
-int xfs_attr_remove(struct xfs_inode *dp, const unsigned char *name, int flags);
92
+int xfs_has_attr(struct xfs_da_args *args);
14593 int xfs_attr_remove_args(struct xfs_da_args *args);
146
-int xfs_attr_list(struct xfs_inode *dp, char *buffer, int bufsize,
147
- int flags, struct attrlist_cursor_kern *cursor);
148
-
94
+bool xfs_attr_namecheck(const void *name, size_t length);
14995
15096 #endif /* __XFS_ATTR_H__ */