[PATCH 03/17] Add xfs_attr_set_defered and xfs_attr_remove_defered

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Allison Henderson <allison.henderson@xxxxxxxxxx>
---
:100644 100644 5325ec2... 5c9b604... M	fs/xfs/libxfs/xfs_attr.c
:100644 100644 06c4081... 67b0fbf... M	fs/xfs/xfs_attr.h
 fs/xfs/libxfs/xfs_attr.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
 fs/xfs/xfs_attr.h        |  5 +++++
 2 files changed, 63 insertions(+)

diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index 5325ec2..5c9b604 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -458,6 +458,37 @@ xfs_attr_set(
 	return error;
 }
 
+int
+xfs_attr_set_defered(
+	struct xfs_inode	*dp,
+	struct xfs_defer_ops    *dfops,
+	const unsigned char	*name,
+	int			namelen,
+	unsigned char		*value,
+	int			valuelen,
+	int			flags)
+{
+
+	struct xfs_attr_item     *new;
+
+	ASSERT(name != NULL);
+	ASSERT(value != NULL);
+
+	new = kmem_alloc(sizeof(struct xfs_attr_item), KM_SLEEP);
+	memset(new, 0, sizeof(struct xfs_attr_item));
+	new->xattri_ino = dp->i_ino;
+	new->xattri_op_flags = ATTR_OP_FLAGS_SET;
+	new->xattri_name_len = namelen;
+	new->xattri_nameval_len = namelen + valuelen;
+	new->xattri_flags = flags;
+	memcpy(new->xattri_nameval, name, namelen);
+	memcpy(&new->xattri_nameval[namelen], value, valuelen);
+
+	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
+
+	return 0;
+}
+
 /*
  * Generic handler routine to remove a name from an attribute list.
  * Transitions attribute list from Btree to shortform as necessary.
@@ -531,6 +562,33 @@ xfs_attr_remove(
 	return error;
 }
 
+int
+xfs_attr_remove_defered(
+	struct xfs_inode        *dp,
+	struct xfs_defer_ops    *dfops,
+	const unsigned char     *name,
+	int			namelen,
+	int                     flags)
+{
+
+	struct xfs_attr_item     *new;
+
+	ASSERT(name != NULL);
+
+	new = kmem_alloc(sizeof(struct xfs_attr_item), KM_SLEEP);
+	memset(new, 0, sizeof(struct xfs_attr_item));
+	new->xattri_ino = dp->i_ino;
+	new->xattri_op_flags = ATTR_OP_FLAGS_REMOVE;
+	new->xattri_name_len = namelen;
+	new->xattri_nameval_len = namelen;
+	new->xattri_flags = flags;
+	memcpy(new->xattri_nameval, name, namelen);
+
+	xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
+
+	return 0;
+}
+
 /*========================================================================
  * External routines when attribute list is inside the inode
  *========================================================================*/
diff --git a/fs/xfs/xfs_attr.h b/fs/xfs/xfs_attr.h
index 06c4081..67b0fbf 100644
--- a/fs/xfs/xfs_attr.h
+++ b/fs/xfs/xfs_attr.h
@@ -176,5 +176,10 @@ int xfs_attr_list(struct xfs_inode *dp, char *buffer, int bufsize,
 int xfs_attr_args_init(struct xfs_da_args *args, struct xfs_inode *dp,
 		       const unsigned char *name, int flags);
 int xfs_attr_calc_size(struct xfs_da_args *args, int *local);
+int xfs_attr_set_defered(struct xfs_inode *dp, struct xfs_defer_ops *dfops,
+			 const unsigned char *name, int name_len,
+			 unsigned char *value, int valuelen, int flags);
+int xfs_attr_remove_defered(struct xfs_inode *dp, struct xfs_defer_ops *dfops,
+			    const unsigned char *name, int namelen, int flags);
 
 #endif	/* __XFS_ATTR_H__ */
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux