From: Allison Henderson <allison.henderson@oracle.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH v3 07/30] xfsprogs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred
Date: Wed, 26 Sep 2018 03:23:10 -0700 [thread overview]
Message-ID: <1537957413-10630-8-git-send-email-allison.henderson@oracle.com> (raw)
In-Reply-To: <1537957413-10630-1-git-send-email-allison.henderson@oracle.com>
These routines set up set and start a new deferred attribute
operation. These functions are meant to be called by other
code needing to initiate a deferred attribute operation. We
will use these routines later in the parent pointer patches.
Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
---
libxfs/xfs_attr.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
libxfs/xfs_attr.h | 7 +++++
2 files changed, 87 insertions(+)
diff --git a/libxfs/xfs_attr.c b/libxfs/xfs_attr.c
index 566a617..d50b5a1 100644
--- a/libxfs/xfs_attr.c
+++ b/libxfs/xfs_attr.c
@@ -25,6 +25,7 @@
#include "xfs_trans_space.h"
#include "xfs_trace.h"
#include "xfs_attr_item.h"
+#include "xfs_attr.h"
/*
* xfs_attr.c
@@ -442,6 +443,52 @@ out:
return error;
}
+/* Sets an attribute for an inode as a deferred operation */
+int
+xfs_attr_set_deferred(
+ struct xfs_inode *dp,
+ struct xfs_trans *tp,
+ const unsigned char *name,
+ unsigned int namelen,
+ const unsigned char *value,
+ unsigned int valuelen,
+ int flags)
+{
+
+ struct xfs_attr_item *new;
+ char *name_value;
+
+ /*
+ * All set operations must have a name
+ * but not necessarily a value.
+ * Generic 062
+ */
+ if (!namelen) {
+ ASSERT(0);
+ return -EFSCORRUPTED;
+ }
+
+ new = kmem_alloc(XFS_ATTR_ITEM_SIZEOF(namelen, valuelen),
+ KM_SLEEP|KM_NOFS);
+ name_value = ((char *)new) + sizeof(struct xfs_attr_item);
+ memset(new, 0, XFS_ATTR_ITEM_SIZEOF(namelen, valuelen));
+ new->xattri_ip = dp;
+ new->xattri_op_flags = XFS_ATTR_OP_FLAGS_SET;
+ new->xattri_name_len = namelen;
+ new->xattri_value_len = valuelen;
+ new->xattri_flags = flags;
+ memcpy(&name_value[0], name, namelen);
+ new->xattri_name = name_value;
+ new->xattri_value = name_value + namelen;
+
+ if (valuelen > 0)
+ memcpy(&name_value[namelen], value, valuelen);
+
+ xfs_defer_add(tp, 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.
@@ -525,6 +572,39 @@ out:
return error;
}
+/* Removes an attribute for an inode as a deferred operation */
+int
+xfs_attr_remove_deferred(
+ struct xfs_inode *dp,
+ struct xfs_trans *tp,
+ const unsigned char *name,
+ unsigned int namelen,
+ int flags)
+{
+
+ struct xfs_attr_item *new;
+ char *name_value;
+
+ if (!namelen) {
+ ASSERT(0);
+ return -EFSCORRUPTED;
+ }
+
+ new = kmem_alloc(XFS_ATTR_ITEM_SIZEOF(namelen, 0), KM_SLEEP|KM_NOFS);
+ name_value = ((char *)new) + sizeof(struct xfs_attr_item);
+ memset(new, 0, XFS_ATTR_ITEM_SIZEOF(namelen, 0));
+ new->xattri_ip = dp;
+ new->xattri_op_flags = XFS_ATTR_OP_FLAGS_REMOVE;
+ new->xattri_name_len = namelen;
+ new->xattri_value_len = 0;
+ new->xattri_flags = flags;
+ memcpy(name_value, name, namelen);
+
+ xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
+
+ return 0;
+}
+
/*========================================================================
* External routines when attribute list is inside the inode
*========================================================================*/
diff --git a/libxfs/xfs_attr.h b/libxfs/xfs_attr.h
index 39a7a26..6e546a1 100644
--- a/libxfs/xfs_attr.h
+++ b/libxfs/xfs_attr.h
@@ -168,5 +168,12 @@ 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_deferred(struct xfs_inode *dp, struct xfs_trans *tp,
+ const unsigned char *name, unsigned int name_len,
+ const unsigned char *value, unsigned int valuelen,
+ int flags);
+int xfs_attr_remove_deferred(struct xfs_inode *dp, struct xfs_trans *tp,
+ const unsigned char *name, unsigned int namelen,
+ int flags);
#endif /* __XFS_ATTR_H__ */
--
2.7.4
next prev parent reply other threads:[~2018-09-26 16:38 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-26 10:23 [PATCH v3 00/30] xfsprogs: parent pointers v2 Allison Henderson
2018-09-26 10:23 ` [PATCH v3 01/30] xfsprogs: Move xfs_attr.h to libxfs Allison Henderson
2018-09-26 10:23 ` [PATCH v3 02/30] xfsprogs: Add helper function xfs_attr_try_sf_addname Allison Henderson
2018-09-26 10:23 ` [PATCH v3 03/30] xfsprogs: Add attibute set and helper functions Allison Henderson
2018-09-26 10:23 ` [PATCH v3 04/30] xfsprogs: Add attibute remove " Allison Henderson
2018-09-26 10:23 ` [PATCH v3 05/30] xfsprogs: Add trans toggle to attr routines Allison Henderson
2018-09-26 10:23 ` [PATCH v3 06/30] xfsprogs: Set up infastructure for deferred attribute operations Allison Henderson
2018-09-26 10:23 ` Allison Henderson [this message]
2018-09-26 10:23 ` [PATCH v3 08/30] xfsprogs: Add xfs_has_attr and subroutines Allison Henderson
2018-09-26 10:23 ` [PATCH v3 09/30] xfsprogs: Add attr context to log item Allison Henderson
2018-09-26 10:23 ` [PATCH v3 10/30] xfsprogs: Roll delayed attr operations by returning EAGAIN Allison Henderson
2018-09-26 10:23 ` [PATCH v3 11/30] xfsprogs: Remove roll_trans boolean Allison Henderson
2018-09-26 10:23 ` [PATCH v3 12/30] xfsprogs: Remove all strlen calls in all xfs_attr_* functions for attr names Allison Henderson
2018-09-26 10:23 ` [PATCH v3 13/30] xfsprogs: get directory offset when adding directory name Allison Henderson
2018-09-26 10:23 ` [PATCH v3 14/30] xfsprogs: get directory offset when removing " Allison Henderson
2018-09-26 10:23 ` [PATCH v3 15/30] xfsprogs: get directory offset when replacing a " Allison Henderson
2018-09-26 10:23 ` [PATCH v3 16/30] xfsprogs: add parent pointer support to attribute code Allison Henderson
2018-09-26 10:23 ` [PATCH v3 17/30] xfsprogs: define parent pointer xattr format Allison Henderson
2018-09-26 10:23 ` [PATCH v3 18/30] xfsprogs: extent transaction reservations for parent attributes Allison Henderson
2018-09-26 10:23 ` [PATCH v3 19/30] xfsprogs: parent pointer attribute creation Allison Henderson
2018-09-26 10:23 ` [PATCH v3 20/30] xfsprogs: Add the parent pointer support to the superblock version 5 Allison Henderson
2018-09-26 10:23 ` [PATCH v3 21/30] xfsprogs: Add helper function xfs_attr_list_context_init Allison Henderson
2018-09-26 10:23 ` [PATCH v3 22/30] xfsprogs: Add parent pointer ioctl Allison Henderson
2018-09-26 10:23 ` [PATCH v3 23/30] xfs_io: Add delayed attributes error tag Allison Henderson
2018-09-26 10:23 ` [PATCH v3 24/30] xfsprogs: Add parent pointer flag to cmd Allison Henderson
2018-09-26 10:23 ` [PATCH v3 25/30] xfsprogs: Add log item printing for ATTRI and ATTRD Allison Henderson
2018-09-26 10:23 ` [PATCH v3 26/30] xfsprogs: Add xfs_verify_pptr Allison Henderson
2018-09-26 10:23 ` [PATCH v3 27/30] xfsprogs: Add parent pointers to recreated inodes Allison Henderson
2018-09-26 10:23 ` [PATCH v3 28/30] xfsprogs: Add parent pointers during protofile creation Allison Henderson
2018-09-26 10:23 ` [PATCH v3 29/30] xfsprogs: implement the upper half of parent pointers Allison Henderson
2018-09-26 10:23 ` [PATCH v3 30/30] xfsprogs: Add i, n and f flags to parent command Allison Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1537957413-10630-8-git-send-email-allison.henderson@oracle.com \
--to=allison.henderson@oracle.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).