Switch allocations from KM_SLEEP to KM_PUSHPAGE

A couple of kmem_alloc() allocations were using KM_SLEEP in
the sync thread context.  These were accidentally introduced
by the recent set of Illumos patches.  The solution is to
switch to KM_PUSHPAGE.

dsl_dataset_promote_sync() -> promote_hold() -> snaplist_make() ->
kmem_alloc(sizeof (*snap), KM_SLEEP);

dsl_dataset_user_hold_sync() -> dsl_onexit_hold_cleanup() ->
kmem_alloc(sizeof (*ca), KM_SLEEP)

Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #1775
This commit is contained in:
Brian Behlendorf 2013-11-05 10:32:39 -08:00
parent 1ca546b338
commit 2517c8ee08
2 changed files with 2 additions and 2 deletions

View File

@ -2196,7 +2196,7 @@ snaplist_make(dsl_pool_t *dp,
if (first_obj == 0) if (first_obj == 0)
first_obj = ds->ds_dir->dd_phys->dd_origin_obj; first_obj = ds->ds_dir->dd_phys->dd_origin_obj;
snap = kmem_alloc(sizeof (*snap), KM_SLEEP); snap = kmem_alloc(sizeof (*snap), KM_PUSHPAGE);
snap->ds = ds; snap->ds = ds;
list_insert_tail(l, snap); list_insert_tail(l, snap);
obj = ds->ds_phys->ds_prev_snap_obj; obj = ds->ds_phys->ds_prev_snap_obj;

View File

@ -225,7 +225,7 @@ dsl_onexit_hold_cleanup(spa_t *spa, nvlist_t *holds, minor_t minor)
} }
ASSERT(spa != NULL); ASSERT(spa != NULL);
ca = kmem_alloc(sizeof (*ca), KM_SLEEP); ca = kmem_alloc(sizeof (*ca), KM_PUSHPAGE);
(void) strlcpy(ca->zhca_spaname, spa_name(spa), (void) strlcpy(ca->zhca_spaname, spa_name(spa),
sizeof (ca->zhca_spaname)); sizeof (ca->zhca_spaname));