]> git.proxmox.com Git - mirror_zfs-debian.git/commitdiff
Disable page allocation warnings for ARC buffers
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 5 Sep 2012 02:00:59 +0000 (19:00 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 6 Sep 2012 18:53:08 +0000 (11:53 -0700)
Buffers for the ARC are normally backed by the SPL virtual slab.
However, if memory is low, AND no slab objects are available,
AND a new slab cannot be quickly constructed a new emergency
object will be directly allocated.

These objects can be as large as order 5 on a system with 4k
pages.  And because they are allocated with KM_PUSHPAGE, to
avoid a potential deadlock, they are not allowed to initiate I/O
to satisfy the allocation.  This can result in the occasional
allocation failure.

However, since these allocations are allowed to block and
perform operations such as memory compaction they will eventually
succeed.  Since this is not unexpected (just unlikely) behavior
this patch disables the warning for the allocation failure.

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

module/zfs/zio.c

index fe2bdc867fea6151d2b0177e8dbd34796804eeca..6333c787d2467ad961e75c895ada0ea7cb3f16dd 100644 (file)
@@ -259,7 +259,7 @@ zio_buf_alloc(size_t size)
 
        ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT);
 
-       return (kmem_cache_alloc(zio_buf_cache[c], KM_PUSHPAGE));
+       return (kmem_cache_alloc(zio_buf_cache[c], KM_PUSHPAGE | KM_NODEBUG));
 }
 
 /*
@@ -275,7 +275,8 @@ zio_data_buf_alloc(size_t size)
 
        ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT);
 
-       return (kmem_cache_alloc(zio_data_buf_cache[c], KM_PUSHPAGE));
+       return (kmem_cache_alloc(zio_data_buf_cache[c],
+           KM_PUSHPAGE | KM_NODEBUG));
 }
 
 void