* [PATCH] Btrfs: don't add extent 0 to the free space cache v2
@ 2009-11-26 9:31 Yan, Zheng
0 siblings, 0 replies; only message in thread
From: Yan, Zheng @ 2009-11-26 9:31 UTC (permalink / raw)
To: linux-btrfs, chris Mason
If block group 0 is completely free, btrfs_read_block_groups will
add extent [0, BTRFS_SUPER_INFO_OFFSET) to the free space cache.
Previous patch reveals a bug in add_new_free_space which may cause
super block be added to the free space cache. This patch fixes it.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
---
diff -urp 1/fs/btrfs/extent-tree.c 2/fs/btrfs/extent-tree.c
--- 1/fs/btrfs/extent-tree.c 2009-11-26 17:09:43.903551612 +0800
+++ 2/fs/btrfs/extent-tree.c 2009-11-26 17:14:11.898800726 +0800
@@ -195,6 +195,14 @@ static int exclude_super_stripes(struct
int stripe_len;
int i, nr, ret;
+ if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) {
+ stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid;
+ cache->bytes_super += stripe_len;
+ ret = add_excluded_extent(root, cache->key.objectid,
+ stripe_len);
+ BUG_ON(ret);
+ }
+
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
ret = btrfs_rmap_block(&root->fs_info->mapping_tree,
@@ -255,7 +263,7 @@ static u64 add_new_free_space(struct btr
if (ret)
break;
- if (extent_start == start) {
+ if (extent_start <= start) {
start = extent_end + 1;
} else if (extent_start > start && extent_start < end) {
size = extent_start - start;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-11-26 9:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-26 9:31 [PATCH] Btrfs: don't add extent 0 to the free space cache v2 Yan, Zheng
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.