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

Commit 7cde31d7 authored by Ryusuke Konishi's avatar Ryusuke Konishi
Browse files

nilfs2: remove nilfs_btree_operations from btree mapping



will remove indirect function calls using nilfs_btree_operations
table.

Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
parent 355c6b61
Loading
Loading
Loading
Loading
+15 −37
Original line number Original line Diff line number Diff line
@@ -913,9 +913,9 @@ static int nilfs_btree_prepare_insert(struct nilfs_btree *btree,
	level = NILFS_BTREE_LEVEL_DATA;
	level = NILFS_BTREE_LEVEL_DATA;


	/* allocate a new ptr for data block */
	/* allocate a new ptr for data block */
	if (btree->bt_ops->btop_find_target != NULL)
	if (NILFS_BMAP_USE_VBN(&btree->bt_bmap))
		path[level].bp_newreq.bpr_ptr =
		path[level].bp_newreq.bpr_ptr =
			btree->bt_ops->btop_find_target(btree, path, key);
			nilfs_btree_find_target_v(btree, path, key);


	ret = nilfs_bmap_prepare_alloc_ptr(&btree->bt_bmap,
	ret = nilfs_bmap_prepare_alloc_ptr(&btree->bt_bmap,
					   &path[level].bp_newreq);
					   &path[level].bp_newreq);
@@ -1061,8 +1061,8 @@ static void nilfs_btree_commit_insert(struct nilfs_btree *btree,


	set_buffer_nilfs_volatile((struct buffer_head *)((unsigned long)ptr));
	set_buffer_nilfs_volatile((struct buffer_head *)((unsigned long)ptr));
	ptr = path[NILFS_BTREE_LEVEL_DATA].bp_newreq.bpr_ptr;
	ptr = path[NILFS_BTREE_LEVEL_DATA].bp_newreq.bpr_ptr;
	if (btree->bt_ops->btop_set_target != NULL)
	if (NILFS_BMAP_USE_VBN(&btree->bt_bmap))
		btree->bt_ops->btop_set_target(btree, key, ptr);
		nilfs_btree_set_target_v(btree, key, ptr);


	for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) {
	for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) {
		nilfs_bmap_commit_alloc_ptr(&btree->bt_bmap,
		nilfs_bmap_commit_alloc_ptr(&btree->bt_bmap,
@@ -1586,9 +1586,9 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *bmap, __u64 key,


	/* for data */
	/* for data */
	/* cannot find near ptr */
	/* cannot find near ptr */
	if (btree->bt_ops->btop_find_target != NULL)
	if (NILFS_BMAP_USE_VBN(bmap))
		dreq->bpr_ptr
		dreq->bpr_ptr = nilfs_btree_find_target_v(btree, NULL, key);
			= btree->bt_ops->btop_find_target(btree, NULL, key);

	ret = nilfs_bmap_prepare_alloc_ptr(bmap, dreq);
	ret = nilfs_bmap_prepare_alloc_ptr(bmap, dreq);
	if (ret < 0)
	if (ret < 0)
		return ret;
		return ret;
@@ -1681,8 +1681,8 @@ nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *bmap,
			nilfs_bmap_set_dirty(bmap);
			nilfs_bmap_set_dirty(bmap);
	}
	}


	if (btree->bt_ops->btop_set_target != NULL)
	if (NILFS_BMAP_USE_VBN(bmap))
		btree->bt_ops->btop_set_target(btree, key, dreq->bpr_ptr);
		nilfs_btree_set_target_v(btree, key, dreq->bpr_ptr);
}
}


/**
/**
@@ -1926,7 +1926,9 @@ static int nilfs_btree_propagate(const struct nilfs_bmap *bmap,
		goto out;
		goto out;
	}
	}


	ret = btree->bt_ops->btop_propagate(btree, path, level, bh);
	ret = NILFS_BMAP_USE_VBN(bmap) ?
		nilfs_btree_propagate_v(btree, path, level, bh) :
		nilfs_btree_propagate_p(btree, path, level, bh);


 out:
 out:
	nilfs_btree_clear_path(btree, path);
	nilfs_btree_clear_path(btree, path);
@@ -2107,8 +2109,9 @@ static int nilfs_btree_assign(struct nilfs_bmap *bmap,
		goto out;
		goto out;
	}
	}


	ret = btree->bt_ops->btop_assign(btree, path, level, bh,
	ret = NILFS_BMAP_USE_VBN(bmap) ?
					    blocknr, binfo);
		nilfs_btree_assign_v(btree, path, level, bh, blocknr, binfo) :
		nilfs_btree_assign_p(btree, path, level, bh, blocknr, binfo);


 out:
 out:
	nilfs_btree_clear_path(btree, path);
	nilfs_btree_clear_path(btree, path);
@@ -2220,34 +2223,9 @@ static const struct nilfs_bmap_operations nilfs_btree_ops_gc = {
	.bop_gather_data	=	NULL,
	.bop_gather_data	=	NULL,
};
};


static const struct nilfs_btree_operations nilfs_btree_ops_v = {
	.btop_find_target	=	nilfs_btree_find_target_v,
	.btop_set_target	=	nilfs_btree_set_target_v,
	.btop_propagate		=	nilfs_btree_propagate_v,
	.btop_assign		=	nilfs_btree_assign_v,
};

static const struct nilfs_btree_operations nilfs_btree_ops_p = {
	.btop_find_target	=	NULL,
	.btop_set_target	=	NULL,
	.btop_propagate		=	nilfs_btree_propagate_p,
	.btop_assign		=	nilfs_btree_assign_p,
};

int nilfs_btree_init(struct nilfs_bmap *bmap)
int nilfs_btree_init(struct nilfs_bmap *bmap)
{
{
	struct nilfs_btree *btree = (struct nilfs_btree *)bmap;

	bmap->b_ops = &nilfs_btree_ops;
	bmap->b_ops = &nilfs_btree_ops;
	switch (bmap->b_inode->i_ino) {
	case NILFS_DAT_INO:
		btree->bt_ops = &nilfs_btree_ops_p;
		break;
	default:
		btree->bt_ops = &nilfs_btree_ops_v;
		break;
	}

	return 0;
	return 0;
}
}


+0 −26
Original line number Original line Diff line number Diff line
@@ -33,28 +33,6 @@
struct nilfs_btree;
struct nilfs_btree;
struct nilfs_btree_path;
struct nilfs_btree_path;


/**
 * struct nilfs_btree_operations - B-tree operation table
 */
struct nilfs_btree_operations {
	__u64 (*btop_find_target)(const struct nilfs_btree *,
				  const struct nilfs_btree_path *, __u64);
	void (*btop_set_target)(struct nilfs_btree *, __u64, __u64);

	struct the_nilfs *(*btop_get_nilfs)(struct nilfs_btree *);

	int (*btop_propagate)(struct nilfs_btree *,
			      struct nilfs_btree_path *,
			      int,
			      struct buffer_head *);
	int (*btop_assign)(struct nilfs_btree *,
			   struct nilfs_btree_path *,
			   int,
			   struct buffer_head **,
			   sector_t,
			   union nilfs_binfo *);
};

/**
/**
 * struct nilfs_btree_node - B-tree node
 * struct nilfs_btree_node - B-tree node
 * @bn_flags: flags
 * @bn_flags: flags
@@ -80,13 +58,9 @@ struct nilfs_btree_node {
/**
/**
 * struct nilfs_btree - B-tree structure
 * struct nilfs_btree - B-tree structure
 * @bt_bmap: bmap base structure
 * @bt_bmap: bmap base structure
 * @bt_ops: B-tree operation table
 */
 */
struct nilfs_btree {
struct nilfs_btree {
	struct nilfs_bmap bt_bmap;
	struct nilfs_bmap bt_bmap;

	/* B-tree-specific members */
	const struct nilfs_btree_operations *bt_ops;
};
};