_target_gone() and end_target() do almost same operations. We had not unregistered pollers at the cases that sets target->is_draining to true. The later had hit assert when the test ended with I/O error before completion because when target->run_timer is expired, end_target() would be called after target is freed. Hence we do both in this patch. Factor out the operations from _target_gone() and end_target() into a helper function. Then, when the target exits with error, unregister pollers of the target immediately by replacing setting target->is_draining to true by _end_target(target). We had seen the assert for a single case but apply the fix for all cases. Fixes issue #1140 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: If39779817ed99c9441e368c1d4512c66d13d3378 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479911 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> |
||
---|---|---|
.. | ||
.gitignore | ||
bdevperf.c | ||
bdevperf.py | ||
Makefile |