In r286705 (Illumos 5960/a2cdcdd), a separate thread is created with curproc
as parent. In the case of a send or receive, the curproc would be the userland application that issues the ioctl. This would trigger an assertion failure introduced in Solaris compatibility shims in r196458 when kernel is compiled with INVARIANTS. Fix this by using p0 (proc0 or kernel) as the parent thread when creating the kernel threads.
This commit is contained in:
parent
8ed6922046
commit
253d699d3c
@ -786,7 +786,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_t *to_ds,
|
||||
to_arg.ds = to_ds;
|
||||
to_arg.fromtxg = fromtxg;
|
||||
to_arg.flags = TRAVERSE_PRE | TRAVERSE_PREFETCH;
|
||||
(void) thread_create(NULL, 0, send_traverse_thread, &to_arg, 0, curproc,
|
||||
(void) thread_create(NULL, 0, send_traverse_thread, &to_arg, 0, &p0,
|
||||
TS_RUN, minclsyspri);
|
||||
|
||||
struct send_block_record *to_data;
|
||||
@ -2446,7 +2446,7 @@ dmu_recv_stream(dmu_recv_cookie_t *drc, struct file *fp, offset_t *voffp,
|
||||
rwa.os = ra.os;
|
||||
rwa.byteswap = drc->drc_byteswap;
|
||||
|
||||
(void) thread_create(NULL, 0, receive_writer_thread, &rwa, 0, curproc,
|
||||
(void) thread_create(NULL, 0, receive_writer_thread, &rwa, 0, &p0,
|
||||
TS_RUN, minclsyspri);
|
||||
/*
|
||||
* We're reading rwa.err without locks, which is safe since we are the
|
||||
|
Loading…
x
Reference in New Issue
Block a user