diff options
author | Chris Mason <chris.mason@oracle.com> | 2007-12-11 09:25:06 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:03:58 -0400 |
commit | 7bb86316c3961d1bc401ef184fd996f999556c7f (patch) | |
tree | e67de3b594cf680f295010095a71ed7e825cb757 /fs/btrfs/file.c | |
parent | 74493f7a59bfd4d1c7029c74ab2cd0e400612c6b (diff) |
Btrfs: Add back pointers from extents to the btree or file referencing them
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r-- | fs/btrfs/file.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index b0d637787264..5b1f90f06e03 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -496,7 +496,10 @@ next_slot: | |||
496 | sizeof(old)); | 496 | sizeof(old)); |
497 | if (disk_bytenr != 0) { | 497 | if (disk_bytenr != 0) { |
498 | ret = btrfs_inc_extent_ref(trans, root, | 498 | ret = btrfs_inc_extent_ref(trans, root, |
499 | disk_bytenr, disk_num_bytes); | 499 | disk_bytenr, disk_num_bytes, |
500 | root->root_key.objectid, | ||
501 | trans->transid, | ||
502 | key.objectid, end); | ||
500 | BUG_ON(ret); | 503 | BUG_ON(ret); |
501 | } | 504 | } |
502 | } | 505 | } |
@@ -541,6 +544,14 @@ next_slot: | |||
541 | u64 disk_bytenr = 0; | 544 | u64 disk_bytenr = 0; |
542 | u64 disk_num_bytes = 0; | 545 | u64 disk_num_bytes = 0; |
543 | u64 extent_num_bytes = 0; | 546 | u64 extent_num_bytes = 0; |
547 | u64 root_gen; | ||
548 | |||
549 | if (leaf != root->node) { | ||
550 | root_gen = | ||
551 | btrfs_header_generation(path->nodes[1]); | ||
552 | } else { | ||
553 | root_gen = btrfs_header_generation(leaf); | ||
554 | } | ||
544 | if (found_extent) { | 555 | if (found_extent) { |
545 | disk_bytenr = | 556 | disk_bytenr = |
546 | btrfs_file_extent_disk_bytenr(leaf, | 557 | btrfs_file_extent_disk_bytenr(leaf, |
@@ -562,8 +573,11 @@ next_slot: | |||
562 | if (found_extent && disk_bytenr != 0) { | 573 | if (found_extent && disk_bytenr != 0) { |
563 | inode->i_blocks -= extent_num_bytes >> 9; | 574 | inode->i_blocks -= extent_num_bytes >> 9; |
564 | ret = btrfs_free_extent(trans, root, | 575 | ret = btrfs_free_extent(trans, root, |
565 | disk_bytenr, | 576 | disk_bytenr, |
566 | disk_num_bytes, 0); | 577 | disk_num_bytes, |
578 | root->root_key.objectid, | ||
579 | root_gen, inode->i_ino, | ||
580 | key.offset, 0); | ||
567 | } | 581 | } |
568 | 582 | ||
569 | BUG_ON(ret); | 583 | BUG_ON(ret); |