[PATCH] Btrfs-progs: handle errors reading fs roots

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxx>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux