Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6d08f06 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

Btrfs: do not release metadata for space cache inodes



I've been testing our error paths and I was tripping the BUG_ON() in
drop_outstanding_extent because our outstanding_extents is 0 for space cache
inodes.  This is because we don't reserve metadata space for these inodes since
we depend on the global block reserve for our space.  To fix this we need to
make sure the DO_ACCOUNTING stuff doesn't actually call release_metadata for
space cache inodes.  With this patch I'm no longer panicing.  Thanks,

Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent e0228285
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -1551,7 +1551,13 @@ static void btrfs_clear_bit_hook(struct inode *inode,
			spin_unlock(&BTRFS_I(inode)->lock);
			spin_unlock(&BTRFS_I(inode)->lock);
		}
		}


		if (*bits & EXTENT_DO_ACCOUNTING)
		/*
		 * We don't reserve metadata space for space cache inodes so we
		 * don't need to call dellalloc_release_metadata if there is an
		 * error.
		 */
		if (*bits & EXTENT_DO_ACCOUNTING &&
		    root != root->fs_info->tree_root)
			btrfs_delalloc_release_metadata(inode, len);
			btrfs_delalloc_release_metadata(inode, len);


		if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
		if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID