Use taskq for dump_bytes()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 3 May 2013 21:17:21 +0000 (14:17 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 6 May 2013 21:05:42 +0000 (14:05 -0700)
commit044baf009aac4935eca0f96477eb3c43e95d758a
tree6cf6572adcd16703288895b25e5ca1c5a3aba5dd
parent7ef5e54e2e28884a04dc800657967b891239e933
Use taskq for dump_bytes()

The vn_rdwr() function performs I/O by calling the vfs_write() or
vfs_read() functions.  These functions reside just below the system
call layer and the expectation is they have almost the entire 8k of
stack space to work with.  In fact, certain layered configurations
such as ext+lvm+md+multipath require the majority of this stack to
avoid stack overflows.

To avoid this posibility the vn_rdwr() call in dump_bytes() has been
moved to the ZIO_TYPE_FREE, taskq.  This ensures that all I/O will be
performed with the majority of the stack space available.  This ends
up being very similiar to as if the I/O were issued via sys_write()
or sys_read().

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1399
Closes #1423
include/sys/spa_impl.h
include/sys/zfs_context.h
lib/libzpool/taskq.c
module/zfs/dmu_send.c
module/zfs/spa.c