X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Ftxg.c;h=340c42ae84a395333d314507616ec4eb6deba848;hb=055656d4f4dfc1a85646a2c0cc10b9dce86da72b;hp=00c1c7d26abe64dbf96d27ececd1be5d8f542817;hpb=bfd214af01dd360417b1331d903655244979fe0f;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;