diff options
author | Brian Behlendorf <[email protected]> | 2011-03-31 10:05:58 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-04-07 09:52:16 -0700 |
commit | eec8164771bee067c3cd55ed0a16dadeeba276de (patch) | |
tree | ff2bb2ff5e551aad021dd1f0b157bd363f224ce7 /module/zfs | |
parent | 7cb67b45f33fd7a61af24c675c7347eb5264b38c (diff) |
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
Diffstat (limited to 'module/zfs')
-rw-r--r-- | module/zfs/txg.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/module/zfs/txg.c b/module/zfs/txg.c index 00c1c7d26..340c42ae8 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -372,6 +372,19 @@ txg_sync_thread(dsl_pool_t *dp) callb_cpr_t cpr; 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); start = delta = 0; |