[Ocfs2-devel] [PATCH 2/2] Enable cross extent block merge.V1

Mark Fasheh mark.fasheh at oracle.com
Sun Jan 6 21:58:55 PST 2008


On Fri, Jan 04, 2008 at 04:46:19PM +0800, tao.ma wrote:
>  static enum ocfs2_contig_type
> -ocfs2_figure_merge_contig_type(struct inode *inode,
> +ocfs2_figure_merge_contig_type(struct inode *inode, struct ocfs2_path *path,
>  			       struct ocfs2_extent_list *el, int index,
>  			       struct ocfs2_extent_rec *split_rec)
>  {
> -	struct ocfs2_extent_rec *rec;
> +	int status;
> +	struct ocfs2_extent_rec *rec = NULL;
>  	enum ocfs2_contig_type ret = CONTIG_NONE;
> +	u32 left_cpos, right_cpos;
> +	struct ocfs2_extent_list *new_el;
> +	struct ocfs2_path *left_path = NULL, *right_path = NULL;
> +
> +	if (index > 0) {
> +		rec = &el->l_recs[index - 1];
> +	} else if (path->p_tree_depth > 0) {
> +		status = ocfs2_find_cpos_for_left_leaf(inode->i_sb,
> +						       path, &left_cpos);
> +		if (status)
> +			goto out;
> +
> +		if (left_cpos != 0) {
> +			left_path = ocfs2_new_path(path_root_bh(path),
> +						   path_root_el(path));
> +			if (!left_path)
> +				goto out;
> +
> +			status = ocfs2_find_path(inode, left_path, left_cpos);
> +			if (status)
> +				goto out;
> +
> +			new_el = path_leaf_el(left_path);
> +
> +			BUG_ON(le16_to_cpu(new_el->l_next_free_rec) !=
> +			       le16_to_cpu(new_el->l_count));

Since we haven't seen this extent block before, this error condition should
make the file system go read-only, not BUG()


> +			rec = &new_el->l_recs[le16_to_cpu(new_el->l_count) - 1];

Use l_next_free_rec in the array here please.
	--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
mark.fasheh at oracle.com



More information about the Ocfs2-devel mailing list