Improve arc_read() error reporting
commit87a4dfa561900dafaa446661538faa485af5f17a
authorAlexander Motin <mav@FreeBSD.org>
Mon, 13 Feb 2023 21:21:53 +0000 (13 16:21 -0500)
committerGitHub <noreply@github.com>
Mon, 13 Feb 2023 21:21:53 +0000 (13 13:21 -0800)
treed9edee838bd126792c1900eeba09909f170b1bd3
parent7883ea2234fac0cd976eb2ca0c6b51e7a5da7668
Improve arc_read() error reporting

Debugging reported NULL de-reference panic in dnode_hold_impl() I found
that for certain types of errors arc_read() may only return error code,
but not properly report it via done and pio arguments.  Lack of done
calls may result in reference and/or memory leaks in higher level code.
Lack of error reporting via pio may result in unnoticed errors there.
For example, dbuf_read(), where dbuf_read_impl() ignores arc_read()
return, relies completely on the pio mechanism and missed the errors.

This patch makes arc_read() to always call done callback and always
propagate errors to parent zio, if either is provided.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #14454
module/zfs/arc.c