summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-04-02 10:50:19 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2007-04-02 10:50:19 -0400
commit2c90e5d658424bc71b111eb5a972240d5d06fe86 (patch)
treef46b830654af0f67ef1691353fe4d79943a05465 /fs/btrfs/extent-tree.c
parentd6025579531b7ea170ba283b171ff7a6bf7d0e12 (diff)
downloadop-kernel-dev-2c90e5d658424bc71b111eb5a972240d5d06fe86.zip
op-kernel-dev-2c90e5d658424bc71b111eb5a972240d5d06fe86.tar.gz
Btrfs: still corruption hunting
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index c4194da..37b87e2 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -173,12 +173,16 @@ static int pin_down_block(struct btrfs_root *root, u64 blocknr, int pending)
if (!pending) {
bh = btrfs_find_tree_block(root, blocknr);
- if (bh && buffer_uptodate(bh)) {
- header = btrfs_buffer_header(bh);
- if (btrfs_header_generation(header) ==
- root->fs_info->running_transaction->transid) {
- btrfs_block_release(root, bh);
- return 0;
+ if (bh) {
+ if (buffer_uptodate(bh)) {
+ u64 transid =
+ root->fs_info->running_transaction->transid;
+ header = btrfs_buffer_header(bh);
+ if (btrfs_header_generation(header) ==
+ transid) {
+ btrfs_block_release(root, bh);
+ return 0;
+ }
}
btrfs_block_release(root, bh);
}
@@ -539,6 +543,8 @@ static int walk_down_tree(struct btrfs_trans_handle *trans, struct btrfs_root
*/
while(*level >= 0) {
cur = path->nodes[*level];
+ if (btrfs_header_level(btrfs_buffer_header(cur)) != *level)
+ WARN_ON(1);
if (path->slots[*level] >=
btrfs_header_nritems(btrfs_buffer_header(cur)))
break;
OpenPOWER on IntegriCloud