]> granicus.if.org Git - zfs/commitdiff
Switch allocations from KM_SLEEP to KM_PUSHPAGE
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 5 Nov 2013 18:32:39 +0000 (10:32 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 5 Nov 2013 20:26:14 +0000 (12:26 -0800)
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

module/zfs/dsl_dataset.c
module/zfs/dsl_userhold.c

index 7c8995ebab19c05ea7e39c16ecca0ac4d001aea3..9ee9508bf218ad9bf2f87420745d1f120404aeb5 100644 (file)
@@ -2196,7 +2196,7 @@ snaplist_make(dsl_pool_t *dp,
                if (first_obj == 0)
                        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;
                list_insert_tail(l, snap);
                obj = ds->ds_phys->ds_prev_snap_obj;
index db9540d13d18cb63a419c16dd69d098bc08369b7..6f047047707775c90857706e5e5deffe139d54c0 100644 (file)
@@ -225,7 +225,7 @@ dsl_onexit_hold_cleanup(spa_t *spa, nvlist_t *holds, minor_t minor)
        }
 
        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),
            sizeof (ca->zhca_spaname));