1 /* SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2022 Oracle. All Rights Reserved.
4 * Author: Allison Henderson <allison.henderson@oracle.com>
6 #ifndef __XFS_ATTR_ITEM_H__
7 #define __XFS_ATTR_ITEM_H__
9 /* kernel only ATTRI/ATTRD definitions */
14 struct xfs_attri_log_nameval
{
15 struct xfs_log_iovec name
;
16 struct xfs_log_iovec new_name
; /* PPTR_REPLACE only */
17 struct xfs_log_iovec value
;
18 struct xfs_log_iovec new_value
; /* PPTR_REPLACE only */
21 /* name and value follow the end of this struct */
25 * This is the "attr intention" log item. It is used to log the fact that some
26 * extended attribute operations need to be processed. An operation is
27 * currently either a set or remove. Set or remove operations are described by
28 * the xfs_attr_intent which may be logged to this intent.
30 * During a normal attr operation, name and value point to the name and value
31 * fields of the caller's xfs_da_args structure. During a recovery, the name
32 * and value buffers are copied from the log, and stored in a trailing buffer
33 * attached to the xfs_attr_intent until they are committed. They are freed
34 * when the xfs_attr_intent itself is freed when the work is done.
36 struct xfs_attri_log_item
{
37 struct xfs_log_item attri_item
;
38 atomic_t attri_refcount
;
39 struct xfs_attri_log_nameval
*attri_nameval
;
40 struct xfs_attri_log_format attri_format
;
44 * This is the "attr done" log item. It is used to log the fact that some attrs
45 * earlier mentioned in an attri item have been freed.
47 struct xfs_attrd_log_item
{
48 struct xfs_log_item attrd_item
;
49 struct xfs_attri_log_item
*attrd_attrip
;
50 struct xfs_attrd_log_format attrd_format
;
53 extern struct kmem_cache
*xfs_attri_cache
;
54 extern struct kmem_cache
*xfs_attrd_cache
;
56 enum xfs_attr_defer_op
{
58 XFS_ATTR_DEFER_REMOVE
,
59 XFS_ATTR_DEFER_REPLACE
,
62 void xfs_attr_defer_add(struct xfs_da_args
*args
, enum xfs_attr_defer_op op
);
64 #endif /* __XFS_ATTR_ITEM_H__ */