Loading include/spdk/bdev.h +18 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,24 @@ const char *spdk_bdev_get_name(const struct spdk_bdev *bdev); */ const char *spdk_bdev_get_product_name(const struct spdk_bdev *bdev); /** * Get block device logical block size. * * \param bdev Block device to query. * \return Size of logical block for this bdev in bytes. */ uint32_t spdk_bdev_get_block_size(const struct spdk_bdev *bdev); /** * Get size of block device in logical blocks. * * \param bdev Block device to query. * \return Size of bdev in logical blocks. * * Logical blocks are numbered from 0 to spdk_bdev_get_num_blocks(bdev) - 1, inclusive. */ uint64_t spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev); /** * Get minimum I/O buffer address alignment for a bdev. * Loading lib/bdev/bdev.c +12 −0 Original line number Diff line number Diff line Loading @@ -545,6 +545,18 @@ spdk_bdev_get_product_name(const struct spdk_bdev *bdev) return bdev->product_name; } uint32_t spdk_bdev_get_block_size(const struct spdk_bdev *bdev) { return bdev->blocklen; } uint64_t spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev) { return bdev->blockcnt; } size_t spdk_bdev_get_buf_align(const struct spdk_bdev *bdev) { Loading lib/bdev/rpc/bdev_rpc.c +2 −2 Original line number Diff line number Diff line Loading @@ -66,10 +66,10 @@ spdk_rpc_get_bdevs(struct spdk_jsonrpc_server_conn *conn, spdk_json_write_string(w, spdk_bdev_get_product_name(bdev)); spdk_json_write_name(w, "block_size"); spdk_json_write_uint32(w, bdev->blocklen); spdk_json_write_uint32(w, spdk_bdev_get_block_size(bdev)); spdk_json_write_name(w, "num_blocks"); spdk_json_write_uint64(w, bdev->blockcnt); spdk_json_write_uint64(w, spdk_bdev_get_num_blocks(bdev)); spdk_json_write_name(w, "claimed"); if (bdev->status == SPDK_BDEV_STATUS_CLAIMED) { Loading lib/blob/bdev/blob_bdev.c +2 −2 Original line number Diff line number Diff line Loading @@ -148,8 +148,8 @@ spdk_bdev_create_bs_dev(struct spdk_bdev *bdev) } b->bdev = bdev; b->bs_dev.blockcnt = bdev->blockcnt; b->bs_dev.blocklen = bdev->blocklen; b->bs_dev.blockcnt = spdk_bdev_get_num_blocks(bdev); b->bs_dev.blocklen = spdk_bdev_get_block_size(bdev); b->bs_dev.create_channel = bdev_blob_create_channel; b->bs_dev.destroy_channel = bdev_blob_destroy_channel; b->bs_dev.destroy = bdev_blob_destroy; Loading lib/nvmf/virtual.c +12 −8 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ identify_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_nvme_ns_data *nsdata) { struct spdk_bdev *bdev; uint64_t num_blocks; if (cmd->nsid > subsystem->dev.virt.ns_count || cmd->nsid == 0) { SPDK_ERRLOG("Identify Namespace for invalid NSID %u\n", cmd->nsid); Loading @@ -192,12 +193,14 @@ identify_ns(struct spdk_nvmf_subsystem *subsystem, bdev = subsystem->dev.virt.ns_list[cmd->nsid - 1]; nsdata->nsze = bdev->blockcnt; nsdata->ncap = bdev->blockcnt; nsdata->nuse = bdev->blockcnt; num_blocks = spdk_bdev_get_num_blocks(bdev); nsdata->nsze = num_blocks; nsdata->ncap = num_blocks; nsdata->nuse = num_blocks; nsdata->nlbaf = 0; nsdata->flbas.format = 0; nsdata->lbaf[0].lbads = spdk_u32log2(bdev->blocklen); nsdata->lbaf[0].lbads = spdk_u32log2(spdk_bdev_get_block_size(bdev)); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } Loading Loading @@ -377,14 +380,15 @@ nvmf_virtual_ctrlr_rw_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, uint64_t io_bytes; uint64_t offset; uint64_t llen; uint32_t block_size = spdk_bdev_get_block_size(bdev); struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; struct nvme_read_cdw12 *cdw12 = (struct nvme_read_cdw12 *)&cmd->cdw12; blockcnt = bdev->blockcnt; blockcnt = spdk_bdev_get_num_blocks(bdev); lba_address = cmd->cdw11; lba_address = (lba_address << 32) + cmd->cdw10; offset = lba_address * bdev->blocklen; offset = lba_address * block_size; llen = cdw12->nlb + 1; if (lba_address >= blockcnt || llen > blockcnt || lba_address > (blockcnt - llen)) { Loading @@ -393,7 +397,7 @@ nvmf_virtual_ctrlr_rw_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } io_bytes = llen * bdev->blocklen; io_bytes = llen * block_size; if (io_bytes > req->length) { SPDK_ERRLOG("Read/Write NLB > SGL length\n"); response->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID; Loading Loading @@ -427,7 +431,7 @@ nvmf_virtual_ctrlr_flush_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, uint64_t nbytes; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; nbytes = bdev->blockcnt * bdev->blocklen; nbytes = spdk_bdev_get_num_blocks(bdev) * spdk_bdev_get_block_size(bdev); if (spdk_bdev_flush(bdev, ch, 0, nbytes, nvmf_virtual_ctrlr_complete_cmd, req) == NULL) { response->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; Loading Loading
include/spdk/bdev.h +18 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,24 @@ const char *spdk_bdev_get_name(const struct spdk_bdev *bdev); */ const char *spdk_bdev_get_product_name(const struct spdk_bdev *bdev); /** * Get block device logical block size. * * \param bdev Block device to query. * \return Size of logical block for this bdev in bytes. */ uint32_t spdk_bdev_get_block_size(const struct spdk_bdev *bdev); /** * Get size of block device in logical blocks. * * \param bdev Block device to query. * \return Size of bdev in logical blocks. * * Logical blocks are numbered from 0 to spdk_bdev_get_num_blocks(bdev) - 1, inclusive. */ uint64_t spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev); /** * Get minimum I/O buffer address alignment for a bdev. * Loading
lib/bdev/bdev.c +12 −0 Original line number Diff line number Diff line Loading @@ -545,6 +545,18 @@ spdk_bdev_get_product_name(const struct spdk_bdev *bdev) return bdev->product_name; } uint32_t spdk_bdev_get_block_size(const struct spdk_bdev *bdev) { return bdev->blocklen; } uint64_t spdk_bdev_get_num_blocks(const struct spdk_bdev *bdev) { return bdev->blockcnt; } size_t spdk_bdev_get_buf_align(const struct spdk_bdev *bdev) { Loading
lib/bdev/rpc/bdev_rpc.c +2 −2 Original line number Diff line number Diff line Loading @@ -66,10 +66,10 @@ spdk_rpc_get_bdevs(struct spdk_jsonrpc_server_conn *conn, spdk_json_write_string(w, spdk_bdev_get_product_name(bdev)); spdk_json_write_name(w, "block_size"); spdk_json_write_uint32(w, bdev->blocklen); spdk_json_write_uint32(w, spdk_bdev_get_block_size(bdev)); spdk_json_write_name(w, "num_blocks"); spdk_json_write_uint64(w, bdev->blockcnt); spdk_json_write_uint64(w, spdk_bdev_get_num_blocks(bdev)); spdk_json_write_name(w, "claimed"); if (bdev->status == SPDK_BDEV_STATUS_CLAIMED) { Loading
lib/blob/bdev/blob_bdev.c +2 −2 Original line number Diff line number Diff line Loading @@ -148,8 +148,8 @@ spdk_bdev_create_bs_dev(struct spdk_bdev *bdev) } b->bdev = bdev; b->bs_dev.blockcnt = bdev->blockcnt; b->bs_dev.blocklen = bdev->blocklen; b->bs_dev.blockcnt = spdk_bdev_get_num_blocks(bdev); b->bs_dev.blocklen = spdk_bdev_get_block_size(bdev); b->bs_dev.create_channel = bdev_blob_create_channel; b->bs_dev.destroy_channel = bdev_blob_destroy_channel; b->bs_dev.destroy = bdev_blob_destroy; Loading
lib/nvmf/virtual.c +12 −8 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ identify_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_nvme_ns_data *nsdata) { struct spdk_bdev *bdev; uint64_t num_blocks; if (cmd->nsid > subsystem->dev.virt.ns_count || cmd->nsid == 0) { SPDK_ERRLOG("Identify Namespace for invalid NSID %u\n", cmd->nsid); Loading @@ -192,12 +193,14 @@ identify_ns(struct spdk_nvmf_subsystem *subsystem, bdev = subsystem->dev.virt.ns_list[cmd->nsid - 1]; nsdata->nsze = bdev->blockcnt; nsdata->ncap = bdev->blockcnt; nsdata->nuse = bdev->blockcnt; num_blocks = spdk_bdev_get_num_blocks(bdev); nsdata->nsze = num_blocks; nsdata->ncap = num_blocks; nsdata->nuse = num_blocks; nsdata->nlbaf = 0; nsdata->flbas.format = 0; nsdata->lbaf[0].lbads = spdk_u32log2(bdev->blocklen); nsdata->lbaf[0].lbads = spdk_u32log2(spdk_bdev_get_block_size(bdev)); return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } Loading Loading @@ -377,14 +380,15 @@ nvmf_virtual_ctrlr_rw_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, uint64_t io_bytes; uint64_t offset; uint64_t llen; uint32_t block_size = spdk_bdev_get_block_size(bdev); struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; struct nvme_read_cdw12 *cdw12 = (struct nvme_read_cdw12 *)&cmd->cdw12; blockcnt = bdev->blockcnt; blockcnt = spdk_bdev_get_num_blocks(bdev); lba_address = cmd->cdw11; lba_address = (lba_address << 32) + cmd->cdw10; offset = lba_address * bdev->blocklen; offset = lba_address * block_size; llen = cdw12->nlb + 1; if (lba_address >= blockcnt || llen > blockcnt || lba_address > (blockcnt - llen)) { Loading @@ -393,7 +397,7 @@ nvmf_virtual_ctrlr_rw_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } io_bytes = llen * bdev->blocklen; io_bytes = llen * block_size; if (io_bytes > req->length) { SPDK_ERRLOG("Read/Write NLB > SGL length\n"); response->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID; Loading Loading @@ -427,7 +431,7 @@ nvmf_virtual_ctrlr_flush_cmd(struct spdk_bdev *bdev, struct spdk_io_channel *ch, uint64_t nbytes; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; nbytes = bdev->blockcnt * bdev->blocklen; nbytes = spdk_bdev_get_num_blocks(bdev) * spdk_bdev_get_block_size(bdev); if (spdk_bdev_flush(bdev, ch, 0, nbytes, nvmf_virtual_ctrlr_complete_cmd, req) == NULL) { response->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; Loading