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 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__ */ 65