aboutsummaryrefslogtreecommitdiff
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-06-28 15:57:36 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2007-06-28 15:57:36 -0400
commitccd467d60e81b48cdbecae93532b66bcdedca91d (patch)
tree7c8c74ca8c6c058fc2e3c90c0082e796b7c1e92e /fs/btrfs/disk-io.c
parentf2654de42a759127cb1f1e8a626ec94178732e20 (diff)
Btrfs: crash recovery fixes
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 7081729d5b1..d1bf5bc1bc1 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -270,14 +270,6 @@ fail:
return NULL;
}
-int dirty_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
- struct buffer_head *buf)
-{
- WARN_ON(atomic_read(&buf->b_count) == 0);
- mark_buffer_dirty(buf);
- return 0;
-}
-
int clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
struct buffer_head *buf)
{
@@ -621,6 +613,20 @@ int close_ctree(struct btrfs_root *root)
return 0;
}
+void btrfs_mark_buffer_dirty(struct buffer_head *bh)
+{
+ struct btrfs_root *root = BTRFS_I(bh->b_page->mapping->host)->root;
+ u64 transid = btrfs_header_generation(btrfs_buffer_header(bh));
+ WARN_ON(!atomic_read(&bh->b_count));
+ if (transid != root->fs_info->generation) {
+ printk(KERN_CRIT "transid mismatch buffer %llu, found %Lu running %Lu\n",
+ (unsigned long long)bh->b_blocknr,
+ transid, root->fs_info->generation);
+ WARN_ON(1);
+ }
+ mark_buffer_dirty(bh);
+}
+
void btrfs_block_release(struct btrfs_root *root, struct buffer_head *buf)
{
brelse(buf);