diff --git a/lib/blob/request.c b/lib/blob/request.c index 75c851744..a26c6dec2 100644 --- a/lib/blob/request.c +++ b/lib/blob/request.c @@ -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) { diff --git a/lib/blob/request.h b/lib/blob/request.h index 9af07441a..c6f2941fa 100644 --- a/lib/blob/request.h +++ b/lib/blob/request.h @@ -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,