From: Shin'ichiro Kawasaki Date: Thu, 1 Dec 2022 02:44:25 +0000 (+0900) Subject: backend: respect return value of init_io_u_buffers X-Git-Tag: fio-3.34~78 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=6d8fe6e847bb43cf7db5eee4cf58fd490f12be47 backend: respect return value of init_io_u_buffers When workloads require large buffer for I/O, fio fails to allocate I/O buffer but does not report meaningful error message. It just accesses to null pointer and fail with signal 11. This symptom is observed with the command line below: $ fio --name=job --filename=/tmp/fio --rw=write --bs=1g --size=1g \ --iodepth=128 --ioengine=libaio The I/O buffer allocation is done in function init_io_u_buffers. The allocation failure is not reported because return value of the function is ignored. Check the return value and report to the higher layer. Fixes: 71e6e5a2fd5c ("iolog replay: Realloc io_u buffers to adapt to operation size.") Signed-off-by: Shin'ichiro Kawasaki Link: https://lore.kernel.org/r/20221201024425.2340442-1-shinichiro.kawasaki@wdc.com Signed-off-by: Jens Axboe --- diff --git a/backend.c b/backend.c index ba954a6b..928e524a 100644 --- a/backend.c +++ b/backend.c @@ -1301,7 +1301,8 @@ static int init_io_u(struct thread_data *td) } } - init_io_u_buffers(td); + if (init_io_u_buffers(td)) + return 1; if (init_file_completion_logging(td, max_units)) return 1; diff --git a/blktrace.c b/blktrace.c index 00e5f9a9..d5c8aee7 100644 --- a/blktrace.c +++ b/blktrace.c @@ -545,7 +545,8 @@ bool read_blktrace(struct thread_data* td) td->o.max_bs[DDIR_TRIM] = max(td->o.max_bs[DDIR_TRIM], rw_bs[DDIR_TRIM]); io_u_quiesce(td); free_io_mem(td); - init_io_u_buffers(td); + if (init_io_u_buffers(td)) + return false; } return true; } diff --git a/iolog.c b/iolog.c index aa9c3bb1..62f2f524 100644 --- a/iolog.c +++ b/iolog.c @@ -620,7 +620,8 @@ static bool read_iolog(struct thread_data *td) { io_u_quiesce(td); free_io_mem(td); - init_io_u_buffers(td); + if (init_io_u_buffers(td)) + return false; } return true; }