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 <behlendorf1@llnl.gov>
Signed-off-by: Eric Dillmann <eric@jave.fr>
Closes #2569
This commit is contained in:
Brian Behlendorf 2014-08-06 09:59:01 -07:00
parent 1ffe90c5d3
commit ab6f407faa

View File

@ -1763,9 +1763,9 @@ dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx)
} }
/* must not have any bookmarks after the most recent snapshot */ /* 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)); 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); error = dsl_get_bookmarks_impl(ds, proprequest, bookmarks);
fnvlist_free(proprequest); fnvlist_free(proprequest);
if (error != 0) if (error != 0)