linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Btrfs-progs: handle errors reading fs roots
@ 2013-02-01 20:17 Josef Bacik
  0 siblings, 0 replies; only message in thread
From: Josef Bacik @ 2013-02-01 20:17 UTC (permalink / raw)
  To: linux-btrfs

A user had a problem where btrfsck would bail out because it was finding
extents for a snapshot that had been deleted but not entirely cleaned up.
We can handle this case fine, we just need to report an error properly.
This patch allowed btrfsck to continue and eventually fix his file system.
Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
---
 btrfsck.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/btrfsck.c b/btrfsck.c
index a851008..ff2d7b5 100644
--- a/btrfsck.c
+++ b/btrfsck.c
@@ -1772,6 +1772,10 @@ static int check_fs_roots(struct btrfs_root *root,
 		    fs_root_objectid(key.objectid)) {
 			tmp_root = btrfs_read_fs_root_no_cache(root->fs_info,
 							       &key);
+			if (IS_ERR(tmp_root)) {
+				err = 1;
+				goto next;
+			}
 			ret = check_fs_root(tmp_root, root_cache, &wc);
 			if (ret)
 				err = 1;
@@ -1781,6 +1785,7 @@ static int check_fs_roots(struct btrfs_root *root,
 			process_root_ref(leaf, path.slots[0], &key,
 					 root_cache);
 		}
+next:
 		path.slots[0]++;
 	}
 	btrfs_release_path(tree_root, &path);
@@ -1940,7 +1945,8 @@ static int check_owner_ref(struct btrfs_root *root,
 	key.offset = (u64)-1;
 
 	ref_root = btrfs_read_fs_root(root->fs_info, &key);
-	BUG_ON(IS_ERR(ref_root));
+	if (IS_ERR(ref_root))
+		return 1;
 
 	level = btrfs_header_level(buf);
 	if (level == 0)
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-02-01 20:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-01 20:17 [PATCH] Btrfs-progs: handle errors reading fs roots Josef Bacik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).