mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Fix ASSERTION(!dsl_pool_sync_context(tx->tx_pool))
Disable the normal reclaim path for the txg_sync thread. This ensures the thread will never enter dmu_tx_assign() which can otherwise occur due to direct reclaim. If this is allowed to happen the system can deadlock. Direct reclaim call path: ->shrink_icache_memory->prune_icache->dispose_list-> clear_inode->zpl_clear_inode->zfs_inactive->dmu_tx_assign
This commit is contained in:
parent
7cb67b45f3
commit
eec8164771
@ -372,6 +372,19 @@ txg_sync_thread(dsl_pool_t *dp)
|
|||||||
callb_cpr_t cpr;
|
callb_cpr_t cpr;
|
||||||
uint64_t start, delta;
|
uint64_t start, delta;
|
||||||
|
|
||||||
|
#ifdef _KERNEL
|
||||||
|
/*
|
||||||
|
* Disable the normal reclaim path for the txg_sync thread. This
|
||||||
|
* ensures the thread will never enter dmu_tx_assign() which can
|
||||||
|
* otherwise occur due to direct reclaim. If this is allowed to
|
||||||
|
* happen the system can deadlock. Direct reclaim call path:
|
||||||
|
*
|
||||||
|
* ->shrink_icache_memory->prune_icache->dispose_list->
|
||||||
|
* clear_inode->zpl_clear_inode->zfs_inactive->dmu_tx_assign
|
||||||
|
*/
|
||||||
|
current->flags |= PF_MEMALLOC;
|
||||||
|
#endif /* _KERNEL */
|
||||||
|
|
||||||
txg_thread_enter(tx, &cpr);
|
txg_thread_enter(tx, &cpr);
|
||||||
|
|
||||||
start = delta = 0;
|
start = delta = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user