Switch KM_SLEEP to KM_PUSHPAGE
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 31 Aug 2012 14:45:27 +0000 (07:45 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 1 Sep 2012 00:39:29 +0000 (17:39 -0700)
This warning indicates the incorrect use of KM_SLEEP in a call
path which must use KM_PUSHPAGE to avoid deadlocking in direct
reclaim.  See commit b8d06fca089fae4680c3a552fc55c512bfb02202
for additional details.

  SPL: Fixing allocation for task txg_sync (6093) which
  used GFP flags 0x297bda7c with PF_NOFS set

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #917

module/zfs/fm.c

index a41d353..b91516e 100644 (file)
@@ -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));