summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_attr_item.c
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-06-25 19:01:20 +0200
committerDarrick J. Wong <djwong@kernel.org>2022-06-29 17:47:56 +0200
commite53bcffad0326c1ef4b4baec4262b5343e420c44 (patch)
tree9b449b623d66b1c3921d0a8bcc65686578d5dd34 /fs/xfs/xfs_attr_item.c
parentxfs: empty xattr leaf header blocks are not corruption (diff)
downloadlinux-e53bcffad0326c1ef4b4baec4262b5343e420c44.tar.xz
linux-e53bcffad0326c1ef4b4baec4262b5343e420c44.zip
xfs: don't hold xattr leaf buffers across transaction rolls
Now that we've established (again!) that empty xattr leaf buffers are ok, we no longer need to bhold them to transactions when we're creating new leaf blocks. Get rid of the entire mechanism, which should simplify the xattr code quite a bit. The original justification for using bhold here was to prevent the AIL from trying to write the empty leaf block into the fs during the brief time that we release the buffer lock. The reason for /that/ was to prevent recovery from tripping over the empty ondisk block. Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs/xfs_attr_item.c')
-rw-r--r--fs/xfs/xfs_attr_item.c22
1 files changed, 0 insertions, 22 deletions
diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c
index 6ee905a09eb2..5077a7ad5646 100644
--- a/fs/xfs/xfs_attr_item.c
+++ b/fs/xfs/xfs_attr_item.c
@@ -455,8 +455,6 @@ static inline void
xfs_attr_free_item(
struct xfs_attr_intent *attr)
{
- ASSERT(attr->xattri_leaf_bp == NULL);
-
if (attr->xattri_da_state)
xfs_da_state_free(attr->xattri_da_state);
xfs_attri_log_nameval_put(attr->xattri_nameval);
@@ -511,10 +509,6 @@ xfs_attr_cancel_item(
struct xfs_attr_intent *attr;
attr = container_of(item, struct xfs_attr_intent, xattri_list);
- if (attr->xattri_leaf_bp) {
- xfs_buf_relse(attr->xattri_leaf_bp);
- attr->xattri_leaf_bp = NULL;
- }
xfs_attr_free_item(attr);
}
@@ -672,16 +666,6 @@ xfs_attri_item_recover(
if (error)
goto out_unlock;
- /*
- * The defer capture structure took its own reference to the
- * attr leaf buffer and will give that to the continuation
- * transaction. The attr intent struct drives the continuation
- * work, so release our refcount on the attr leaf buffer but
- * retain the pointer in the intent structure.
- */
- if (attr->xattri_leaf_bp)
- xfs_buf_relse(attr->xattri_leaf_bp);
-
xfs_iunlock(ip, XFS_ILOCK_EXCL);
xfs_irele(ip);
return 0;
@@ -692,13 +676,7 @@ xfs_attri_item_recover(
}
error = xfs_defer_ops_capture_and_commit(tp, capture_list);
-
out_unlock:
- if (attr->xattri_leaf_bp) {
- xfs_buf_relse(attr->xattri_leaf_bp);
- attr->xattri_leaf_bp = NULL;
- }
-
xfs_iunlock(ip, XFS_ILOCK_EXCL);
xfs_irele(ip);
out: