xref: /linux/fs/xfs/xfs_attr_item.h (revision dec1c62e91ba268ab2a6e339d4d7a59287d5eba1)
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  *
3  * Copyright (C) 2022 Oracle.  All Rights Reserved.
4  * Author: Allison Henderson <allison.henderson@oracle.com>
5  */
6 #ifndef	__XFS_ATTR_ITEM_H__
7 #define	__XFS_ATTR_ITEM_H__
8 
9 /* kernel only ATTRI/ATTRD definitions */
10 
11 struct xfs_mount;
12 struct kmem_zone;
13 
14 struct xfs_attri_log_nameval {
15 	struct xfs_log_iovec	name;
16 	struct xfs_log_iovec	value;
17 	refcount_t		refcount;
18 
19 	/* name and value follow the end of this struct */
20 };
21 
22 /*
23  * This is the "attr intention" log item.  It is used to log the fact that some
24  * extended attribute operations need to be processed.  An operation is
25  * currently either a set or remove.  Set or remove operations are described by
26  * the xfs_attr_intent which may be logged to this intent.
27  *
28  * During a normal attr operation, name and value point to the name and value
29  * fields of the caller's xfs_da_args structure.  During a recovery, the name
30  * and value buffers are copied from the log, and stored in a trailing buffer
31  * attached to the xfs_attr_intent until they are committed.  They are freed
32  * when the xfs_attr_intent itself is freed when the work is done.
33  */
34 struct xfs_attri_log_item {
35 	struct xfs_log_item		attri_item;
36 	atomic_t			attri_refcount;
37 	struct xfs_attri_log_nameval	*attri_nameval;
38 	struct xfs_attri_log_format	attri_format;
39 };
40 
41 /*
42  * This is the "attr done" log item.  It is used to log the fact that some attrs
43  * earlier mentioned in an attri item have been freed.
44  */
45 struct xfs_attrd_log_item {
46 	struct xfs_log_item		attrd_item;
47 	struct xfs_attri_log_item	*attrd_attrip;
48 	struct xfs_attrd_log_format	attrd_format;
49 };
50 
51 extern struct kmem_cache	*xfs_attri_cache;
52 extern struct kmem_cache	*xfs_attrd_cache;
53 
54 #endif	/* __XFS_ATTR_ITEM_H__ */
55