aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNed Bass <[email protected]>2014-01-15 13:52:57 -0800
committerBrian Behlendorf <[email protected]>2014-01-23 09:58:07 -0800
commit04aa2de8f788654dda15e0b598fc874915b0fc06 (patch)
tree243dd7d45fa5dcb3559f5a56980b3a91b72882d3
parent3566d5c7c3cb415a53218251fc0247da55dfde46 (diff)
vdev_file_io_start() to use taskq_dispatch(TQ_PUSHPAGE)
The vdev_file_io_start() function may be processing a zio that the txg_sync thread is waiting on. In this case it is not safe to perform memory allocations that may generate new I/O since this could cause a deadlock. To avoid this, call taskq_dispatch() with TQ_PUSHPAGE instead of TQ_SLEEP. Signed-off-by: Ned Bass <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #1928
-rw-r--r--module/zfs/vdev_file.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/module/zfs/vdev_file.c b/module/zfs/vdev_file.c
index c0d062b0e..858582aca 100644
--- a/module/zfs/vdev_file.c
+++ b/module/zfs/vdev_file.c
@@ -185,7 +185,7 @@ vdev_file_io_start(zio_t *zio)
}
VERIFY3U(taskq_dispatch(system_taskq, vdev_file_io_strategy, zio,
- TQ_SLEEP), !=, 0);
+ TQ_PUSHPAGE), !=, 0);
return (ZIO_PIPELINE_STOP);
}