mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
Switch KM_SLEEP to KM_PUSHPAGE
Under certain circumstances the following functions may be called in a context where KM_SLEEP is unsafe and can result in a deadlocked system. To avoid this problem the unconditional KM_SLEEPs are converted to KM_PUSHPAGEs. This will prevent them from attempting to initiate any I/O during direct reclaim. This change was originally part ofcd5ca4b
but was reverted by330fe01
. It always should have had its own commit for exactly this reason. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
9b51f21841
commit
3050c9314f
@ -98,14 +98,14 @@ __thread_create(caddr_t stk, size_t stksize, thread_func_t func,
|
||||
/* Variable stack size unsupported */
|
||||
ASSERT(stk == NULL);
|
||||
|
||||
tp = kmem_alloc(sizeof(thread_priv_t), KM_SLEEP);
|
||||
tp = kmem_alloc(sizeof(thread_priv_t), KM_PUSHPAGE);
|
||||
if (tp == NULL)
|
||||
SRETURN(NULL);
|
||||
|
||||
tp->tp_magic = TP_MAGIC;
|
||||
tp->tp_name_size = strlen(name) + 1;
|
||||
|
||||
tp->tp_name = kmem_alloc(tp->tp_name_size, KM_SLEEP);
|
||||
tp->tp_name = kmem_alloc(tp->tp_name_size, KM_PUSHPAGE);
|
||||
if (tp->tp_name == NULL) {
|
||||
kmem_free(tp, sizeof(thread_priv_t));
|
||||
SRETURN(NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user