X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Ftxg.c;h=e14bff269b3e77a5c3421255f7a77ba89f2aebb5;hb=15fd274973be58f2851bf9d8e8d913b4c10151a6;hp=c234567d7e5295f6437f8b417f7b5d3c4c3ce130;hpb=b876dac776afc8ea2c598eac53b9903de01c6172;p=zfs.git diff --git a/module/zfs/txg.c b/module/zfs/txg.c index c234567..e14bff2 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -349,7 +349,7 @@ txg_dispatch_callbacks(dsl_pool_t *dp, uint64_t txg) TASKQ_THREADS_CPU_PCT | TASKQ_PREPOPULATE); } - cb_list = kmem_alloc(sizeof (list_t), KM_SLEEP); + cb_list = kmem_alloc(sizeof (list_t), KM_PUSHPAGE); list_create(cb_list, sizeof (dmu_tx_callback_t), offsetof(dmu_tx_callback_t, dcb_node)); @@ -382,6 +382,15 @@ txg_sync_thread(dsl_pool_t *dp) callb_cpr_t cpr; uint64_t start, delta; +#ifdef _KERNEL + /* + * Annotate this process with a flag that indicates that it is + * unsafe to use KM_SLEEP during memory allocations due to the + * potential for a deadlock. KM_PUSHPAGE should be used instead. + */ + current->flags |= PF_NOFS; +#endif /* _KERNEL */ + txg_thread_enter(tx, &cpr); start = delta = 0;