From ab6f407faa0188219fb4852ac5e05f1934c985ee Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 6 Aug 2014 09:59:01 -0700 Subject: [PATCH] Use KM_PUSHPAGE in dsl_dataset_rollback_check() The dsl_dataset_rollback_check() function is executed in the txg_sync context. To prevent a potential deadlock due to direct memory reclaim it must use KM_PUSHPAGE. This was introduced by the recent 'zfs bookmark' features, commit da53684. Signed-off-by: Brian Behlendorf Signed-off-by: Eric Dillmann Closes #2569 --- module/zfs/dsl_dataset.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/zfs/dsl_dataset.c b/module/zfs/dsl_dataset.c index e23dd6b061a0..a5594f15c985 100644 --- a/module/zfs/dsl_dataset.c +++ b/module/zfs/dsl_dataset.c @@ -1763,9 +1763,9 @@ dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx) } /* must not have any bookmarks after the most recent snapshot */ - proprequest = fnvlist_alloc(); + VERIFY0(nvlist_alloc(&proprequest, NV_UNIQUE_NAME, KM_PUSHPAGE)); fnvlist_add_boolean(proprequest, zfs_prop_to_name(ZFS_PROP_CREATETXG)); - bookmarks = fnvlist_alloc(); + VERIFY0(nvlist_alloc(&bookmarks, NV_UNIQUE_NAME, KM_PUSHPAGE)); error = dsl_get_bookmarks_impl(ds, proprequest, bookmarks); fnvlist_free(proprequest); if (error != 0)