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

Commit 0ce1010f authored by Joel Becker's avatar Joel Becker Committed by Mark Fasheh
Browse files

ocfs2: Provide the get_root_el() method to ocfs2_extent_tree_operations.



The root_el of an ocfs2_extent_tree needs to be calculated from
et->et_object.  Make it an operation on et->et_ops.

Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent ea5efa15
Loading
Loading
Loading
Loading
+30 −8
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ struct ocfs2_extent_tree_operations {
				   struct ocfs2_extent_tree *et,
				   u32 new_clusters);
	int (*eo_sanity_check)(struct inode *inode, struct ocfs2_extent_tree *et);

	/* These are internal to ocfs2_extent_tree and don't have
	 * accessor functions */
	void (*eo_fill_root_el)(struct ocfs2_extent_tree *et);
};

struct ocfs2_extent_tree {
@@ -83,6 +87,13 @@ struct ocfs2_extent_tree {
	unsigned int				et_max_leaf_clusters;
};

static void ocfs2_dinode_fill_root_el(struct ocfs2_extent_tree *et)
{
	struct ocfs2_dinode *di = et->et_object;

	et->et_root_el = &di->id2.i_list;
}

static void ocfs2_dinode_set_last_eb_blk(struct ocfs2_extent_tree *et,
					 u64 blkno)
{
@@ -136,8 +147,16 @@ static struct ocfs2_extent_tree_operations ocfs2_dinode_et_ops = {
	.eo_get_last_eb_blk	= ocfs2_dinode_get_last_eb_blk,
	.eo_update_clusters	= ocfs2_dinode_update_clusters,
	.eo_sanity_check	= ocfs2_dinode_sanity_check,
	.eo_fill_root_el	= ocfs2_dinode_fill_root_el,
};

static void ocfs2_xattr_value_fill_root_el(struct ocfs2_extent_tree *et)
{
	struct ocfs2_xattr_value_root *xv = et->et_object;

	et->et_root_el = &xv->xr_list;
}

static void ocfs2_xattr_value_set_last_eb_blk(struct ocfs2_extent_tree *et,
					      u64 blkno)
{
@@ -176,8 +195,16 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_et_ops = {
	.eo_get_last_eb_blk	= ocfs2_xattr_value_get_last_eb_blk,
	.eo_update_clusters	= ocfs2_xattr_value_update_clusters,
	.eo_sanity_check	= ocfs2_xattr_value_sanity_check,
	.eo_fill_root_el	= ocfs2_xattr_value_fill_root_el,
};

static void ocfs2_xattr_tree_fill_root_el(struct ocfs2_extent_tree *et)
{
	struct ocfs2_xattr_block *xb = et->et_object;

	et->et_root_el = &xb->xb_attrs.xb_root.xt_list;
}

static void ocfs2_xattr_tree_set_last_eb_blk(struct ocfs2_extent_tree *et,
					     u64 blkno)
{
@@ -215,6 +242,7 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_tree_et_ops = {
	.eo_get_last_eb_blk	= ocfs2_xattr_tree_get_last_eb_blk,
	.eo_update_clusters	= ocfs2_xattr_tree_update_clusters,
	.eo_sanity_check	= ocfs2_xattr_tree_sanity_check,
	.eo_fill_root_el	= ocfs2_xattr_tree_fill_root_el,
};

static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
@@ -232,22 +260,16 @@ static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
	et->et_object = obj;

	if (et_type == OCFS2_DINODE_EXTENT) {
		et->et_root_el =
			&((struct ocfs2_dinode *)obj)->id2.i_list;
		et->et_ops = &ocfs2_dinode_et_ops;
	} else if (et_type == OCFS2_XATTR_VALUE_EXTENT) {
		struct ocfs2_xattr_value_root *xv =
			(struct ocfs2_xattr_value_root *)obj;
		et->et_root_el = &xv->xr_list;
		et->et_ops = &ocfs2_xattr_et_ops;
	} else if (et_type == OCFS2_XATTR_TREE_EXTENT) {
		struct ocfs2_xattr_block *xb =
			(struct ocfs2_xattr_block *)obj;
		et->et_root_el = &xb->xb_attrs.xb_root.xt_list;
		et->et_ops = &ocfs2_xattr_tree_et_ops;
		et->et_max_leaf_clusters = ocfs2_clusters_for_bytes(inode->i_sb,
						OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
	}

	et->et_ops->eo_fill_root_el(et);
}

static void ocfs2_put_extent_tree(struct ocfs2_extent_tree *et)