X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Ffm.c;h=ce0ebe0c1a300ae5f2926df0b08bb8decb042149;hb=04f9432d3bcb15ff8ed6ddc2dc377a4c0264340d;hp=e4ecfea19c7d2e55884fdd1c78707b42cb4150cd;hpb=c409e4647f221ab724a0bd10c480ac95447203c3;p=zfs.git diff --git a/module/zfs/fm.c b/module/zfs/fm.c index e4ecfea..ce0ebe0 100644 --- a/module/zfs/fm.c +++ b/module/zfs/fm.c @@ -418,7 +418,7 @@ zfs_zevent_alloc(void) { zevent_t *ev; - ev = kmem_zalloc(sizeof(zevent_t), KM_SLEEP); + ev = kmem_zalloc(sizeof(zevent_t), KM_PUSHPAGE); if (ev == NULL) return NULL; @@ -672,7 +672,7 @@ zfs_zevent_destroy(zfs_zevent_t *ze) static void * i_fm_alloc(nv_alloc_t *nva, size_t size) { - return (kmem_zalloc(size, KM_SLEEP)); + return (kmem_zalloc(size, KM_PUSHPAGE)); } /* ARGSUSED */ @@ -740,7 +740,7 @@ fm_nvlist_create(nv_alloc_t *nva) nv_alloc_t *nvhdl; if (nva == NULL) { - nvhdl = kmem_zalloc(sizeof (nv_alloc_t), KM_SLEEP); + nvhdl = kmem_zalloc(sizeof (nv_alloc_t), KM_PUSHPAGE); if (nv_alloc_init(nvhdl, &fm_mem_alloc_ops, NULL, 0) != 0) { kmem_free(nvhdl, sizeof (nv_alloc_t)); @@ -1413,7 +1413,13 @@ fm_ena_generate_cpu(uint64_t timestamp, processorid_t cpuid, uchar_t format) uint64_t fm_ena_generate(uint64_t timestamp, uchar_t format) { - return (fm_ena_generate_cpu(timestamp, getcpuid(), format)); + uint64_t ena; + + kpreempt_disable(); + ena = fm_ena_generate_cpu(timestamp, getcpuid(), format); + kpreempt_enable(); + + return (ena); } uint64_t