Hello,

When 'pin_down_bytes' decides against pinning a extent,
'__free_extent'  should update the free space cache by itself.

Regards
YZ
---
diff -r bc6bfcf7a158 extent-tree.c
--- a/extent-tree.c     Tue Oct 30 16:56:53 2007 -0400
+++ b/extent-tree.c     Fri Nov 02 15:04:33 2007 +0800
@@ -715,7 +715,7 @@ static int pin_down_bytes(struct btrfs_r
                                    root->fs_info->running_transaction->transid;
                                if (btrfs_header_generation(buf) == transid) {
                                        free_extent_buffer(buf);
-                                       return 0;
+                                       return 1;
                                }
                        }
                        free_extent_buffer(buf);
@@ -775,7 +775,12 @@ static int __free_extent(struct btrfs_tr

                if (pin) {
                        ret = pin_down_bytes(root, bytenr, num_bytes, 0);
-                       BUG_ON(ret);
+                       if (ret > 0) {
+                               set_extent_dirty(&info->free_space_cache,
+                                               bytenr, bytenr + num_bytes - 1,
+                                               GFP_NOFS);
+                       }
+                       BUG_ON(ret < 0);
                }

                /* block accounting for super block */

_______________________________________________
Btrfs-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/btrfs-devel

Reply via email to