diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-04-25 19:55:30 (GMT) |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-06 19:55:20 (GMT) |
commit | b50c6e250ef91313518dbca96663578237ba8d3c (patch) | |
tree | 419d87afe4386be50be15fe5cc0cb0b367eeb1ed /fs/btrfs/free-space-cache.c | |
parent | 3d7b5a2882133a04716903b1f4878a64c6610842 (diff) | |
download | linux-b50c6e250ef91313518dbca96663578237ba8d3c.tar.xz |
Btrfs: deal with free space cache errors while replaying log
So everybody who got hit by my fsync bug will still continue to hit this
BUG_ON() in the free space cache, which is pretty heavy handed. So I took a
file system that had this bug and fixed up all the BUG_ON()'s and leaks that
popped up when I tried to mount a broken file system like this. With this patch
we just fail to mount instead of panicing. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/free-space-cache.c')
-rw-r--r-- | fs/btrfs/free-space-cache.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index fa1a814..37b2b89 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -1567,7 +1567,8 @@ again: search_bytes = ctl->unit; search_bytes = min(search_bytes, end - search_start + 1); ret = search_bitmap(ctl, bitmap_info, &search_start, &search_bytes); - BUG_ON(ret < 0 || search_start != *offset); + if (ret < 0 || search_start != *offset) + return -EINVAL; /* We may have found more bits than what we need */ search_bytes = min(search_bytes, *bytes); @@ -1973,7 +1974,6 @@ again: re_search = true; goto again; } - BUG_ON(ret); /* logic error */ out_lock: spin_unlock(&ctl->tree_lock); out: |