]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Btrfs: don't BUG_ON() in btrfs_orphan_add
authorJosef Bacik <jbacik@fb.com>
Fri, 27 May 2016 17:03:04 +0000 (13:03 -0400)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 1 Jun 2017 06:07:20 +0000 (23:07 -0700)
Orabug: 25975316

This is just a screwup for developers, so change it to an ASSERT() so developers
notice when things go wrong and deal with the error appropriately if ASSERT()
isn't enabled.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Mark Fasheh <mfasheh@suse.de>
Signed-off-by: David Sterba <dsterba@suse.com>
(cherry picked from commit 3b6571c180da85e43550c608e954ab7b2a31d954)
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
fs/btrfs/inode.c

index ec029499c768b519ea8fb6eb731be2b3b2dc1a07..37a43c15d92189a09689bc5d30ea7ff2c2d8e332 100644 (file)
@@ -3230,7 +3230,16 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
        /* grab metadata reservation from transaction handle */
        if (reserve) {
                ret = btrfs_orphan_reserve_metadata(trans, inode);
-               BUG_ON(ret); /* -ENOSPC in reservation; Logic error? JDM */
+               ASSERT(!ret);
+               if (ret) {
+                       atomic_dec(&root->orphan_inodes);
+                       clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
+                                 &BTRFS_I(inode)->runtime_flags);
+                       if (insert)
+                               clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
+                                         &BTRFS_I(inode)->runtime_flags);
+                       return ret;
+               }
        }
 
        /* insert an orphan item to track this unlinked/truncated file */