db3d1201a4
There is a fatal bug that could easily cause data corruption when using thin-provisioned blobs. In blob_request_submit_rw_iov(), we first get lba by calling blob_calculate_lba_and_lba_count(), blob_calculate_lba_and_lba_count() calculates different lbas according to the return of bs_io_unit_is_allocated(). Later, we call bs_io_unit_is_allocated() again to judge whether the specific cluster is allocated, the problem is it may have be allocated here while not be allocated when calling blob_calculate_lba_and_lba_count() before. To ensure the correctness of lba, we can do lba recalculation when bs_io_unit_is_allocated() returns true, or make blob_calculate_lba_and_lba_count() return the result of bs_io_unit_is_allocated(), use the second solution in this patch. By configuring more than one cpu core, md thread will run in a separate SPDK thread, this data corruption scenario could be easily reproduced by running fio verify in VMs using thin-provisioned Lvols as block devices. Signed-off-by: Sochin Jiang <jiangxiaoqing.sochin@bytedance.com> Change-Id: I099865ff291ea42d5d49b693cc53f64b60881684 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3318 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> |
||
---|---|---|
.. | ||
blob_bs_dev.c | ||
blobstore.c | ||
blobstore.h | ||
Makefile | ||
request.c | ||
request.h | ||
spdk_blob.map | ||
zeroes.c |