aboutsummaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_attr_inactive.c
diff options
context:
space:
mode:
authorGravatar Darrick J. Wong <djwong@kernel.org> 2022-07-09 10:56:06 -0700
committerGravatar Darrick J. Wong <djwong@kernel.org> 2022-07-09 15:17:21 -0700
commite45d7cb2356e6b59fe64da28324025cc6fcd3fbd (patch)
tree19d84f0fc674b316e04ed33854262623c42fa4cc /fs/xfs/xfs_attr_inactive.c
parentxfs: make inode attribute forks a permanent part of struct xfs_inode (diff)
downloadlinux-e45d7cb2356e6b59fe64da28324025cc6fcd3fbd.tar.gz
linux-e45d7cb2356e6b59fe64da28324025cc6fcd3fbd.tar.bz2
linux-e45d7cb2356e6b59fe64da28324025cc6fcd3fbd.zip
xfs: use XFS_IFORK_Q to determine the presence of an xattr fork
Modify xfs_ifork_ptr to return a NULL pointer if the caller asks for the attribute fork but i_forkoff is zero. This eliminates the ambiguity between i_forkoff and i_af.if_present, which should make it easier to understand the lifetime of attr forks. While we're at it, remove the if_present checks around calls to xfs_idestroy_fork and xfs_ifork_zap_attr since they can both handle attr forks that have already been torn down. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_attr_inactive.c')
-rw-r--r--fs/xfs/xfs_attr_inactive.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
index dbe715fe92ce..ec20ad7a9001 100644
--- a/fs/xfs/xfs_attr_inactive.c
+++ b/fs/xfs/xfs_attr_inactive.c
@@ -362,12 +362,11 @@ xfs_attr_inactive(
/*
* Invalidate and truncate the attribute fork extents. Make sure the
- * fork actually has attributes as otherwise the invalidation has no
+ * fork actually has xattr blocks as otherwise the invalidation has no
* blocks to read and returns an error. In this case, just do the fork
* removal below.
*/
- if (xfs_inode_hasattr(dp) &&
- dp->i_af.if_format != XFS_DINODE_FMT_LOCAL) {
+ if (dp->i_af.if_nextents > 0) {
error = xfs_attr3_root_inactive(&trans, dp);
if (error)
goto out_cancel;
@@ -388,10 +387,8 @@ out_cancel:
xfs_trans_cancel(trans);
out_destroy_fork:
/* kill the in-core attr fork before we drop the inode lock */
- if (dp->i_af.if_present) {
- xfs_idestroy_fork(&dp->i_af);
- xfs_ifork_zap_attr(dp);
- }
+ xfs_idestroy_fork(&dp->i_af);
+ xfs_ifork_zap_attr(dp);
if (lock_mode)
xfs_iunlock(dp, lock_mode);
return error;