X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Ftxg.c;fp=module%2Fzfs%2Ftxg.c;h=340c42ae84a395333d314507616ec4eb6deba848;hb=eec8164771bee067c3cd55ed0a16dadeeba276de;hp=00c1c7d26abe64dbf96d27ececd1be5d8f542817;hpb=7cb67b45f33fd7a61af24c675c7347eb5264b38c;p=zfs.git diff --git a/module/zfs/txg.c b/module/zfs/txg.c index 00c1c7d..340c42a 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;