Fix zvol deadlock
It's possible for a zvol_write thread to enter direct memory reclaim while holding open a transaction group. This results in the system attempting to write out data to the disk to free memory. Unfortunately, this can't succeed because the the thread doing reclaim is holding open the txg which must be closed to be synced to disk. To prevent this the offending allocation is marked KM_PUSHPAGE which will prevent it from attempting writeback. Closes #191
This commit is contained in:
parent
a1cc0b3290
commit
701b1f8168
@ -1075,7 +1075,8 @@ zil_itx_create(uint64_t txtype, size_t lrsize)
|
||||
|
||||
lrsize = P2ROUNDUP_TYPED(lrsize, sizeof (uint64_t), size_t);
|
||||
|
||||
itx = kmem_alloc(offsetof(itx_t, itx_lr) + lrsize, KM_SLEEP|KM_NODEBUG);
|
||||
itx = kmem_alloc(offsetof(itx_t, itx_lr) + lrsize,
|
||||
KM_PUSHPAGE | KM_NODEBUG);
|
||||
itx->itx_lr.lrc_txtype = txtype;
|
||||
itx->itx_lr.lrc_reclen = lrsize;
|
||||
itx->itx_sod = lrsize; /* if write & WR_NEED_COPY will be increased */
|
||||
|
Loading…
x
Reference in New Issue
Block a user