Loading...
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
11struct xfs_mount;
12struct kmem_zone;
13
14struct 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 */
34struct 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 */
45struct 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
51extern struct kmem_cache *xfs_attri_cache;
52extern struct kmem_cache *xfs_attrd_cache;
53
54#endif /* __XFS_ATTR_ITEM_H__ */
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
11struct xfs_mount;
12struct kmem_zone;
13
14struct 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 */
19 refcount_t refcount;
20
21 /* name and value follow the end of this struct */
22};
23
24/*
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.
29 *
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.
35 */
36struct 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;
41};
42
43/*
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.
46 */
47struct 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;
51};
52
53extern struct kmem_cache *xfs_attri_cache;
54extern struct kmem_cache *xfs_attrd_cache;
55
56enum xfs_attr_defer_op {
57 XFS_ATTR_DEFER_SET,
58 XFS_ATTR_DEFER_REMOVE,
59 XFS_ATTR_DEFER_REPLACE,
60};
61
62void xfs_attr_defer_add(struct xfs_da_args *args, enum xfs_attr_defer_op op);
63
64#endif /* __XFS_ATTR_ITEM_H__ */