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

Commit 56b453c9 authored by Chris Mason's avatar Chris Mason
Browse files

Btrfs: Explicitly send a root objectid to count_snapshots_in_path

parent 8f662a76
Loading
Loading
Loading
Loading
+6 −10
Original line number Original line Diff line number Diff line
@@ -688,7 +688,7 @@ u32 btrfs_count_snapshots_in_path(struct btrfs_root *root,
	struct btrfs_path *path;
	struct btrfs_path *path;
	u64 bytenr;
	u64 bytenr;
	u64 found_objectid;
	u64 found_objectid;
	u64 root_objectid = 0;
	u64 root_objectid = root->root_key.objectid;
	u32 total_count = 0;
	u32 total_count = 0;
	u32 cur_count;
	u32 cur_count;
	u32 refs;
	u32 refs;
@@ -749,15 +749,11 @@ u32 btrfs_count_snapshots_in_path(struct btrfs_root *root,
					  struct btrfs_extent_ref);
					  struct btrfs_extent_ref);
		found_objectid = btrfs_ref_root(l, ref_item);
		found_objectid = btrfs_ref_root(l, ref_item);


		if (found_objectid != root_objectid)
		if (found_objectid != root_objectid) {
			total_count++;
			total_count = 2;

			break;
		if (total_count > 1)
		}
			goto out;
		total_count = 1;

		if (root_objectid == 0)
			root_objectid = found_objectid;

		path->slots[0]++;
		path->slots[0]++;
	}
	}
	if (cur_count == 0) {
	if (cur_count == 0) {
+5 −34
Original line number Original line Diff line number Diff line
@@ -1770,6 +1770,11 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
again:
again:
	em = lookup_extent_mapping(em_tree, start, end);
	em = lookup_extent_mapping(em_tree, start, end);
	if (em) {
	if (em) {
		if (em->start > start) {
			printk("get_extent start %Lu em start %Lu\n",
			       start, em->start);
			WARN_ON(1);
		}
		goto out;
		goto out;
	}
	}
	if (!em) {
	if (!em) {
@@ -1952,23 +1957,6 @@ static sector_t btrfs_bmap(struct address_space *mapping, sector_t iblock)
	return extent_bmap(mapping, iblock, btrfs_get_extent);
	return extent_bmap(mapping, iblock, btrfs_get_extent);
}
}


static int btrfs_prepare_write(struct file *file, struct page *page,
			       unsigned from, unsigned to)
{
	struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
	int err;

	mutex_lock(&root->fs_info->fs_mutex);
	err = btrfs_check_free_space(root, PAGE_CACHE_SIZE, 0);
	mutex_unlock(&root->fs_info->fs_mutex);
	if (err)
		return -ENOSPC;

	return extent_prepare_write(&BTRFS_I(page->mapping->host)->extent_tree,
				    page->mapping->host, page, from, to,
				    btrfs_get_extent);
}

int btrfs_readpage(struct file *file, struct page *page)
int btrfs_readpage(struct file *file, struct page *page)
{
{
	struct extent_map_tree *tree;
	struct extent_map_tree *tree;
@@ -2120,21 +2108,6 @@ static void btrfs_truncate(struct inode *inode)
	btrfs_btree_balance_dirty(root, nr);
	btrfs_btree_balance_dirty(root, nr);
}
}


int btrfs_commit_write(struct file *file, struct page *page,
		       unsigned from, unsigned to)
{
	loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
	struct inode *inode = page->mapping->host;

	btrfs_cow_one_page(inode, page, PAGE_CACHE_SIZE);

	if (pos > inode->i_size) {
		i_size_write(inode, pos);
		mark_inode_dirty(inode);
	}
	return 0;
}

static int create_subvol(struct btrfs_root *root, char *name, int namelen)
static int create_subvol(struct btrfs_root *root, char *name, int namelen)
{
{
	struct btrfs_trans_handle *trans;
	struct btrfs_trans_handle *trans;
@@ -2930,8 +2903,6 @@ static struct address_space_operations btrfs_aops = {
	.writepages	= btrfs_writepages,
	.writepages	= btrfs_writepages,
	.readpages	= btrfs_readpages,
	.readpages	= btrfs_readpages,
	.sync_page	= block_sync_page,
	.sync_page	= block_sync_page,
	.prepare_write	= btrfs_prepare_write,
	.commit_write	= btrfs_commit_write,
	.bmap		= btrfs_bmap,
	.bmap		= btrfs_bmap,
	.invalidatepage = btrfs_invalidatepage,
	.invalidatepage = btrfs_invalidatepage,
	.releasepage	= btrfs_releasepage,
	.releasepage	= btrfs_releasepage,