65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-or-later
 | |
|  *
 | |
|  * Copyright (C) 2022 Oracle.  All Rights Reserved.
 | |
|  * Author: Allison Henderson <allison.henderson@oracle.com>
 | |
|  */
 | |
| #ifndef	__XFS_ATTR_ITEM_H__
 | |
| #define	__XFS_ATTR_ITEM_H__
 | |
| 
 | |
| /* kernel only ATTRI/ATTRD definitions */
 | |
| 
 | |
| struct xfs_mount;
 | |
| struct kmem_zone;
 | |
| 
 | |
| struct xfs_attri_log_nameval {
 | |
| 	struct xfs_log_iovec	name;
 | |
| 	struct xfs_log_iovec	new_name;	/* PPTR_REPLACE only */
 | |
| 	struct xfs_log_iovec	value;
 | |
| 	struct xfs_log_iovec	new_value;	/* PPTR_REPLACE only */
 | |
| 	refcount_t		refcount;
 | |
| 
 | |
| 	/* name and value follow the end of this struct */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * This is the "attr intention" log item.  It is used to log the fact that some
 | |
|  * extended attribute operations need to be processed.  An operation is
 | |
|  * currently either a set or remove.  Set or remove operations are described by
 | |
|  * the xfs_attr_intent which may be logged to this intent.
 | |
|  *
 | |
|  * During a normal attr operation, name and value point to the name and value
 | |
|  * fields of the caller's xfs_da_args structure.  During a recovery, the name
 | |
|  * and value buffers are copied from the log, and stored in a trailing buffer
 | |
|  * attached to the xfs_attr_intent until they are committed.  They are freed
 | |
|  * when the xfs_attr_intent itself is freed when the work is done.
 | |
|  */
 | |
| struct xfs_attri_log_item {
 | |
| 	struct xfs_log_item		attri_item;
 | |
| 	atomic_t			attri_refcount;
 | |
| 	struct xfs_attri_log_nameval	*attri_nameval;
 | |
| 	struct xfs_attri_log_format	attri_format;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * This is the "attr done" log item.  It is used to log the fact that some attrs
 | |
|  * earlier mentioned in an attri item have been freed.
 | |
|  */
 | |
| struct xfs_attrd_log_item {
 | |
| 	struct xfs_log_item		attrd_item;
 | |
| 	struct xfs_attri_log_item	*attrd_attrip;
 | |
| 	struct xfs_attrd_log_format	attrd_format;
 | |
| };
 | |
| 
 | |
| extern struct kmem_cache	*xfs_attri_cache;
 | |
| extern struct kmem_cache	*xfs_attrd_cache;
 | |
| 
 | |
| enum xfs_attr_defer_op {
 | |
| 	XFS_ATTR_DEFER_SET,
 | |
| 	XFS_ATTR_DEFER_REMOVE,
 | |
| 	XFS_ATTR_DEFER_REPLACE,
 | |
| };
 | |
| 
 | |
| void xfs_attr_defer_add(struct xfs_da_args *args, enum xfs_attr_defer_op op);
 | |
| 
 | |
| #endif	/* __XFS_ATTR_ITEM_H__ */
 |