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

blob: add spdk_bs_batch_xxx_blob variants



These will be used to implement user request splitting
on cluster boundaries.

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

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


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarMaciej Szwed <maciej.szwed@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent c4659139
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
@@ -373,6 +373,71 @@ spdk_bs_batch_write_zeroes_dev(spdk_bs_batch_t *batch,
				   &set->cb_args);
}

static void
spdk_bs_batch_blob_op_complete(void *arg, int bserrno)
{
	/* TODO: spdk_bs_batch_completion does not actually use the channel parameter -
	 *  just pass NULL here instead of getting the channel from the set cb_arg.
	 */
	spdk_bs_batch_completion(NULL, arg, bserrno);
}

void
spdk_bs_batch_read_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			void *payload, uint64_t offset, uint64_t length)
{
	struct spdk_bs_request_set	*set = (struct spdk_bs_request_set *)batch;
	struct spdk_bs_channel		*channel = set->channel;

	SPDK_DEBUGLOG(SPDK_LOG_BLOB_RW, "Reading %lu pages from offset %lu\n", length, offset);

	set->u.batch.outstanding_ops++;
	spdk_bs_io_read_blob(blob, spdk_io_channel_from_ctx(channel), payload, offset,
			     length, spdk_bs_batch_blob_op_complete, set);
}

void
spdk_bs_batch_write_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			 void *payload, uint64_t offset, uint64_t length)
{
	struct spdk_bs_request_set	*set = (struct spdk_bs_request_set *)batch;
	struct spdk_bs_channel		*channel = set->channel;

	SPDK_DEBUGLOG(SPDK_LOG_BLOB_RW, "Writing %lu pages from offset %lu\n", length, offset);

	set->u.batch.outstanding_ops++;
	spdk_bs_io_write_blob(blob, spdk_io_channel_from_ctx(channel), payload, offset,
			      length, spdk_bs_batch_blob_op_complete, set);
}

void
spdk_bs_batch_unmap_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			 uint64_t offset, uint64_t length)
{
	struct spdk_bs_request_set	*set = (struct spdk_bs_request_set *)batch;
	struct spdk_bs_channel		*channel = set->channel;

	SPDK_DEBUGLOG(SPDK_LOG_BLOB_RW, "Unmapping %lu pages from offset %lu\n", length, offset);

	set->u.batch.outstanding_ops++;
	spdk_bs_io_unmap_blob(blob, spdk_io_channel_from_ctx(channel), offset, length,
			      spdk_bs_batch_blob_op_complete, set);
}

void
spdk_bs_batch_write_zeroes_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
				uint64_t offset, uint64_t length)
{
	struct spdk_bs_request_set	*set = (struct spdk_bs_request_set *)batch;
	struct spdk_bs_channel		*channel = set->channel;

	SPDK_DEBUGLOG(SPDK_LOG_BLOB_RW, "Zeroing %lu pages from offset %lu\n", length, offset);

	set->u.batch.outstanding_ops++;
	spdk_bs_io_write_zeroes_blob(blob, spdk_io_channel_from_ctx(channel), offset, length,
				     spdk_bs_batch_blob_op_complete, set);
}

void
spdk_bs_batch_close(spdk_bs_batch_t *batch)
{
+12 −0
Original line number Diff line number Diff line
@@ -184,6 +184,18 @@ void spdk_bs_batch_unmap_dev(spdk_bs_batch_t *batch,
void spdk_bs_batch_write_zeroes_dev(spdk_bs_batch_t *batch,
				    uint64_t lba, uint32_t lba_count);

void spdk_bs_batch_read_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			     void *payload, uint64_t offset, uint64_t length);

void spdk_bs_batch_write_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			      void *payload, uint64_t offset, uint64_t length);

void spdk_bs_batch_unmap_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
			      uint64_t offset, uint64_t length);

void spdk_bs_batch_write_zeroes_blob(spdk_bs_batch_t *batch, struct spdk_blob *blob,
				     uint64_t offset, uint64_t length);

void spdk_bs_batch_close(spdk_bs_batch_t *batch);

spdk_bs_batch_t *spdk_bs_sequence_to_batch(spdk_bs_sequence_t *seq,