]> granicus.if.org Git - zfs/commitdiff
zio_dva_throttle_done() should allow zinjected ZIO
authorsanjeevbagewadi <sanjeev.bagewadi@gmail.com>
Thu, 10 Aug 2017 22:53:40 +0000 (04:23 +0530)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Aug 2017 22:53:40 +0000 (15:53 -0700)
If fault injection is enabled, the ZIO_FLAG_IO_RETRY could be set by
zio_handle_device_injection() to generate the FMA events and update
stats. Hence, ignore the flag and process such zios.

A better fix would be to add another flag in the zio_t to indicate that
the zio is failed because of a zinject rule. However, considering the
fact that we do this in debug bits, we could do with the crude check
using the global flag zio_injection_enabled which is set to 1 when
zinject records are added.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Sanjeev Bagewadi <sanjeev.bagewadi@gmail.com>
Closes #6383
Closes #6384

module/zfs/zio.c

index 82e801e831f62f6f65b4c8194a8e96acd3a46023..1d69d8d8ded97ec72341c966b7d27bb2316c7c86 100644 (file)
@@ -3661,7 +3661,8 @@ zio_dva_throttle_done(zio_t *zio)
        ASSERT3U(zio->io_child_type, ==, ZIO_CHILD_VDEV);
        ASSERT(vd != NULL);
        ASSERT3P(vd, ==, vd->vdev_top);
-       ASSERT(!(zio->io_flags & (ZIO_FLAG_IO_REPAIR | ZIO_FLAG_IO_RETRY)));
+       ASSERT(zio_injection_enabled || !(zio->io_flags & ZIO_FLAG_IO_RETRY));
+       ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REPAIR));
        ASSERT(zio->io_flags & ZIO_FLAG_IO_ALLOCATING);
        ASSERT(!(lio->io_flags & ZIO_FLAG_IO_REWRITE));
        ASSERT(!(lio->io_orig_flags & ZIO_FLAG_NODATA));