]> Git Repo - linux.git/blob - fs/xfs/xfs_attr_item.h
Linux 6.14-rc3
[linux.git] / fs / xfs / 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 <[email protected]>
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    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  */
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;
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  */
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;
51 };
52
53 extern struct kmem_cache        *xfs_attri_cache;
54 extern struct kmem_cache        *xfs_attrd_cache;
55
56 enum xfs_attr_defer_op {
57         XFS_ATTR_DEFER_SET,
58         XFS_ATTR_DEFER_REMOVE,
59         XFS_ATTR_DEFER_REPLACE,
60 };
61
62 void xfs_attr_defer_add(struct xfs_da_args *args, enum xfs_attr_defer_op op);
63
64 #endif  /* __XFS_ATTR_ITEM_H__ */
This page took 0.033529 seconds and 4 git commands to generate.