From: Mark Fasheh Date: Mon, 29 Aug 2011 21:17:04 +0000 (-0700) Subject: btrfs: Go readonly on bad extent refs in update_ref_for_cow() X-Git-Tag: v3.4-rc1~22^2~13^2~11 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=e5df957328b18baa731307c66cfe8e7a4981df65;p=~emulex%2Finfiniband.git btrfs: Go readonly on bad extent refs in update_ref_for_cow() update_ref_for_cow() will BUG_ON() after it's call to btrfs_lookup_extent_info() if no existing references are found. Since refs are computed directly from disk, this should be treated as a corruption instead of a logic error. Signed-off-by: Mark Fasheh --- diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index e2e43c07f6b..3b767d2b68e 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -333,7 +333,11 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, buf->len, &refs, &flags); if (ret) return ret; - BUG_ON(refs == 0); + if (refs == 0) { + ret = -EROFS; + btrfs_std_error(root->fs_info, ret); + return ret; + } } else { refs = 1; if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID ||