From: Dave Chinner <david@fromorbit.com>
To: xfs@oss.sgi.com
Subject: [PATCH 23/22] xfs: buffer type changes in xfs_da_root_join
Date: Thu, 8 Nov 2012 00:17:55 +1100 [thread overview]
Message-ID: <20121107131755.GD6434@dastard> (raw)
In-Reply-To: <1352178813-17216-1-git-send-email-david@fromorbit.com>
xfs: buffer type changes in xfs_da_root_join
From: Dave Chinner <dchinner@redhat.com>
When a root join occurs, a node format tree can be turne dback into
a leaf format tree by copying the last remaining leaf block into the
root block. At this point, the root block changes from a xfs_da_node
to a xfs_attr_leaf, and the magic number changes. However,
xfs_da_root_join treats this block as a xfs_da_node and sets the
verifier up as such. This is the wrong verifier when a leaf block
is moved into the root.
Fix this by copying the verifier from the buffer being copied into
the root block. This ensures that the leaf verifier is moved with
the leaf data, and avoids verifier failures.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
I posted this as separate patch rather than going back an
integrating it and then rebasing all the other patches on top it
afterwards. Simpler, faster, and the buf being fixed is more obvious
and easier to review, too. Found from debugging occassional 070 and
117 failures when run in a tight loop for a couple of hours..
fs/xfs/xfs_da_btree.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c
index 43db040..eecdf55 100644
--- a/fs/xfs/xfs_da_btree.c
+++ b/fs/xfs/xfs_da_btree.c
@@ -835,7 +835,15 @@ xfs_da_root_join(xfs_da_state_t *state, xfs_da_state_blk_t *root_blk)
xfs_da_blkinfo_onlychild_validate(bp->b_addr,
be16_to_cpu(oldroot->hdr.level));
+ /*
+ * This could be copying a leaf back into the root block in the case of
+ * there only being a single leaf block left in the tree. Hence we have
+ * to update the buf ops pointer as well to match the buffer type change
+ * that could occur.
+ */
memcpy(root_blk->bp->b_addr, bp->b_addr, state->blocksize);
+ root_blk->bp->b_ops = bp->b_ops;
+
xfs_trans_log_buf(args->trans, root_blk->bp, 0, state->blocksize - 1);
error = xfs_da_shrink_inode(args, child, bp);
return(error);
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2012-11-07 13:16 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-06 5:13 [PATCH 00/22 V4] xfs: metadata verifiers Dave Chinner
2012-11-06 5:13 ` [PATCH 01/22] xfs: make buffer read verication an IO completion function Dave Chinner
2012-11-06 5:13 ` [PATCH 02/22] xfs: uncached buffer reads need to return an error Dave Chinner
2012-11-06 5:13 ` [PATCH 03/22] xfs: verify superblocks as they are read from disk Dave Chinner
2012-11-06 5:13 ` [PATCH 04/22] xfs: verify AGF blocks " Dave Chinner
2012-11-06 5:13 ` [PATCH 05/22] xfs: verify AGI " Dave Chinner
2012-11-06 5:13 ` [PATCH 06/22] xfs: verify AGFL " Dave Chinner
2012-11-06 5:13 ` [PATCH 07/22] xfs: verify inode buffers " Dave Chinner
2012-11-06 5:13 ` [PATCH 08/22] xfs: verify btree blocks " Dave Chinner
2012-11-06 5:13 ` [PATCH 09/22] xfs: verify dquot " Dave Chinner
2012-11-06 5:13 ` [PATCH 10/22] xfs: add verifier callback to directory read code Dave Chinner
2012-11-06 5:13 ` [PATCH 11/22] xfs: factor dir2 block read operations Dave Chinner
2012-11-06 5:13 ` [PATCH 12/22] xfs: verify dir2 block format buffers Dave Chinner
2012-11-06 5:13 ` [PATCH 13/22] xfs: factor dir2 free block reading Dave Chinner
2012-11-06 5:13 ` [PATCH 14/22] xfs: factor out dir2 data " Dave Chinner
2012-11-06 5:13 ` [PATCH 15/22] xfs: factor dir2 leaf read Dave Chinner
2012-11-06 5:13 ` [PATCH 16/22] xfs: factor and verify attr leaf reads Dave Chinner
2012-11-06 5:13 ` [PATCH 17/22] xfs: add xfs_da_node verification Dave Chinner
2012-11-06 5:13 ` [PATCH 18/22] xfs: Add verifiers to dir2 data readahead Dave Chinner
2012-11-06 5:13 ` [PATCH 19/22] xfs: add buffer pre-write callback Dave Chinner
2012-11-06 5:13 ` [PATCH 20/22] xfs: add pre-write metadata buffer verifier callbacks Dave Chinner
2012-11-06 5:13 ` [PATCH 21/22] xfs: connect up write verifiers to new buffers Dave Chinner
2012-11-06 5:13 ` [PATCH 22/22] xfs: convert buffer verifiers to an ops structure Dave Chinner
2012-11-07 5:58 ` [PATCH 22/22 V2] " Dave Chinner
2012-11-06 21:04 ` [PATCH 00/22 V4] xfs: metadata verifiers Dave Chinner
2012-11-07 6:05 ` Dave Chinner
2012-11-07 13:17 ` Dave Chinner [this message]
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=20121107131755.GD6434@dastard \
--to=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/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