[sheepdog] [PATCH v1 3/4] lib: change xmalloc() to xvalloc() in sd_inode.c

Liu Yuan namei.unix at gmail.com
Wed Jan 29 11:01:45 CET 2014


On Wed, Jan 29, 2014 at 05:15:06PM +0800, Robin Dong wrote:
> The default_read_from_path() returned "Invalid argument" when we running
> sheepdog cluster in test environment with sheep option "-D". The reason
> is that the allocating memory for reading and writing btree-object is not
> aligned. Therefore we should use xvalloc() instead of xmalloc() to allocate
> aligned memory.
> 
> Signed-off-by: Robin Dong <sanbai at taobao.com>
> ---
>  lib/sd_inode.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/lib/sd_inode.c b/lib/sd_inode.c
> index f058582..8c827fa 100644
> --- a/lib/sd_inode.c
> +++ b/lib/sd_inode.c
> @@ -157,7 +157,7 @@ void traverse_btree(read_node_fn reader, const struct sd_inode *inode,
>  	} else if (header->depth == 2) {
>  		last_idx = LAST_IDX(inode->data_vdi_id);
>  		iter_idx = FIRST_IDX(inode->data_vdi_id);
> -		leaf_node = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +		leaf_node = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  		tmp = (void *)leaf_node;
>  
>  		while (iter_idx != last_idx) {
> @@ -361,8 +361,8 @@ static void transfer_to_idx_root(write_node_fn writer, struct sd_inode *inode)
>  	uint32_t num = root->entries / 2;
>  
>  	/* create two leaf-node and copy the entries from root-node */
> -	left = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> -	right = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +	left = xvalloc(SD_INODE_DATA_INDEX_SIZE);
> +	right = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  
>  	split_to_nodes(root, left, right, num);
>  
> @@ -403,7 +403,7 @@ static int search_whole_btree(read_node_fn reader, const struct sd_inode *inode,
>  	if (header->depth == 2) {
>  		path->depth = 2;
>  		path->p_idx = search_idx_entry(header, idx);
> -		leaf_node = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +		leaf_node = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  		tmp = (void *)leaf_node;
>  
>  		if (idx_in_range(header, path->p_idx)) {
> @@ -475,7 +475,7 @@ static void split_ext_node(write_node_fn writer, struct sd_inode *inode,
>  	uint32_t num = old->entries / 2;
>  	uint64_t new_oid;
>  
> -	new_ext = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +	new_ext = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  
>  	split_to_nodes(old, new_ext, old, num);
>  
> @@ -544,7 +544,7 @@ static int insert_new_node(write_node_fn writer, read_node_fn reader,
>  			if (header->entries >= EXT_IDX_MAX_ENTRIES)
>  				panic("%s() B-tree is full!", __func__);
>  			/* create a new ext-node */
> -			leaf_node = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +			leaf_node = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  			sd_inode_init(leaf_node, 2);
>  			oid = vid_to_btree_oid(inode->vdi_id,
>  					inode->btree_counter++);
> @@ -715,7 +715,7 @@ void sd_inode_copy_vdis(write_node_fn writer, read_node_fn reader,
>  		last_idx = LAST_IDX(data_vdi_id);
>  		old_iter_idx = FIRST_IDX(data_vdi_id);
>  		new_iter_idx = FIRST_IDX(newi->data_vdi_id);
> -		leaf_node = xmalloc(SD_INODE_DATA_INDEX_SIZE);
> +		leaf_node = xvalloc(SD_INODE_DATA_INDEX_SIZE);
>  		tmp = (void *)leaf_node;
>  		while (old_iter_idx != last_idx) {
>  			reader(old_iter_idx->oid, &tmp,
> -- 
> 1.7.12.4
> 
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog

Applied thanks

Yuan



More information about the sheepdog mailing list