Skip to content

Commit

Permalink
flush: don't report flush error when disabling flush support
Browse files Browse the repository at this point in the history
The first time a device returns ENOTSUP in repsonse to a flush request,
we set vdev_nowritecache so we don't issue flushes in the future and
instead just pretend the succeeded. However, we still return an error
for the initial flush, even though we just decided such errors are
meaningless!

So, when setting vdev_nowritecache in response to a flush error, also
reset the error code to assume success.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes openzfs#16855
  • Loading branch information
robn authored and lundman committed Jan 22, 2025
1 parent 93e0384 commit a3d5c79
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions module/zfs/zio.c
Original file line number Diff line number Diff line change
Expand Up @@ -4608,11 +4608,14 @@ zio_vdev_io_assess(zio_t *zio)
/*
* If a cache flush returns ENOTSUP or ENOTTY, we know that no future
* attempts will ever succeed. In this case we set a persistent
* boolean flag so that we don't bother with it in the future.
* boolean flag so that we don't bother with it in the future, and
* then we act like the flush succeeded.
*/
if ((zio->io_error == ENOTSUP || zio->io_error == ENOTTY) &&
zio->io_type == ZIO_TYPE_FLUSH && vd != NULL)
zio->io_type == ZIO_TYPE_FLUSH && vd != NULL) {
vd->vdev_nowritecache = B_TRUE;
zio->io_error = 0;
}

if (zio->io_error)
zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
Expand Down

0 comments on commit a3d5c79

Please sign in to comment.