Spdk/include/spdk
Shuhei Matsumoto 4b92ffb3f1 bdev: Not assert but pass completion status to spdk_bdev_io_get_buf_cb
When the specified buffer size to spdk_bdev_io_get_buf() is greater
than the permitted maximum, spdk_bdev_io_get_buf() asserts simply and
doesn't call the specified callback function.

SPDK SCSI library doesn't allocate read buffer and specifies
expected read buffer size, and expects that it is allocated by
spdk_bdev_io_get_buf().

Bdev perf tool also doesn't allocate read buffer and specifies
expected read buffer size, and expects that it is allocated by
spdk_bdev_io_get_buf().

When we support DIF insert and strip in iSCSI target, the read
buffer size iSCSI initiator requests and the read buffer size iSCSI target
requests will become different.

Even after that, iSCSI initiator and iSCSI target will negotiate correctly
not to cause buffer overflow in spdk_bdev_io_get_buf(), but if iSCSI
initiator ignores the result of negotiation, iSCSI initiator can request
read buffer size larger than the permitted maximum, and can cause
failure in iSCSI target. This is very flagile and should be avoided.

This patch do the following
- Add the completion status of spdk_bdev_io_get_buf() to
  spdk_bdev_io_get_buf_cb(),
- spdk_bdev_io_get_buf() calls spdk_bdev_io_get_buf_cb() by setting
  success to false, and return.
- spdk_bdev_io_get_buf_cb() in each bdev module calls assert if success
  is false.

Subsequent patches will process the case that success is false
in spdk_bdev_io_get_buf_cb().

Change-Id: I76429a86e18a69aa085a353ac94743296d270b82
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/446045
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Ziye Yang <ziye.yang@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
2019-02-27 01:59:11 +00:00
..
assert.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
barrier.h barrier/x86: use lock+add for smp_mb() instead of mfence 2019-02-11 23:08:57 +00:00
base64.h util/base64: add base64 lib and unit tests 2018-07-19 00:50:54 +00:00
bdev_module.h bdev: Not assert but pass completion status to spdk_bdev_io_get_buf_cb 2019-02-27 01:59:11 +00:00
bdev.h lib/bdev: Expose enabled DIF check types of bdev. 2019-02-08 23:37:13 +00:00
bit_array.h util: added bit array bitmask load, store and clear 2018-12-14 15:34:53 +00:00
blob_bdev.h bdev: rename spdk_bdev_module_if -> spdk_bdev_module 2018-03-13 00:55:12 -04:00
blob.h lvol: add option to change default data erase method 2019-01-23 22:25:37 +00:00
blobfs.h blobfs: add a new API to return file's unique ID 2018-08-29 16:29:22 +00:00
conf.h include/conf: add comments for public APIs 2018-02-26 11:59:09 -05:00
copy_engine.h include/copy_engine.h: add comments for callback functions 2018-05-28 01:45:03 +00:00
cpuset.h doc: fix a bunch of parameter-related Doxygen comments 2018-06-19 17:29:06 +00:00
crc16.h util/crc16: Add spdk_crc16_t10dif_copy to use in read strip and write insert 2018-12-20 17:52:29 +00:00
crc32.h util: Move architecture detection to crc32c.c 2019-02-04 19:14:22 +00:00
dif.h dif: Add seed value for guard to avoid 0 in case of all zero data. 2019-02-22 17:52:51 +00:00
endian.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
env_dpdk.h env: add spdk_env_dpdk_post_init 2019-01-08 13:28:31 +00:00
env.h OCF: use rte_pause in wait loop 2019-01-28 19:24:13 +00:00
event.h event: Remove max_delay_us parameter 2019-02-14 14:58:56 +00:00
fd.h include/fd.h: add comments for pubclic APIs 2018-01-04 12:12:10 -05:00
ftl.h lib/ftl: Remove NULL pointer checks in external APIs 2019-02-08 16:35:34 +00:00
gpt_spec.h bdev/gpt: dump partition name 2017-07-12 18:12:52 -04:00
histogram_data.h histograms: add function to merge histograms 2018-11-15 23:03:26 +00:00
io_channel.h thread: Rename io_channel.h to thread.h 2018-06-12 15:24:07 +00:00
ioat_spec.h ioat: clear the internal channel error register on reset 2018-08-13 16:59:18 +00:00
ioat.h ioat: add APIs to only build descriptors 2019-02-18 07:44:17 +00:00
iscsi_spec.h iscsi: fix layout of logout request reason field 2017-09-22 16:11:11 -04:00
json.h json: add utilities function enabling itaration over JSON object 2018-10-18 16:07:37 +00:00
jsonrpc.h jsonrpc: add connection close callback 2019-01-10 14:31:37 +00:00
likely.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
log.h log: remove "trace" from public API 2018-12-03 19:50:15 +00:00
lvol.h lvol: add option to change default data erase method 2019-01-23 22:25:37 +00:00
mmio.h mmio: add functions for 1 and 2 byte I/O accesses 2017-10-13 10:46:00 -04:00
nbd.h nbd: correct notes of spdk_nbd_start API 2019-02-20 01:14:18 +00:00
net.h net: make the net initialization in a correct way 2018-12-20 01:37:50 +00:00
nvme_intel.h include: move standard includes into spdk/stdinc.h 2017-05-08 10:11:01 -07:00
nvme_ocssd_spec.h ocssd: add chunk notification log struct 2018-09-27 01:30:45 +00:00
nvme_ocssd.h ocssd: add chunk notification log struct 2018-09-27 01:30:45 +00:00
nvme_spec.h nvme_spec: Add two macros to check status of command completion 2019-02-12 09:14:31 +00:00
nvme.h nvme: move probe context as a internal data structure 2019-02-22 18:13:39 +00:00
nvmf_fc_spec.h nvmf: FC-NVMe spec. header file 2018-07-06 22:49:20 +00:00
nvmf_spec.h nvme: Add the NVMe over fabrics TCP/IP transport support 2018-11-19 20:36:05 +00:00
nvmf.h nvmf: Add mechanism to override nvmf pd/mr behavior 2019-01-30 19:03:35 +00:00
pci_ids.h nvme: add SHST_COMPLETE quirk for VMWare emulated SSDs 2019-02-27 01:46:32 +00:00
queue_extras.h scripts/check_format: check for spaces before tabs 2018-03-05 11:09:13 -05:00
queue.h check_format: Verify #include syntax 2019-01-29 00:12:07 +00:00
reduce.h reduce: remove close callback 2019-01-16 22:25:13 +00:00
rpc.h rpc: add spdk_rpc_is_method_allowed 2018-12-05 00:35:35 +00:00
scsi_spec.h scsi: add iSCSI initiator port TransportID 2018-12-05 16:04:06 +00:00
scsi.h scsi: Set TMF code prior to calling spdk_scsi_dev_queue_mgmt_task 2018-12-10 20:34:11 +00:00
sock.h sock: Update the spdk_sock_getaddr function. 2018-10-11 04:58:49 +00:00
stdinc.h ftl: Added unit tests for FTL library 2019-01-22 23:22:16 +00:00
string.h string: spdk_strtol to delegate additional error checking 2019-01-29 00:10:57 +00:00
thread.h thread: Add a function to get the thread from a context 2019-02-14 14:58:56 +00:00
trace.h lib/trace: add trace_record tool 2019-01-30 06:36:25 +00:00
util.h util: added spdk_divide_round_up() 2018-12-18 17:26:49 +00:00
uuid.h util/uuid: add a new uuid copy API. 2018-12-06 22:25:09 +00:00
version.h version: 19.04 pre 2019-02-01 09:29:12 +00:00
vhost.h vhost: remove vhost external events 2019-02-06 19:04:21 +00:00