summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_attr.h
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2017-06-16 20:00:14 +0200
committerDarrick J. Wong <darrick.wong@oracle.com>2017-06-20 19:45:22 +0200
commitad017f6537dee30a67b89f937a16e2f6c82e3774 (patch)
tree505ed25781dab9fd0720c692f52788453d9f4cc6 /fs/xfs/xfs_attr.h
parentxfs: pass along transaction context when reading directory block buffers (diff)
downloadlinux-ad017f6537dee30a67b89f937a16e2f6c82e3774.tar.xz
linux-ad017f6537dee30a67b89f937a16e2f6c82e3774.zip
xfs: pass along transaction context when reading xattr block buffers
Teach the extended attribute reading functions to pass along a transaction context if one was supplied. The extended attribute scrub code will use transactions to lock buffers and avoid deadlocking with itself in the case of loops; since it will already have the inode locked, also create xattr get/list helpers that don't take locks. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_attr.h')
-rw-r--r--fs/xfs/xfs_attr.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/xfs/xfs_attr.h b/fs/xfs/xfs_attr.h
index d14691aa02b4..5d5a5e277f35 100644
--- a/fs/xfs/xfs_attr.h
+++ b/fs/xfs/xfs_attr.h
@@ -117,6 +117,7 @@ typedef void (*put_listent_func_t)(struct xfs_attr_list_context *, int,
unsigned char *, int, int);
typedef struct xfs_attr_list_context {
+ struct xfs_trans *tp;
struct xfs_inode *dp; /* inode */
struct attrlist_cursor_kern *cursor; /* position in list */
char *alist; /* output buffer */
@@ -140,8 +141,10 @@ typedef struct xfs_attr_list_context {
* Overall external interface routines.
*/
int xfs_attr_inactive(struct xfs_inode *dp);
+int xfs_attr_list_int_ilocked(struct xfs_attr_list_context *);
int xfs_attr_list_int(struct xfs_attr_list_context *);
int xfs_inode_hasattr(struct xfs_inode *ip);
+int xfs_attr_get_ilocked(struct xfs_inode *ip, struct xfs_da_args *args);
int xfs_attr_get(struct xfs_inode *ip, const unsigned char *name,
unsigned char *value, int *valuelenp, int flags);
int xfs_attr_set(struct xfs_inode *dp, const unsigned char *name,