mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Prevent reclaim in send_traverse_thread()
As is the case with traverse_prefetch_thread(), the deep stacks caused by traversal require disabling reclaim in the send traverse thread. Also, do the same for receive_writer_thread() in which similar problems have been observed. Signed-off-by: Tim Chase <tim@chase2k.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #4912 Closes #4998
This commit is contained in:
parent
23827a4ca1
commit
3e635ac15c
@ -573,6 +573,7 @@ send_traverse_thread(void *arg)
|
|||||||
struct send_thread_arg *st_arg = arg;
|
struct send_thread_arg *st_arg = arg;
|
||||||
int err;
|
int err;
|
||||||
struct send_block_record *data;
|
struct send_block_record *data;
|
||||||
|
fstrans_cookie_t cookie = spl_fstrans_mark();
|
||||||
|
|
||||||
if (st_arg->ds != NULL) {
|
if (st_arg->ds != NULL) {
|
||||||
err = traverse_dataset_resume(st_arg->ds,
|
err = traverse_dataset_resume(st_arg->ds,
|
||||||
@ -585,6 +586,7 @@ send_traverse_thread(void *arg)
|
|||||||
data = kmem_zalloc(sizeof (*data), KM_SLEEP);
|
data = kmem_zalloc(sizeof (*data), KM_SLEEP);
|
||||||
data->eos_marker = B_TRUE;
|
data->eos_marker = B_TRUE;
|
||||||
bqueue_enqueue(&st_arg->q, data, 1);
|
bqueue_enqueue(&st_arg->q, data, 1);
|
||||||
|
spl_fstrans_unmark(cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2737,6 +2739,8 @@ receive_writer_thread(void *arg)
|
|||||||
{
|
{
|
||||||
struct receive_writer_arg *rwa = arg;
|
struct receive_writer_arg *rwa = arg;
|
||||||
struct receive_record_arg *rrd;
|
struct receive_record_arg *rrd;
|
||||||
|
fstrans_cookie_t cookie = spl_fstrans_mark();
|
||||||
|
|
||||||
for (rrd = bqueue_dequeue(&rwa->q); !rrd->eos_marker;
|
for (rrd = bqueue_dequeue(&rwa->q); !rrd->eos_marker;
|
||||||
rrd = bqueue_dequeue(&rwa->q)) {
|
rrd = bqueue_dequeue(&rwa->q)) {
|
||||||
/*
|
/*
|
||||||
@ -2761,6 +2765,7 @@ receive_writer_thread(void *arg)
|
|||||||
rwa->done = B_TRUE;
|
rwa->done = B_TRUE;
|
||||||
cv_signal(&rwa->cv);
|
cv_signal(&rwa->cv);
|
||||||
mutex_exit(&rwa->mutex);
|
mutex_exit(&rwa->mutex);
|
||||||
|
spl_fstrans_unmark(cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user