Commit d465a21a authored by Jim Harris's avatar Jim Harris
Browse files

reduce: allocate scratch buffer space for requests



Each request will need a scratch buffer of size
chunk_size.  This is needed for read/modify/write
operations when only part of a chunk is written.

Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Ided33f1e9ae18dd9a5de45f53f0a994a6f260b17

Reviewed-on: https://review.gerrithub.io/434111


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 6a6c6bf3
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ struct spdk_reduce_pm_file {
};

struct spdk_reduce_vol_request {
	uint8_t					*buf;
	TAILQ_ENTRY(spdk_reduce_vol_request)	tailq;
};

@@ -92,6 +93,7 @@ struct spdk_reduce_vol {

	struct spdk_reduce_vol_request		*request_mem;
	TAILQ_HEAD(, spdk_reduce_vol_request)	requests;
	uint8_t					*bufspace;
};

/*
@@ -236,13 +238,21 @@ _allocate_vol_requests(struct spdk_reduce_vol *vol)
	struct spdk_reduce_vol_request *req;
	int i;

	vol->bufspace = spdk_dma_malloc(REDUCE_NUM_VOL_REQUESTS * vol->params.chunk_size, 64, NULL);
	if (vol->bufspace == NULL) {
		return -ENOMEM;
	}

	vol->request_mem = calloc(REDUCE_NUM_VOL_REQUESTS, sizeof(*req));
	if (vol->request_mem == NULL) {
		free(vol->bufspace);
		return -ENOMEM;
	}

	for (i = 0; i < REDUCE_NUM_VOL_REQUESTS; i++) {
		TAILQ_INSERT_HEAD(&vol->requests, &vol->request_mem[i], tailq);
		req = &vol->request_mem[i];
		TAILQ_INSERT_HEAD(&vol->requests, req, tailq);
		req->buf = vol->bufspace + i * vol->params.chunk_size;
	}

	return 0;
@@ -261,6 +271,7 @@ _init_load_cleanup(struct spdk_reduce_vol *vol, struct reduce_init_load_ctx *ctx
		spdk_bit_array_free(&vol->allocated_chunk_maps);
		spdk_bit_array_free(&vol->allocated_backing_io_units);
		free(vol->request_mem);
		spdk_dma_free(vol->bufspace);
		free(vol);
	}
}