All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20170112172906.GB31509@dhcp22.suse.cz>

diff --git a/a/1.txt b/N1/1.txt
index e033927..56f5adb 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1072,4 +1072,10 @@ index 38c00e867bda..a5c21f05ece4 100644
 
 -- 
 Michal Hocko
-SUSE Labs
\ No newline at end of file
+SUSE Labs
+
+--
+To unsubscribe, send a message with 'unsubscribe linux-mm' in
+the body to majordomo@kvack.org.  For more info on Linux MM,
+see: http://www.linux-mm.org/ .
+Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index 875af95..734c24d 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -40,15 +40,7 @@
   " Yishai Hadas <yishaih\@mellanox.com>",
   " Dan Williams <dan.j.williams\@intel.com>",
   " Oleg Drokin <oleg.drokin\@intel.com>",
-  " Andreas Dilger <andreas.dilger\@intel.com>",
-  " Boris Ostrovsky <boris.ostrovsky\@oracle.com>",
-  " David Sterba <dsterba\@suse.com>",
-  " Yan",
-  " Zheng <zyan\@redhat.com>",
-  " Ilya Dryomov <idryomov\@gmail.com>",
-  " Alexei Starovoitov <ast\@kernel.org>",
-  " Eric Dumazet <eric.dumazet\@gmail.com>",
-  " netdev\@vger.kernel.org\0"
+  " Andreas Dilger <andreas.dil\0"
 ]
 [
   "\0000:1\0"
@@ -1131,7 +1123,13 @@
   "\n",
   "-- \n",
   "Michal Hocko\n",
-  "SUSE Labs"
+  "SUSE Labs\n",
+  "\n",
+  "--\n",
+  "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n",
+  "the body to majordomo\@kvack.org.  For more info on Linux MM,\n",
+  "see: http://www.linux-mm.org/ .\n",
+  "Don't email: <a href=mailto:\"dont\@kvack.org\"> email\@kvack.org </a>"
 ]
 
-96903ddeca344c284a7670d040c99dd84c1be03d04c285e76911e4dda5b5e5fe
+ed4ef5b0fc674081674786b91e0f7c93dfceb0f47c82c505e2d3e08ed710ef28

diff --git a/a/1.txt b/N2/1.txt
index e033927..b899580 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,1075 +1,4 @@
 Ilya has noticed that I've screwed up some k[zc]alloc conversions and
 didn't use the kvzalloc. This is an updated patch with some acks
 collected on the way
----
->From a7b89c6d0a3c685045e37740c8f97b065f37e0a4 Mon Sep 17 00:00:00 2001
-From: Michal Hocko <mhocko@suse.com>
-Date: Wed, 4 Jan 2017 13:30:32 +0100
-Subject: [PATCH] treewide: use kv[mz]alloc* rather than opencoded variants
-
-There are many code paths opencoding kvmalloc. Let's use the helper
-instead. The main difference to kvmalloc is that those users are usually
-not considering all the aspects of the memory allocator. E.g. allocation
-requests < 64kB are basically never failing and invoke OOM killer to
-satisfy the allocation. This sounds too disruptive for something that
-has a reasonable fallback - the vmalloc. On the other hand those
-requests might fallback to vmalloc even when the memory allocator would
-succeed after several more reclaim/compaction attempts previously. There
-is no guarantee something like that happens though.
-
-This patch converts many of those places to kv[mz]alloc* helpers because
-they are more conservative.
-
-Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
-Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
-Cc: Herbert Xu <herbert@gondor.apana.org.au>
-Cc: Anton Vorontsov <anton@enomsg.org>
-Cc: Colin Cross <ccross@android.com>
-Cc: Kees Cook <keescook@chromium.org>
-Cc: Tony Luck <tony.luck@intel.com>
-Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
-Cc: Ben Skeggs <bskeggs@redhat.com>
-Cc: Kent Overstreet <kent.overstreet@gmail.com>
-Cc: Santosh Raspatur <santosh@chelsio.com>
-Cc: Hariprasad S <hariprasad@chelsio.com>
-Cc: Tariq Toukan <tariqt@mellanox.com>
-Cc: Yishai Hadas <yishaih@mellanox.com>
-Cc: Oleg Drokin <oleg.drokin@intel.com>
-Cc: Andreas Dilger <andreas.dilger@intel.com>
-Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
-Cc: "Yan, Zheng" <zyan@redhat.com>
-Cc: Alexander Viro <viro@zeniv.linux.org.uk>
-Cc: Alexei Starovoitov <ast@kernel.org>
-Cc: Eric Dumazet <eric.dumazet@gmail.com>
-Cc: netdev@vger.kernel.org
-Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> # KVM/s390
-Acked-by: Dan Williams <dan.j.williams@intel.com> # nvdim
-Acked-by: David Sterba <dsterba@suse.com> # btrfs
-Acked-by: Ilya Dryomov <idryomov@gmail.com> # Ceph
-Signed-off-by: Michal Hocko <mhocko@suse.com>
----
- arch/s390/kvm/kvm-s390.c                           | 10 ++-----
- crypto/lzo.c                                       |  4 +--
- drivers/acpi/apei/erst.c                           |  8 ++---
- drivers/char/agp/generic.c                         |  8 +----
- drivers/gpu/drm/nouveau/nouveau_gem.c              |  4 +--
- drivers/md/bcache/util.h                           | 12 ++------
- drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h    |  3 --
- drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 25 ++--------------
- drivers/net/ethernet/chelsio/cxgb3/l2t.c           |  2 +-
- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c    | 31 ++++----------------
- drivers/net/ethernet/mellanox/mlx4/en_tx.c         |  9 ++----
- drivers/net/ethernet/mellanox/mlx4/mr.c            |  9 ++----
- drivers/nvdimm/dimm_devs.c                         |  5 +---
- .../staging/lustre/lnet/libcfs/linux/linux-mem.c   | 11 +------
- drivers/xen/evtchn.c                               | 14 +--------
- fs/btrfs/ctree.c                                   |  9 ++----
- fs/btrfs/ioctl.c                                   |  9 ++----
- fs/btrfs/send.c                                    | 27 ++++++-----------
- fs/ceph/file.c                                     |  9 ++----
- fs/select.c                                        |  5 +---
- fs/xattr.c                                         | 27 ++++++-----------
- kernel/bpf/hashtab.c                               | 11 ++-----
- lib/iov_iter.c                                     |  5 +---
- mm/frame_vector.c                                  |  5 +---
- net/ipv4/inet_hashtables.c                         |  6 +---
- net/ipv4/tcp_metrics.c                             |  5 +---
- net/mpls/af_mpls.c                                 |  5 +---
- net/netfilter/x_tables.c                           | 34 ++++++----------------
- net/netfilter/xt_recent.c                          |  5 +---
- net/sched/sch_choke.c                              |  5 +---
- net/sched/sch_fq_codel.c                           | 26 ++++-------------
- net/sched/sch_hhf.c                                | 33 ++++++---------------
- net/sched/sch_netem.c                              |  6 +---
- net/sched/sch_sfq.c                                |  6 +---
- security/keys/keyctl.c                             | 22 ++++----------
- 35 files changed, 96 insertions(+), 319 deletions(-)
-
-diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
-index 4f74511015b8..e6bbb33d2956 100644
---- a/arch/s390/kvm/kvm-s390.c
-+++ b/arch/s390/kvm/kvm-s390.c
-@@ -1126,10 +1126,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
- 	if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
- 		return -EINVAL;
- 
--	keys = kmalloc_array(args->count, sizeof(uint8_t),
--			     GFP_KERNEL | __GFP_NOWARN);
--	if (!keys)
--		keys = vmalloc(sizeof(uint8_t) * args->count);
-+	keys = kvmalloc(args->count * sizeof(uint8_t), GFP_KERNEL);
- 	if (!keys)
- 		return -ENOMEM;
- 
-@@ -1171,10 +1168,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
- 	if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
- 		return -EINVAL;
- 
--	keys = kmalloc_array(args->count, sizeof(uint8_t),
--			     GFP_KERNEL | __GFP_NOWARN);
--	if (!keys)
--		keys = vmalloc(sizeof(uint8_t) * args->count);
-+	keys = kvmalloc(sizeof(uint8_t) * args->count, GFP_KERNEL);
- 	if (!keys)
- 		return -ENOMEM;
- 
-diff --git a/crypto/lzo.c b/crypto/lzo.c
-index 168df784da84..218567d717d6 100644
---- a/crypto/lzo.c
-+++ b/crypto/lzo.c
-@@ -32,9 +32,7 @@ static void *lzo_alloc_ctx(struct crypto_scomp *tfm)
- {
- 	void *ctx;
- 
--	ctx = kmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL | __GFP_NOWARN);
--	if (!ctx)
--		ctx = vmalloc(LZO1X_MEM_COMPRESS);
-+	ctx = kvmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);
- 	if (!ctx)
- 		return ERR_PTR(-ENOMEM);
- 
-diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
-index ec4f507b524f..a2898df61744 100644
---- a/drivers/acpi/apei/erst.c
-+++ b/drivers/acpi/apei/erst.c
-@@ -513,7 +513,7 @@ static int __erst_record_id_cache_add_one(void)
- 	if (i < erst_record_id_cache.len)
- 		goto retry;
- 	if (erst_record_id_cache.len >= erst_record_id_cache.size) {
--		int new_size, alloc_size;
-+		int new_size;
- 		u64 *new_entries;
- 
- 		new_size = erst_record_id_cache.size * 2;
-@@ -524,11 +524,7 @@ static int __erst_record_id_cache_add_one(void)
- 				pr_warn(FW_WARN "too many record IDs!\n");
- 			return 0;
- 		}
--		alloc_size = new_size * sizeof(entries[0]);
--		if (alloc_size < PAGE_SIZE)
--			new_entries = kmalloc(alloc_size, GFP_KERNEL);
--		else
--			new_entries = vmalloc(alloc_size);
-+		new_entries = kvmalloc(new_size * sizeof(entries[0]), GFP_KERNEL);
- 		if (!new_entries)
- 			return -ENOMEM;
- 		memcpy(new_entries, entries,
-diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
-index f002fa5d1887..bdf418cac8ef 100644
---- a/drivers/char/agp/generic.c
-+++ b/drivers/char/agp/generic.c
-@@ -88,13 +88,7 @@ static int agp_get_key(void)
- 
- void agp_alloc_page_array(size_t size, struct agp_memory *mem)
- {
--	mem->pages = NULL;
--
--	if (size <= 2*PAGE_SIZE)
--		mem->pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
--	if (mem->pages == NULL) {
--		mem->pages = vmalloc(size);
--	}
-+	mem->pages = kvmalloc(size, GFP_KERNEL);
- }
- EXPORT_SYMBOL(agp_alloc_page_array);
- 
-diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
-index 201b52b750dd..77dd73ff126f 100644
---- a/drivers/gpu/drm/nouveau/nouveau_gem.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
-@@ -568,9 +568,7 @@ u_memcpya(uint64_t user, unsigned nmemb, unsigned size)
- 
- 	size *= nmemb;
- 
--	mem = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
--	if (!mem)
--		mem = vmalloc(size);
-+	mem = kvmalloc(size, GFP_KERNEL);
- 	if (!mem)
- 		return ERR_PTR(-ENOMEM);
- 
-diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
-index cf2cbc211d83..d00bcb64d3a8 100644
---- a/drivers/md/bcache/util.h
-+++ b/drivers/md/bcache/util.h
-@@ -43,11 +43,7 @@ struct closure;
- 	(heap)->used = 0;						\
- 	(heap)->size = (_size);						\
- 	_bytes = (heap)->size * sizeof(*(heap)->data);			\
--	(heap)->data = NULL;						\
--	if (_bytes < KMALLOC_MAX_SIZE)					\
--		(heap)->data = kmalloc(_bytes, (gfp));			\
--	if ((!(heap)->data) && ((gfp) & GFP_KERNEL))			\
--		(heap)->data = vmalloc(_bytes);				\
-+	(heap)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL);		\
- 	(heap)->data;							\
- })
- 
-@@ -136,12 +132,8 @@ do {									\
- 									\
- 	(fifo)->mask = _allocated_size - 1;				\
- 	(fifo)->front = (fifo)->back = 0;				\
--	(fifo)->data = NULL;						\
- 									\
--	if (_bytes < KMALLOC_MAX_SIZE)					\
--		(fifo)->data = kmalloc(_bytes, (gfp));			\
--	if ((!(fifo)->data) && ((gfp) & GFP_KERNEL))			\
--		(fifo)->data = vmalloc(_bytes);				\
-+	(fifo)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL);		\
- 	(fifo)->data;							\
- })
- 
-diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
-index 920d918ed193..f04e81f33795 100644
---- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
-+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
-@@ -41,9 +41,6 @@
- 
- #define VALIDATE_TID 1
- 
--void *cxgb_alloc_mem(unsigned long size);
--void cxgb_free_mem(void *addr);
--
- /*
-  * Map an ATID or STID to their entries in the corresponding TID tables.
-  */
-diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
-index 76684dcb874c..4d80bccf9c01 100644
---- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
-+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
-@@ -1152,27 +1152,6 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new,
- }
- 
- /*
-- * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
-- * The allocated memory is cleared.
-- */
--void *cxgb_alloc_mem(unsigned long size)
--{
--	void *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
--
--	if (!p)
--		p = vzalloc(size);
--	return p;
--}
--
--/*
-- * Free memory allocated through t3_alloc_mem().
-- */
--void cxgb_free_mem(void *addr)
--{
--	kvfree(addr);
--}
--
--/*
-  * Allocate and initialize the TID tables.  Returns 0 on success.
-  */
- static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
-@@ -1182,7 +1161,7 @@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
- 	unsigned long size = ntids * sizeof(*t->tid_tab) +
- 	    natids * sizeof(*t->atid_tab) + nstids * sizeof(*t->stid_tab);
- 
--	t->tid_tab = cxgb_alloc_mem(size);
-+	t->tid_tab = kvzalloc(size, GFP_KERNEL);
- 	if (!t->tid_tab)
- 		return -ENOMEM;
- 
-@@ -1218,7 +1197,7 @@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
- 
- static void free_tid_maps(struct tid_info *t)
- {
--	cxgb_free_mem(t->tid_tab);
-+	kvfree(t->tid_tab);
- }
- 
- static inline void add_adapter(struct adapter *adap)
-diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.c b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
-index 5f226eda8cd6..f5c92acd52b4 100644
---- a/drivers/net/ethernet/chelsio/cxgb3/l2t.c
-+++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
-@@ -444,7 +444,7 @@ struct l2t_data *t3_init_l2t(unsigned int l2t_capacity)
- 	struct l2t_data *d;
- 	int i, size = sizeof(*d) + l2t_capacity * sizeof(struct l2t_entry);
- 
--	d = cxgb_alloc_mem(size);
-+	d = kzmalloc(size, GFP_KERNEL);
- 	if (!d)
- 		return NULL;
- 
-diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-index 6f951877430b..a64c2a3d39fc 100644
---- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -881,27 +881,6 @@ static int setup_sge_queues(struct adapter *adap)
- 	return err;
- }
- 
--/*
-- * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
-- * The allocated memory is cleared.
-- */
--void *t4_alloc_mem(size_t size)
--{
--	void *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
--
--	if (!p)
--		p = vzalloc(size);
--	return p;
--}
--
--/*
-- * Free memory allocated through alloc_mem().
-- */
--void t4_free_mem(void *addr)
--{
--	kvfree(addr);
--}
--
- static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
- 			     void *accel_priv, select_queue_fallback_t fallback)
- {
-@@ -1300,7 +1279,7 @@ static int tid_init(struct tid_info *t)
- 	       max_ftids * sizeof(*t->ftid_tab) +
- 	       ftid_bmap_size * sizeof(long);
- 
--	t->tid_tab = t4_alloc_mem(size);
-+	t->tid_tab = kvzalloc(size, GFP_KERNEL);
- 	if (!t->tid_tab)
- 		return -ENOMEM;
- 
-@@ -3416,7 +3395,7 @@ static int adap_init0(struct adapter *adap)
- 		/* allocate memory to read the header of the firmware on the
- 		 * card
- 		 */
--		card_fw = t4_alloc_mem(sizeof(*card_fw));
-+		card_fw = kvzalloc(sizeof(*card_fw), GFP_KERNEL);
- 
- 		/* Get FW from from /lib/firmware/ */
- 		ret = request_firmware(&fw, fw_info->fw_mod_name,
-@@ -3436,7 +3415,7 @@ static int adap_init0(struct adapter *adap)
- 
- 		/* Cleaning up */
- 		release_firmware(fw);
--		t4_free_mem(card_fw);
-+		kvfree(card_fw);
- 
- 		if (ret < 0)
- 			goto bye;
-@@ -4432,9 +4411,9 @@ static void free_some_resources(struct adapter *adapter)
- {
- 	unsigned int i;
- 
--	t4_free_mem(adapter->l2t);
-+	kvfree(adapter->l2t);
- 	t4_cleanup_sched(adapter);
--	t4_free_mem(adapter->tids.tid_tab);
-+	kvfree(adapter->tids.tid_tab);
- 	cxgb4_cleanup_tc_u32(adapter);
- 	kfree(adapter->sge.egr_map);
- 	kfree(adapter->sge.ingr_map);
-diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-index 5886ad78058f..a5c1b815145e 100644
---- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-@@ -70,13 +70,10 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
- 	ring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS;
- 
- 	tmp = size * sizeof(struct mlx4_en_tx_info);
--	ring->tx_info = kmalloc_node(tmp, GFP_KERNEL | __GFP_NOWARN, node);
-+	ring->tx_info = kvmalloc_node(tmp, GFP_KERNEL, node);
- 	if (!ring->tx_info) {
--		ring->tx_info = vmalloc(tmp);
--		if (!ring->tx_info) {
--			err = -ENOMEM;
--			goto err_ring;
--		}
-+		err = -ENOMEM;
-+		goto err_ring;
- 	}
- 
- 	en_dbg(DRV, priv, "Allocated tx_info ring at addr:%p size:%d\n",
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c
-index 395b5463cfd9..82354fd0a87e 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mr.c
-+++ b/drivers/net/ethernet/mellanox/mlx4/mr.c
-@@ -115,12 +115,9 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order)
- 
- 	for (i = 0; i <= buddy->max_order; ++i) {
- 		s = BITS_TO_LONGS(1 << (buddy->max_order - i));
--		buddy->bits[i] = kcalloc(s, sizeof (long), GFP_KERNEL | __GFP_NOWARN);
--		if (!buddy->bits[i]) {
--			buddy->bits[i] = vzalloc(s * sizeof(long));
--			if (!buddy->bits[i])
--				goto err_out_free;
--		}
-+		buddy->bits[i] = kvzalloc(s * sizeof(long), GFP_KERNEL);
-+		if (!buddy->bits[i])
-+			goto err_out_free;
- 	}
- 
- 	set_bit(0, buddy->bits[buddy->max_order]);
-diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c
-index 0eedc49e0d47..3bd332b167d9 100644
---- a/drivers/nvdimm/dimm_devs.c
-+++ b/drivers/nvdimm/dimm_devs.c
-@@ -102,10 +102,7 @@ int nvdimm_init_config_data(struct nvdimm_drvdata *ndd)
- 		return -ENXIO;
- 	}
- 
--	ndd->data = kmalloc(ndd->nsarea.config_size, GFP_KERNEL);
--	if (!ndd->data)
--		ndd->data = vmalloc(ndd->nsarea.config_size);
--
-+	ndd->data = kvmalloc(ndd->nsarea.config_size, GFP_KERNEL);
- 	if (!ndd->data)
- 		return -ENOMEM;
- 
-diff --git a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
-index a6a76a681ea9..8f638267e704 100644
---- a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
-+++ b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
-@@ -45,15 +45,6 @@ EXPORT_SYMBOL(libcfs_kvzalloc);
- void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size,
- 			  gfp_t flags)
- {
--	void *ret;
--
--	ret = kzalloc_node(size, flags | __GFP_NOWARN,
--			   cfs_cpt_spread_node(cptab, cpt));
--	if (!ret) {
--		WARN_ON(!(flags & (__GFP_FS | __GFP_HIGH)));
--		ret = vmalloc_node(size, cfs_cpt_spread_node(cptab, cpt));
--	}
--
--	return ret;
-+	return kvzalloc_node(size, flags, cfs_cpt_spread_node(cptab, cpt));
- }
- EXPORT_SYMBOL(libcfs_kvzalloc_cpt);
-diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
-index 6890897a6f30..10f1ef582659 100644
---- a/drivers/xen/evtchn.c
-+++ b/drivers/xen/evtchn.c
-@@ -87,18 +87,6 @@ struct user_evtchn {
- 	bool enabled;
- };
- 
--static evtchn_port_t *evtchn_alloc_ring(unsigned int size)
--{
--	evtchn_port_t *ring;
--	size_t s = size * sizeof(*ring);
--
--	ring = kmalloc(s, GFP_KERNEL);
--	if (!ring)
--		ring = vmalloc(s);
--
--	return ring;
--}
--
- static void evtchn_free_ring(evtchn_port_t *ring)
- {
- 	kvfree(ring);
-@@ -334,7 +322,7 @@ static int evtchn_resize_ring(struct per_user_data *u)
- 	else
- 		new_size = 2 * u->ring_size;
- 
--	new_ring = evtchn_alloc_ring(new_size);
-+	new_ring = kvmalloc(new_size * sizeof(*new_ring), GFP_KERNEL);
- 	if (!new_ring)
- 		return -ENOMEM;
- 
-diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
-index 146b2dc0d2cf..4fc9712d927d 100644
---- a/fs/btrfs/ctree.c
-+++ b/fs/btrfs/ctree.c
-@@ -5391,13 +5391,10 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
- 		goto out;
- 	}
- 
--	tmp_buf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN);
-+	tmp_buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);
- 	if (!tmp_buf) {
--		tmp_buf = vmalloc(fs_info->nodesize);
--		if (!tmp_buf) {
--			ret = -ENOMEM;
--			goto out;
--		}
-+		ret = -ENOMEM;
-+		goto out;
- 	}
- 
- 	left_path->search_commit_root = 1;
-diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
-index 77dabfed3a5d..6f0b488c7428 100644
---- a/fs/btrfs/ioctl.c
-+++ b/fs/btrfs/ioctl.c
-@@ -3547,12 +3547,9 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
- 	u64 last_dest_end = destoff;
- 
- 	ret = -ENOMEM;
--	buf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN);
--	if (!buf) {
--		buf = vmalloc(fs_info->nodesize);
--		if (!buf)
--			return ret;
--	}
-+	buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);
-+	if (!buf)
-+		return ret;
- 
- 	path = btrfs_alloc_path();
- 	if (!path) {
-diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
-index d145ce804620..0621ca2a7b5d 100644
---- a/fs/btrfs/send.c
-+++ b/fs/btrfs/send.c
-@@ -6242,22 +6242,16 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
- 	sctx->clone_roots_cnt = arg->clone_sources_count;
- 
- 	sctx->send_max_size = BTRFS_SEND_BUF_SIZE;
--	sctx->send_buf = kmalloc(sctx->send_max_size, GFP_KERNEL | __GFP_NOWARN);
-+	sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);
- 	if (!sctx->send_buf) {
--		sctx->send_buf = vmalloc(sctx->send_max_size);
--		if (!sctx->send_buf) {
--			ret = -ENOMEM;
--			goto out;
--		}
-+		ret = -ENOMEM;
-+		goto out;
- 	}
- 
--	sctx->read_buf = kmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL | __GFP_NOWARN);
-+	sctx->read_buf = kvmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL);
- 	if (!sctx->read_buf) {
--		sctx->read_buf = vmalloc(BTRFS_SEND_READ_SIZE);
--		if (!sctx->read_buf) {
--			ret = -ENOMEM;
--			goto out;
--		}
-+		ret = -ENOMEM;
-+		goto out;
- 	}
- 
- 	sctx->pending_dir_moves = RB_ROOT;
-@@ -6278,13 +6272,10 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
- 	alloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources);
- 
- 	if (arg->clone_sources_count) {
--		clone_sources_tmp = kmalloc(alloc_size, GFP_KERNEL | __GFP_NOWARN);
-+		clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);
- 		if (!clone_sources_tmp) {
--			clone_sources_tmp = vmalloc(alloc_size);
--			if (!clone_sources_tmp) {
--				ret = -ENOMEM;
--				goto out;
--			}
-+			ret = -ENOMEM;
-+			goto out;
- 		}
- 
- 		ret = copy_from_user(clone_sources_tmp, arg->clone_sources,
-diff --git a/fs/ceph/file.c b/fs/ceph/file.c
-index 045d30d26624..78b18acf33ba 100644
---- a/fs/ceph/file.c
-+++ b/fs/ceph/file.c
-@@ -74,12 +74,9 @@ dio_get_pages_alloc(const struct iov_iter *it, size_t nbytes,
- 	align = (unsigned long)(it->iov->iov_base + it->iov_offset) &
- 		(PAGE_SIZE - 1);
- 	npages = calc_pages_for(align, nbytes);
--	pages = kmalloc(sizeof(*pages) * npages, GFP_KERNEL);
--	if (!pages) {
--		pages = vmalloc(sizeof(*pages) * npages);
--		if (!pages)
--			return ERR_PTR(-ENOMEM);
--	}
-+	pages = kvmalloc(sizeof(*pages) * npages, GFP_KERNEL);
-+	if (!pages)
-+		return ERR_PTR(-ENOMEM);
- 
- 	for (idx = 0; idx < npages; ) {
- 		size_t start;
-diff --git a/fs/select.c b/fs/select.c
-index 305c0daf5d67..9e8e1189eb99 100644
---- a/fs/select.c
-+++ b/fs/select.c
-@@ -586,10 +586,7 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
- 			goto out_nofds;
- 
- 		alloc_size = 6 * size;
--		bits = kmalloc(alloc_size, GFP_KERNEL|__GFP_NOWARN);
--		if (!bits && alloc_size > PAGE_SIZE)
--			bits = vmalloc(alloc_size);
--
-+		bits = kvmalloc(alloc_size, GFP_KERNEL);
- 		if (!bits)
- 			goto out_nofds;
- 	}
-diff --git a/fs/xattr.c b/fs/xattr.c
-index 7e3317cf4045..967542e1521b 100644
---- a/fs/xattr.c
-+++ b/fs/xattr.c
-@@ -431,12 +431,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
- 	if (size) {
- 		if (size > XATTR_SIZE_MAX)
- 			return -E2BIG;
--		kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
--		if (!kvalue) {
--			kvalue = vmalloc(size);
--			if (!kvalue)
--				return -ENOMEM;
--		}
-+		kvalue = kvmalloc(size, GFP_KERNEL);
-+		if (!kvalue)
-+			return -ENOMEM;
- 		if (copy_from_user(kvalue, value, size)) {
- 			error = -EFAULT;
- 			goto out;
-@@ -528,12 +525,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
- 	if (size) {
- 		if (size > XATTR_SIZE_MAX)
- 			size = XATTR_SIZE_MAX;
--		kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
--		if (!kvalue) {
--			kvalue = vmalloc(size);
--			if (!kvalue)
--				return -ENOMEM;
--		}
-+		kvalue = kzmalloc(size, GFP_KERNEL);
-+		if (!kvalue)
-+			return -ENOMEM;
- 	}
- 
- 	error = vfs_getxattr(d, kname, kvalue, size);
-@@ -611,12 +605,9 @@ listxattr(struct dentry *d, char __user *list, size_t size)
- 	if (size) {
- 		if (size > XATTR_LIST_MAX)
- 			size = XATTR_LIST_MAX;
--		klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);
--		if (!klist) {
--			klist = vmalloc(size);
--			if (!klist)
--				return -ENOMEM;
--		}
-+		klist = kvmalloc(size, GFP_KERNEL);
-+		if (!klist)
-+			return -ENOMEM;
- 	}
- 
- 	error = vfs_listxattr(d, klist, size);
-diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c
-index 34debc1a9641..4ca30a951bbc 100644
---- a/kernel/bpf/hashtab.c
-+++ b/kernel/bpf/hashtab.c
-@@ -320,14 +320,9 @@ static struct bpf_map *htab_map_alloc(union bpf_attr *attr)
- 		goto free_htab;
- 
- 	err = -ENOMEM;
--	htab->buckets = kmalloc_array(htab->n_buckets, sizeof(struct bucket),
--				      GFP_USER | __GFP_NOWARN);
--
--	if (!htab->buckets) {
--		htab->buckets = vmalloc(htab->n_buckets * sizeof(struct bucket));
--		if (!htab->buckets)
--			goto free_htab;
--	}
-+	htab->buckets = kvmalloc(htab->n_buckets * sizeof(struct bucket), GFP_USER);
-+	if (!htab->buckets)
-+		goto free_htab;
- 
- 	for (i = 0; i < htab->n_buckets; i++) {
- 		INIT_HLIST_HEAD(&htab->buckets[i].head);
-diff --git a/lib/iov_iter.c b/lib/iov_iter.c
-index 25f572303801..45c17b5562b5 100644
---- a/lib/iov_iter.c
-+++ b/lib/iov_iter.c
-@@ -957,10 +957,7 @@ EXPORT_SYMBOL(iov_iter_get_pages);
- 
- static struct page **get_pages_array(size_t n)
- {
--	struct page **p = kmalloc(n * sizeof(struct page *), GFP_KERNEL);
--	if (!p)
--		p = vmalloc(n * sizeof(struct page *));
--	return p;
-+	return kvmalloc(n * sizeof(struct page *), GFP_KERNEL);
- }
- 
- static ssize_t pipe_get_pages_alloc(struct iov_iter *i,
-diff --git a/mm/frame_vector.c b/mm/frame_vector.c
-index db77dcb38afd..72ebec18629c 100644
---- a/mm/frame_vector.c
-+++ b/mm/frame_vector.c
-@@ -200,10 +200,7 @@ struct frame_vector *frame_vector_create(unsigned int nr_frames)
- 	 * Avoid higher order allocations, use vmalloc instead. It should
- 	 * be rare anyway.
- 	 */
--	if (size <= PAGE_SIZE)
--		vec = kmalloc(size, GFP_KERNEL);
--	else
--		vec = vmalloc(size);
-+	vec = kvmalloc(size, GFP_KERNEL);
- 	if (!vec)
- 		return NULL;
- 	vec->nr_allocated = nr_frames;
-diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
-index ca97835bfec4..a46a9fd8b540 100644
---- a/net/ipv4/inet_hashtables.c
-+++ b/net/ipv4/inet_hashtables.c
-@@ -687,11 +687,7 @@ int inet_ehash_locks_alloc(struct inet_hashinfo *hashinfo)
- 		/* no more locks than number of hash buckets */
- 		nblocks = min(nblocks, hashinfo->ehash_mask + 1);
- 
--		hashinfo->ehash_locks =	kmalloc_array(nblocks, locksz,
--						      GFP_KERNEL | __GFP_NOWARN);
--		if (!hashinfo->ehash_locks)
--			hashinfo->ehash_locks = vmalloc(nblocks * locksz);
--
-+		hashinfo->ehash_locks = kvmalloc(nblocks * locksz, GFP_KERNEL);
- 		if (!hashinfo->ehash_locks)
- 			return -ENOMEM;
- 
-diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
-index d46f4d5b1c62..39b2166d3be8 100644
---- a/net/ipv4/tcp_metrics.c
-+++ b/net/ipv4/tcp_metrics.c
-@@ -1155,10 +1155,7 @@ static int __net_init tcp_net_metrics_init(struct net *net)
- 	tcp_metrics_hash_log = order_base_2(slots);
- 	size = sizeof(struct tcpm_hash_bucket) << tcp_metrics_hash_log;
- 
--	tcp_metrics_hash = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
--	if (!tcp_metrics_hash)
--		tcp_metrics_hash = vzalloc(size);
--
-+	tcp_metrics_hash = kvzalloc(size, GFP_KERNEL);
- 	if (!tcp_metrics_hash)
- 		return -ENOMEM;
- 
-diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
-index 15fe97644ffe..a0c82ef74389 100644
---- a/net/mpls/af_mpls.c
-+++ b/net/mpls/af_mpls.c
-@@ -1525,10 +1525,7 @@ static int resize_platform_label_table(struct net *net, size_t limit)
- 	unsigned index;
- 
- 	if (size) {
--		labels = kzalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
--		if (!labels)
--			labels = vzalloc(size);
--
-+		labels = kvzalloc(size, GFP_KERNEL);
- 		if (!labels)
- 			goto nolabels;
- 	}
-diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
-index a011322a027d..cdc55d5ee4ad 100644
---- a/net/netfilter/x_tables.c
-+++ b/net/netfilter/x_tables.c
-@@ -712,17 +712,11 @@ EXPORT_SYMBOL(xt_check_entry_offsets);
-  */
- unsigned int *xt_alloc_entry_offsets(unsigned int size)
- {
--	unsigned int *off;
--
--	off = kcalloc(size, sizeof(unsigned int), GFP_KERNEL | __GFP_NOWARN);
--
--	if (off)
--		return off;
--
- 	if (size < (SIZE_MAX / sizeof(unsigned int)))
--		off = vmalloc(size * sizeof(unsigned int));
-+		return kvzalloc(size * sizeof(unsigned int), GFP_KERNEL);
-+
-+	return NULL;
- 
--	return off;
- }
- EXPORT_SYMBOL(xt_alloc_entry_offsets);
- 
-@@ -956,15 +950,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
- 	if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
- 		return NULL;
- 
--	if (sz <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER))
--		info = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
--	if (!info) {
--		info = __vmalloc(sz, GFP_KERNEL | __GFP_NOWARN |
--				     __GFP_NORETRY | __GFP_HIGHMEM,
--				 PAGE_KERNEL);
--		if (!info)
--			return NULL;
--	}
-+	info = kvmalloc(sz, GFP_KERNEL);
-+	if (!info)
-+		return NULL;
- 	memset(info, 0, sizeof(*info));
- 	info->size = size;
- 	return info;
-@@ -1066,7 +1054,7 @@ static int xt_jumpstack_alloc(struct xt_table_info *i)
- 
- 	size = sizeof(void **) * nr_cpu_ids;
- 	if (size > PAGE_SIZE)
--		i->jumpstack = vzalloc(size);
-+		i->jumpstack = kvzalloc(size, GFP_KERNEL);
- 	else
- 		i->jumpstack = kzalloc(size, GFP_KERNEL);
- 	if (i->jumpstack == NULL)
-@@ -1088,12 +1076,8 @@ static int xt_jumpstack_alloc(struct xt_table_info *i)
- 	 */
- 	size = sizeof(void *) * i->stacksize * 2u;
- 	for_each_possible_cpu(cpu) {
--		if (size > PAGE_SIZE)
--			i->jumpstack[cpu] = vmalloc_node(size,
--				cpu_to_node(cpu));
--		else
--			i->jumpstack[cpu] = kmalloc_node(size,
--				GFP_KERNEL, cpu_to_node(cpu));
-+		i->jumpstack[cpu] = kvmalloc_node(size, GFP_KERNEL,
-+			cpu_to_node(cpu));
- 		if (i->jumpstack[cpu] == NULL)
- 			/*
- 			 * Freeing will be done later on by the callers. The
-diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
-index 1d89a4eaf841..d6aa8f63ed2e 100644
---- a/net/netfilter/xt_recent.c
-+++ b/net/netfilter/xt_recent.c
-@@ -388,10 +388,7 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
- 	}
- 
- 	sz = sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size;
--	if (sz <= PAGE_SIZE)
--		t = kzalloc(sz, GFP_KERNEL);
--	else
--		t = vzalloc(sz);
-+	t = kvzalloc(sz, GFP_KERNEL);
- 	if (t == NULL) {
- 		ret = -ENOMEM;
- 		goto out;
-diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
-index 3b6d5bd69101..30d6a39fd2c8 100644
---- a/net/sched/sch_choke.c
-+++ b/net/sched/sch_choke.c
-@@ -431,10 +431,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
- 	if (mask != q->tab_mask) {
- 		struct sk_buff **ntab;
- 
--		ntab = kcalloc(mask + 1, sizeof(struct sk_buff *),
--			       GFP_KERNEL | __GFP_NOWARN);
--		if (!ntab)
--			ntab = vzalloc((mask + 1) * sizeof(struct sk_buff *));
-+		ntab = kvzalloc((mask + 1) * sizeof(struct sk_buff *), GFP_KERNEL);
- 		if (!ntab)
- 			return -ENOMEM;
- 
-diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
-index a5ea0e9b6be4..c580f0d406c2 100644
---- a/net/sched/sch_fq_codel.c
-+++ b/net/sched/sch_fq_codel.c
-@@ -449,27 +449,13 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
- 	return 0;
- }
- 
--static void *fq_codel_zalloc(size_t sz)
--{
--	void *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);
--
--	if (!ptr)
--		ptr = vzalloc(sz);
--	return ptr;
--}
--
--static void fq_codel_free(void *addr)
--{
--	kvfree(addr);
--}
--
- static void fq_codel_destroy(struct Qdisc *sch)
- {
- 	struct fq_codel_sched_data *q = qdisc_priv(sch);
- 
- 	tcf_destroy_chain(&q->filter_list);
--	fq_codel_free(q->backlogs);
--	fq_codel_free(q->flows);
-+	kvfree(q->backlogs);
-+	kvfree(q->flows);
- }
- 
- static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)
-@@ -497,13 +483,13 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)
- 	}
- 
- 	if (!q->flows) {
--		q->flows = fq_codel_zalloc(q->flows_cnt *
--					   sizeof(struct fq_codel_flow));
-+		q->flows = kvzalloc(q->flows_cnt *
-+					   sizeof(struct fq_codel_flow), GFP_KERNEL);
- 		if (!q->flows)
- 			return -ENOMEM;
--		q->backlogs = fq_codel_zalloc(q->flows_cnt * sizeof(u32));
-+		q->backlogs = kvzalloc(q->flows_cnt * sizeof(u32), GFP_KERNEL);
- 		if (!q->backlogs) {
--			fq_codel_free(q->flows);
-+			kvfree(q->flows);
- 			return -ENOMEM;
- 		}
- 		for (i = 0; i < q->flows_cnt; i++) {
-diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
-index e3d0458af17b..2454055c737e 100644
---- a/net/sched/sch_hhf.c
-+++ b/net/sched/sch_hhf.c
-@@ -467,29 +467,14 @@ static void hhf_reset(struct Qdisc *sch)
- 		rtnl_kfree_skbs(skb, skb);
- }
- 
--static void *hhf_zalloc(size_t sz)
--{
--	void *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);
--
--	if (!ptr)
--		ptr = vzalloc(sz);
--
--	return ptr;
--}
--
--static void hhf_free(void *addr)
--{
--	kvfree(addr);
--}
--
- static void hhf_destroy(struct Qdisc *sch)
- {
- 	int i;
- 	struct hhf_sched_data *q = qdisc_priv(sch);
- 
- 	for (i = 0; i < HHF_ARRAYS_CNT; i++) {
--		hhf_free(q->hhf_arrays[i]);
--		hhf_free(q->hhf_valid_bits[i]);
-+		kvfree(q->hhf_arrays[i]);
-+		kvfree(q->hhf_valid_bits[i]);
- 	}
- 
- 	for (i = 0; i < HH_FLOWS_CNT; i++) {
-@@ -503,7 +488,7 @@ static void hhf_destroy(struct Qdisc *sch)
- 			kfree(flow);
- 		}
- 	}
--	hhf_free(q->hh_flows);
-+	kvfree(q->hh_flows);
- }
- 
- static const struct nla_policy hhf_policy[TCA_HHF_MAX + 1] = {
-@@ -609,8 +594,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
- 
- 	if (!q->hh_flows) {
- 		/* Initialize heavy-hitter flow table. */
--		q->hh_flows = hhf_zalloc(HH_FLOWS_CNT *
--					 sizeof(struct list_head));
-+		q->hh_flows = kvzalloc(HH_FLOWS_CNT *
-+					 sizeof(struct list_head), GFP_KERNEL);
- 		if (!q->hh_flows)
- 			return -ENOMEM;
- 		for (i = 0; i < HH_FLOWS_CNT; i++)
-@@ -624,8 +609,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
- 
- 		/* Initialize heavy-hitter filter arrays. */
- 		for (i = 0; i < HHF_ARRAYS_CNT; i++) {
--			q->hhf_arrays[i] = hhf_zalloc(HHF_ARRAYS_LEN *
--						      sizeof(u32));
-+			q->hhf_arrays[i] = kvzalloc(HHF_ARRAYS_LEN *
-+						      sizeof(u32), GFP_KERNEL);
- 			if (!q->hhf_arrays[i]) {
- 				hhf_destroy(sch);
- 				return -ENOMEM;
-@@ -635,8 +620,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
- 
- 		/* Initialize valid bits of heavy-hitter filter arrays. */
- 		for (i = 0; i < HHF_ARRAYS_CNT; i++) {
--			q->hhf_valid_bits[i] = hhf_zalloc(HHF_ARRAYS_LEN /
--							  BITS_PER_BYTE);
-+			q->hhf_valid_bits[i] = kvzalloc(HHF_ARRAYS_LEN /
-+							  BITS_PER_BYTE, GFP_KERNEL);
- 			if (!q->hhf_valid_bits[i]) {
- 				hhf_destroy(sch);
- 				return -ENOMEM;
-diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
-index bcfadfdea8e0..08a3d2af1792 100644
---- a/net/sched/sch_netem.c
-+++ b/net/sched/sch_netem.c
-@@ -692,15 +692,11 @@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)
- 	spinlock_t *root_lock;
- 	struct disttable *d;
- 	int i;
--	size_t s;
- 
- 	if (n > NETEM_DIST_MAX)
- 		return -EINVAL;
- 
--	s = sizeof(struct disttable) + n * sizeof(s16);
--	d = kmalloc(s, GFP_KERNEL | __GFP_NOWARN);
--	if (!d)
--		d = vmalloc(s);
-+	d = kvmalloc(sizeof(struct disttable) + n * sizeof(s16), GFP_KERNEL);
- 	if (!d)
- 		return -ENOMEM;
- 
-diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
-index 7f195ed4d568..5d70cd6a032d 100644
---- a/net/sched/sch_sfq.c
-+++ b/net/sched/sch_sfq.c
-@@ -684,11 +684,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
- 
- static void *sfq_alloc(size_t sz)
- {
--	void *ptr = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN);
--
--	if (!ptr)
--		ptr = vmalloc(sz);
--	return ptr;
-+	return  kvmalloc(sz, GFP_KERNEL);
- }
- 
- static void sfq_free(void *addr)
-diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
-index 38c00e867bda..a5c21f05ece4 100644
---- a/security/keys/keyctl.c
-+++ b/security/keys/keyctl.c
-@@ -99,14 +99,9 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
- 
- 	if (_payload) {
- 		ret = -ENOMEM;
--		payload = kmalloc(plen, GFP_KERNEL | __GFP_NOWARN);
--		if (!payload) {
--			if (plen <= PAGE_SIZE)
--				goto error2;
--			payload = vmalloc(plen);
--			if (!payload)
--				goto error2;
--		}
-+		payload = kvmalloc(plen, GFP_KERNEL);
-+		if (!payload)
-+			goto error2;
- 
- 		ret = -EFAULT;
- 		if (copy_from_user(payload, _payload, plen) != 0)
-@@ -1064,14 +1059,9 @@ long keyctl_instantiate_key_common(key_serial_t id,
- 
- 	if (from) {
- 		ret = -ENOMEM;
--		payload = kmalloc(plen, GFP_KERNEL);
--		if (!payload) {
--			if (plen <= PAGE_SIZE)
--				goto error;
--			payload = vmalloc(plen);
--			if (!payload)
--				goto error;
--		}
-+		payload = kvmalloc(plen, GFP_KERNEL);
-+		if (!payload)
-+			goto error;
- 
- 		ret = -EFAULT;
- 		if (!copy_from_iter_full(payload, plen, from))
--- 
-2.11.0
-
--- 
-Michal Hocko
-SUSE Labs
\ No newline at end of file
+---
\ No newline at end of file
diff --git a/a/content_digest b/N2/content_digest
index 875af95..378d9a9 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -60,1078 +60,7 @@
   "Ilya has noticed that I've screwed up some k[zc]alloc conversions and\n",
   "didn't use the kvzalloc. This is an updated patch with some acks\n",
   "collected on the way\n",
-  "---\n",
-  ">From a7b89c6d0a3c685045e37740c8f97b065f37e0a4 Mon Sep 17 00:00:00 2001\n",
-  "From: Michal Hocko <mhocko\@suse.com>\n",
-  "Date: Wed, 4 Jan 2017 13:30:32 +0100\n",
-  "Subject: [PATCH] treewide: use kv[mz]alloc* rather than opencoded variants\n",
-  "\n",
-  "There are many code paths opencoding kvmalloc. Let's use the helper\n",
-  "instead. The main difference to kvmalloc is that those users are usually\n",
-  "not considering all the aspects of the memory allocator. E.g. allocation\n",
-  "requests < 64kB are basically never failing and invoke OOM killer to\n",
-  "satisfy the allocation. This sounds too disruptive for something that\n",
-  "has a reasonable fallback - the vmalloc. On the other hand those\n",
-  "requests might fallback to vmalloc even when the memory allocator would\n",
-  "succeed after several more reclaim/compaction attempts previously. There\n",
-  "is no guarantee something like that happens though.\n",
-  "\n",
-  "This patch converts many of those places to kv[mz]alloc* helpers because\n",
-  "they are more conservative.\n",
-  "\n",
-  "Cc: Martin Schwidefsky <schwidefsky\@de.ibm.com>\n",
-  "Cc: Heiko Carstens <heiko.carstens\@de.ibm.com>\n",
-  "Cc: Herbert Xu <herbert\@gondor.apana.org.au>\n",
-  "Cc: Anton Vorontsov <anton\@enomsg.org>\n",
-  "Cc: Colin Cross <ccross\@android.com>\n",
-  "Cc: Kees Cook <keescook\@chromium.org>\n",
-  "Cc: Tony Luck <tony.luck\@intel.com>\n",
-  "Cc: \"Rafael J. Wysocki\" <rjw\@rjwysocki.net>\n",
-  "Cc: Ben Skeggs <bskeggs\@redhat.com>\n",
-  "Cc: Kent Overstreet <kent.overstreet\@gmail.com>\n",
-  "Cc: Santosh Raspatur <santosh\@chelsio.com>\n",
-  "Cc: Hariprasad S <hariprasad\@chelsio.com>\n",
-  "Cc: Tariq Toukan <tariqt\@mellanox.com>\n",
-  "Cc: Yishai Hadas <yishaih\@mellanox.com>\n",
-  "Cc: Oleg Drokin <oleg.drokin\@intel.com>\n",
-  "Cc: Andreas Dilger <andreas.dilger\@intel.com>\n",
-  "Cc: Boris Ostrovsky <boris.ostrovsky\@oracle.com>\n",
-  "Cc: \"Yan, Zheng\" <zyan\@redhat.com>\n",
-  "Cc: Alexander Viro <viro\@zeniv.linux.org.uk>\n",
-  "Cc: Alexei Starovoitov <ast\@kernel.org>\n",
-  "Cc: Eric Dumazet <eric.dumazet\@gmail.com>\n",
-  "Cc: netdev\@vger.kernel.org\n",
-  "Acked-by: Christian Borntraeger <borntraeger\@de.ibm.com> # KVM/s390\n",
-  "Acked-by: Dan Williams <dan.j.williams\@intel.com> # nvdim\n",
-  "Acked-by: David Sterba <dsterba\@suse.com> # btrfs\n",
-  "Acked-by: Ilya Dryomov <idryomov\@gmail.com> # Ceph\n",
-  "Signed-off-by: Michal Hocko <mhocko\@suse.com>\n",
-  "---\n",
-  " arch/s390/kvm/kvm-s390.c                           | 10 ++-----\n",
-  " crypto/lzo.c                                       |  4 +--\n",
-  " drivers/acpi/apei/erst.c                           |  8 ++---\n",
-  " drivers/char/agp/generic.c                         |  8 +----\n",
-  " drivers/gpu/drm/nouveau/nouveau_gem.c              |  4 +--\n",
-  " drivers/md/bcache/util.h                           | 12 ++------\n",
-  " drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h    |  3 --\n",
-  " drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 25 ++--------------\n",
-  " drivers/net/ethernet/chelsio/cxgb3/l2t.c           |  2 +-\n",
-  " drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c    | 31 ++++----------------\n",
-  " drivers/net/ethernet/mellanox/mlx4/en_tx.c         |  9 ++----\n",
-  " drivers/net/ethernet/mellanox/mlx4/mr.c            |  9 ++----\n",
-  " drivers/nvdimm/dimm_devs.c                         |  5 +---\n",
-  " .../staging/lustre/lnet/libcfs/linux/linux-mem.c   | 11 +------\n",
-  " drivers/xen/evtchn.c                               | 14 +--------\n",
-  " fs/btrfs/ctree.c                                   |  9 ++----\n",
-  " fs/btrfs/ioctl.c                                   |  9 ++----\n",
-  " fs/btrfs/send.c                                    | 27 ++++++-----------\n",
-  " fs/ceph/file.c                                     |  9 ++----\n",
-  " fs/select.c                                        |  5 +---\n",
-  " fs/xattr.c                                         | 27 ++++++-----------\n",
-  " kernel/bpf/hashtab.c                               | 11 ++-----\n",
-  " lib/iov_iter.c                                     |  5 +---\n",
-  " mm/frame_vector.c                                  |  5 +---\n",
-  " net/ipv4/inet_hashtables.c                         |  6 +---\n",
-  " net/ipv4/tcp_metrics.c                             |  5 +---\n",
-  " net/mpls/af_mpls.c                                 |  5 +---\n",
-  " net/netfilter/x_tables.c                           | 34 ++++++----------------\n",
-  " net/netfilter/xt_recent.c                          |  5 +---\n",
-  " net/sched/sch_choke.c                              |  5 +---\n",
-  " net/sched/sch_fq_codel.c                           | 26 ++++-------------\n",
-  " net/sched/sch_hhf.c                                | 33 ++++++---------------\n",
-  " net/sched/sch_netem.c                              |  6 +---\n",
-  " net/sched/sch_sfq.c                                |  6 +---\n",
-  " security/keys/keyctl.c                             | 22 ++++----------\n",
-  " 35 files changed, 96 insertions(+), 319 deletions(-)\n",
-  "\n",
-  "diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c\n",
-  "index 4f74511015b8..e6bbb33d2956 100644\n",
-  "--- a/arch/s390/kvm/kvm-s390.c\n",
-  "+++ b/arch/s390/kvm/kvm-s390.c\n",
-  "\@\@ -1126,10 +1126,7 \@\@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)\n",
-  " \tif (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)\n",
-  " \t\treturn -EINVAL;\n",
-  " \n",
-  "-\tkeys = kmalloc_array(args->count, sizeof(uint8_t),\n",
-  "-\t\t\t     GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!keys)\n",
-  "-\t\tkeys = vmalloc(sizeof(uint8_t) * args->count);\n",
-  "+\tkeys = kvmalloc(args->count * sizeof(uint8_t), GFP_KERNEL);\n",
-  " \tif (!keys)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -1171,10 +1168,7 \@\@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)\n",
-  " \tif (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)\n",
-  " \t\treturn -EINVAL;\n",
-  " \n",
-  "-\tkeys = kmalloc_array(args->count, sizeof(uint8_t),\n",
-  "-\t\t\t     GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!keys)\n",
-  "-\t\tkeys = vmalloc(sizeof(uint8_t) * args->count);\n",
-  "+\tkeys = kvmalloc(sizeof(uint8_t) * args->count, GFP_KERNEL);\n",
-  " \tif (!keys)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/crypto/lzo.c b/crypto/lzo.c\n",
-  "index 168df784da84..218567d717d6 100644\n",
-  "--- a/crypto/lzo.c\n",
-  "+++ b/crypto/lzo.c\n",
-  "\@\@ -32,9 +32,7 \@\@ static void *lzo_alloc_ctx(struct crypto_scomp *tfm)\n",
-  " {\n",
-  " \tvoid *ctx;\n",
-  " \n",
-  "-\tctx = kmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!ctx)\n",
-  "-\t\tctx = vmalloc(LZO1X_MEM_COMPRESS);\n",
-  "+\tctx = kvmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);\n",
-  " \tif (!ctx)\n",
-  " \t\treturn ERR_PTR(-ENOMEM);\n",
-  " \n",
-  "diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c\n",
-  "index ec4f507b524f..a2898df61744 100644\n",
-  "--- a/drivers/acpi/apei/erst.c\n",
-  "+++ b/drivers/acpi/apei/erst.c\n",
-  "\@\@ -513,7 +513,7 \@\@ static int __erst_record_id_cache_add_one(void)\n",
-  " \tif (i < erst_record_id_cache.len)\n",
-  " \t\tgoto retry;\n",
-  " \tif (erst_record_id_cache.len >= erst_record_id_cache.size) {\n",
-  "-\t\tint new_size, alloc_size;\n",
-  "+\t\tint new_size;\n",
-  " \t\tu64 *new_entries;\n",
-  " \n",
-  " \t\tnew_size = erst_record_id_cache.size * 2;\n",
-  "\@\@ -524,11 +524,7 \@\@ static int __erst_record_id_cache_add_one(void)\n",
-  " \t\t\t\tpr_warn(FW_WARN \"too many record IDs!\\n\");\n",
-  " \t\t\treturn 0;\n",
-  " \t\t}\n",
-  "-\t\talloc_size = new_size * sizeof(entries[0]);\n",
-  "-\t\tif (alloc_size < PAGE_SIZE)\n",
-  "-\t\t\tnew_entries = kmalloc(alloc_size, GFP_KERNEL);\n",
-  "-\t\telse\n",
-  "-\t\t\tnew_entries = vmalloc(alloc_size);\n",
-  "+\t\tnew_entries = kvmalloc(new_size * sizeof(entries[0]), GFP_KERNEL);\n",
-  " \t\tif (!new_entries)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \t\tmemcpy(new_entries, entries,\n",
-  "diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c\n",
-  "index f002fa5d1887..bdf418cac8ef 100644\n",
-  "--- a/drivers/char/agp/generic.c\n",
-  "+++ b/drivers/char/agp/generic.c\n",
-  "\@\@ -88,13 +88,7 \@\@ static int agp_get_key(void)\n",
-  " \n",
-  " void agp_alloc_page_array(size_t size, struct agp_memory *mem)\n",
-  " {\n",
-  "-\tmem->pages = NULL;\n",
-  "-\n",
-  "-\tif (size <= 2*PAGE_SIZE)\n",
-  "-\t\tmem->pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (mem->pages == NULL) {\n",
-  "-\t\tmem->pages = vmalloc(size);\n",
-  "-\t}\n",
-  "+\tmem->pages = kvmalloc(size, GFP_KERNEL);\n",
-  " }\n",
-  " EXPORT_SYMBOL(agp_alloc_page_array);\n",
-  " \n",
-  "diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c\n",
-  "index 201b52b750dd..77dd73ff126f 100644\n",
-  "--- a/drivers/gpu/drm/nouveau/nouveau_gem.c\n",
-  "+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c\n",
-  "\@\@ -568,9 +568,7 \@\@ u_memcpya(uint64_t user, unsigned nmemb, unsigned size)\n",
-  " \n",
-  " \tsize *= nmemb;\n",
-  " \n",
-  "-\tmem = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!mem)\n",
-  "-\t\tmem = vmalloc(size);\n",
-  "+\tmem = kvmalloc(size, GFP_KERNEL);\n",
-  " \tif (!mem)\n",
-  " \t\treturn ERR_PTR(-ENOMEM);\n",
-  " \n",
-  "diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h\n",
-  "index cf2cbc211d83..d00bcb64d3a8 100644\n",
-  "--- a/drivers/md/bcache/util.h\n",
-  "+++ b/drivers/md/bcache/util.h\n",
-  "\@\@ -43,11 +43,7 \@\@ struct closure;\n",
-  " \t(heap)->used = 0;\t\t\t\t\t\t\\\n",
-  " \t(heap)->size = (_size);\t\t\t\t\t\t\\\n",
-  " \t_bytes = (heap)->size * sizeof(*(heap)->data);\t\t\t\\\n",
-  "-\t(heap)->data = NULL;\t\t\t\t\t\t\\\n",
-  "-\tif (_bytes < KMALLOC_MAX_SIZE)\t\t\t\t\t\\\n",
-  "-\t\t(heap)->data = kmalloc(_bytes, (gfp));\t\t\t\\\n",
-  "-\tif ((!(heap)->data) && ((gfp) & GFP_KERNEL))\t\t\t\\\n",
-  "-\t\t(heap)->data = vmalloc(_bytes);\t\t\t\t\\\n",
-  "+\t(heap)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL);\t\t\\\n",
-  " \t(heap)->data;\t\t\t\t\t\t\t\\\n",
-  " })\n",
-  " \n",
-  "\@\@ -136,12 +132,8 \@\@ do {\t\t\t\t\t\t\t\t\t\\\n",
-  " \t\t\t\t\t\t\t\t\t\\\n",
-  " \t(fifo)->mask = _allocated_size - 1;\t\t\t\t\\\n",
-  " \t(fifo)->front = (fifo)->back = 0;\t\t\t\t\\\n",
-  "-\t(fifo)->data = NULL;\t\t\t\t\t\t\\\n",
-  " \t\t\t\t\t\t\t\t\t\\\n",
-  "-\tif (_bytes < KMALLOC_MAX_SIZE)\t\t\t\t\t\\\n",
-  "-\t\t(fifo)->data = kmalloc(_bytes, (gfp));\t\t\t\\\n",
-  "-\tif ((!(fifo)->data) && ((gfp) & GFP_KERNEL))\t\t\t\\\n",
-  "-\t\t(fifo)->data = vmalloc(_bytes);\t\t\t\t\\\n",
-  "+\t(fifo)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL);\t\t\\\n",
-  " \t(fifo)->data;\t\t\t\t\t\t\t\\\n",
-  " })\n",
-  " \n",
-  "diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h\n",
-  "index 920d918ed193..f04e81f33795 100644\n",
-  "--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h\n",
-  "+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h\n",
-  "\@\@ -41,9 +41,6 \@\@\n",
-  " \n",
-  " #define VALIDATE_TID 1\n",
-  " \n",
-  "-void *cxgb_alloc_mem(unsigned long size);\n",
-  "-void cxgb_free_mem(void *addr);\n",
-  "-\n",
-  " /*\n",
-  "  * Map an ATID or STID to their entries in the corresponding TID tables.\n",
-  "  */\n",
-  "diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c\n",
-  "index 76684dcb874c..4d80bccf9c01 100644\n",
-  "--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c\n",
-  "+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c\n",
-  "\@\@ -1152,27 +1152,6 \@\@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new,\n",
-  " }\n",
-  " \n",
-  " /*\n",
-  "- * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.\n",
-  "- * The allocated memory is cleared.\n",
-  "- */\n",
-  "-void *cxgb_alloc_mem(unsigned long size)\n",
-  "-{\n",
-  "-\tvoid *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!p)\n",
-  "-\t\tp = vzalloc(size);\n",
-  "-\treturn p;\n",
-  "-}\n",
-  "-\n",
-  "-/*\n",
-  "- * Free memory allocated through t3_alloc_mem().\n",
-  "- */\n",
-  "-void cxgb_free_mem(void *addr)\n",
-  "-{\n",
-  "-\tkvfree(addr);\n",
-  "-}\n",
-  "-\n",
-  "-/*\n",
-  "  * Allocate and initialize the TID tables.  Returns 0 on success.\n",
-  "  */\n",
-  " static int init_tid_tabs(struct tid_info *t, unsigned int ntids,\n",
-  "\@\@ -1182,7 +1161,7 \@\@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,\n",
-  " \tunsigned long size = ntids * sizeof(*t->tid_tab) +\n",
-  " \t    natids * sizeof(*t->atid_tab) + nstids * sizeof(*t->stid_tab);\n",
-  " \n",
-  "-\tt->tid_tab = cxgb_alloc_mem(size);\n",
-  "+\tt->tid_tab = kvzalloc(size, GFP_KERNEL);\n",
-  " \tif (!t->tid_tab)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -1218,7 +1197,7 \@\@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,\n",
-  " \n",
-  " static void free_tid_maps(struct tid_info *t)\n",
-  " {\n",
-  "-\tcxgb_free_mem(t->tid_tab);\n",
-  "+\tkvfree(t->tid_tab);\n",
-  " }\n",
-  " \n",
-  " static inline void add_adapter(struct adapter *adap)\n",
-  "diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.c b/drivers/net/ethernet/chelsio/cxgb3/l2t.c\n",
-  "index 5f226eda8cd6..f5c92acd52b4 100644\n",
-  "--- a/drivers/net/ethernet/chelsio/cxgb3/l2t.c\n",
-  "+++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.c\n",
-  "\@\@ -444,7 +444,7 \@\@ struct l2t_data *t3_init_l2t(unsigned int l2t_capacity)\n",
-  " \tstruct l2t_data *d;\n",
-  " \tint i, size = sizeof(*d) + l2t_capacity * sizeof(struct l2t_entry);\n",
-  " \n",
-  "-\td = cxgb_alloc_mem(size);\n",
-  "+\td = kzmalloc(size, GFP_KERNEL);\n",
-  " \tif (!d)\n",
-  " \t\treturn NULL;\n",
-  " \n",
-  "diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c\n",
-  "index 6f951877430b..a64c2a3d39fc 100644\n",
-  "--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c\n",
-  "+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c\n",
-  "\@\@ -881,27 +881,6 \@\@ static int setup_sge_queues(struct adapter *adap)\n",
-  " \treturn err;\n",
-  " }\n",
-  " \n",
-  "-/*\n",
-  "- * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.\n",
-  "- * The allocated memory is cleared.\n",
-  "- */\n",
-  "-void *t4_alloc_mem(size_t size)\n",
-  "-{\n",
-  "-\tvoid *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!p)\n",
-  "-\t\tp = vzalloc(size);\n",
-  "-\treturn p;\n",
-  "-}\n",
-  "-\n",
-  "-/*\n",
-  "- * Free memory allocated through alloc_mem().\n",
-  "- */\n",
-  "-void t4_free_mem(void *addr)\n",
-  "-{\n",
-  "-\tkvfree(addr);\n",
-  "-}\n",
-  "-\n",
-  " static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,\n",
-  " \t\t\t     void *accel_priv, select_queue_fallback_t fallback)\n",
-  " {\n",
-  "\@\@ -1300,7 +1279,7 \@\@ static int tid_init(struct tid_info *t)\n",
-  " \t       max_ftids * sizeof(*t->ftid_tab) +\n",
-  " \t       ftid_bmap_size * sizeof(long);\n",
-  " \n",
-  "-\tt->tid_tab = t4_alloc_mem(size);\n",
-  "+\tt->tid_tab = kvzalloc(size, GFP_KERNEL);\n",
-  " \tif (!t->tid_tab)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "\@\@ -3416,7 +3395,7 \@\@ static int adap_init0(struct adapter *adap)\n",
-  " \t\t/* allocate memory to read the header of the firmware on the\n",
-  " \t\t * card\n",
-  " \t\t */\n",
-  "-\t\tcard_fw = t4_alloc_mem(sizeof(*card_fw));\n",
-  "+\t\tcard_fw = kvzalloc(sizeof(*card_fw), GFP_KERNEL);\n",
-  " \n",
-  " \t\t/* Get FW from from /lib/firmware/ */\n",
-  " \t\tret = request_firmware(&fw, fw_info->fw_mod_name,\n",
-  "\@\@ -3436,7 +3415,7 \@\@ static int adap_init0(struct adapter *adap)\n",
-  " \n",
-  " \t\t/* Cleaning up */\n",
-  " \t\trelease_firmware(fw);\n",
-  "-\t\tt4_free_mem(card_fw);\n",
-  "+\t\tkvfree(card_fw);\n",
-  " \n",
-  " \t\tif (ret < 0)\n",
-  " \t\t\tgoto bye;\n",
-  "\@\@ -4432,9 +4411,9 \@\@ static void free_some_resources(struct adapter *adapter)\n",
-  " {\n",
-  " \tunsigned int i;\n",
-  " \n",
-  "-\tt4_free_mem(adapter->l2t);\n",
-  "+\tkvfree(adapter->l2t);\n",
-  " \tt4_cleanup_sched(adapter);\n",
-  "-\tt4_free_mem(adapter->tids.tid_tab);\n",
-  "+\tkvfree(adapter->tids.tid_tab);\n",
-  " \tcxgb4_cleanup_tc_u32(adapter);\n",
-  " \tkfree(adapter->sge.egr_map);\n",
-  " \tkfree(adapter->sge.ingr_map);\n",
-  "diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c\n",
-  "index 5886ad78058f..a5c1b815145e 100644\n",
-  "--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c\n",
-  "+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c\n",
-  "\@\@ -70,13 +70,10 \@\@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,\n",
-  " \tring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS;\n",
-  " \n",
-  " \ttmp = size * sizeof(struct mlx4_en_tx_info);\n",
-  "-\tring->tx_info = kmalloc_node(tmp, GFP_KERNEL | __GFP_NOWARN, node);\n",
-  "+\tring->tx_info = kvmalloc_node(tmp, GFP_KERNEL, node);\n",
-  " \tif (!ring->tx_info) {\n",
-  "-\t\tring->tx_info = vmalloc(tmp);\n",
-  "-\t\tif (!ring->tx_info) {\n",
-  "-\t\t\terr = -ENOMEM;\n",
-  "-\t\t\tgoto err_ring;\n",
-  "-\t\t}\n",
-  "+\t\terr = -ENOMEM;\n",
-  "+\t\tgoto err_ring;\n",
-  " \t}\n",
-  " \n",
-  " \ten_dbg(DRV, priv, \"Allocated tx_info ring at addr:%p size:%d\\n\",\n",
-  "diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c\n",
-  "index 395b5463cfd9..82354fd0a87e 100644\n",
-  "--- a/drivers/net/ethernet/mellanox/mlx4/mr.c\n",
-  "+++ b/drivers/net/ethernet/mellanox/mlx4/mr.c\n",
-  "\@\@ -115,12 +115,9 \@\@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order)\n",
-  " \n",
-  " \tfor (i = 0; i <= buddy->max_order; ++i) {\n",
-  " \t\ts = BITS_TO_LONGS(1 << (buddy->max_order - i));\n",
-  "-\t\tbuddy->bits[i] = kcalloc(s, sizeof (long), GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!buddy->bits[i]) {\n",
-  "-\t\t\tbuddy->bits[i] = vzalloc(s * sizeof(long));\n",
-  "-\t\t\tif (!buddy->bits[i])\n",
-  "-\t\t\t\tgoto err_out_free;\n",
-  "-\t\t}\n",
-  "+\t\tbuddy->bits[i] = kvzalloc(s * sizeof(long), GFP_KERNEL);\n",
-  "+\t\tif (!buddy->bits[i])\n",
-  "+\t\t\tgoto err_out_free;\n",
-  " \t}\n",
-  " \n",
-  " \tset_bit(0, buddy->bits[buddy->max_order]);\n",
-  "diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c\n",
-  "index 0eedc49e0d47..3bd332b167d9 100644\n",
-  "--- a/drivers/nvdimm/dimm_devs.c\n",
-  "+++ b/drivers/nvdimm/dimm_devs.c\n",
-  "\@\@ -102,10 +102,7 \@\@ int nvdimm_init_config_data(struct nvdimm_drvdata *ndd)\n",
-  " \t\treturn -ENXIO;\n",
-  " \t}\n",
-  " \n",
-  "-\tndd->data = kmalloc(ndd->nsarea.config_size, GFP_KERNEL);\n",
-  "-\tif (!ndd->data)\n",
-  "-\t\tndd->data = vmalloc(ndd->nsarea.config_size);\n",
-  "-\n",
-  "+\tndd->data = kvmalloc(ndd->nsarea.config_size, GFP_KERNEL);\n",
-  " \tif (!ndd->data)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c\n",
-  "index a6a76a681ea9..8f638267e704 100644\n",
-  "--- a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c\n",
-  "+++ b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c\n",
-  "\@\@ -45,15 +45,6 \@\@ EXPORT_SYMBOL(libcfs_kvzalloc);\n",
-  " void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size,\n",
-  " \t\t\t  gfp_t flags)\n",
-  " {\n",
-  "-\tvoid *ret;\n",
-  "-\n",
-  "-\tret = kzalloc_node(size, flags | __GFP_NOWARN,\n",
-  "-\t\t\t   cfs_cpt_spread_node(cptab, cpt));\n",
-  "-\tif (!ret) {\n",
-  "-\t\tWARN_ON(!(flags & (__GFP_FS | __GFP_HIGH)));\n",
-  "-\t\tret = vmalloc_node(size, cfs_cpt_spread_node(cptab, cpt));\n",
-  "-\t}\n",
-  "-\n",
-  "-\treturn ret;\n",
-  "+\treturn kvzalloc_node(size, flags, cfs_cpt_spread_node(cptab, cpt));\n",
-  " }\n",
-  " EXPORT_SYMBOL(libcfs_kvzalloc_cpt);\n",
-  "diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c\n",
-  "index 6890897a6f30..10f1ef582659 100644\n",
-  "--- a/drivers/xen/evtchn.c\n",
-  "+++ b/drivers/xen/evtchn.c\n",
-  "\@\@ -87,18 +87,6 \@\@ struct user_evtchn {\n",
-  " \tbool enabled;\n",
-  " };\n",
-  " \n",
-  "-static evtchn_port_t *evtchn_alloc_ring(unsigned int size)\n",
-  "-{\n",
-  "-\tevtchn_port_t *ring;\n",
-  "-\tsize_t s = size * sizeof(*ring);\n",
-  "-\n",
-  "-\tring = kmalloc(s, GFP_KERNEL);\n",
-  "-\tif (!ring)\n",
-  "-\t\tring = vmalloc(s);\n",
-  "-\n",
-  "-\treturn ring;\n",
-  "-}\n",
-  "-\n",
-  " static void evtchn_free_ring(evtchn_port_t *ring)\n",
-  " {\n",
-  " \tkvfree(ring);\n",
-  "\@\@ -334,7 +322,7 \@\@ static int evtchn_resize_ring(struct per_user_data *u)\n",
-  " \telse\n",
-  " \t\tnew_size = 2 * u->ring_size;\n",
-  " \n",
-  "-\tnew_ring = evtchn_alloc_ring(new_size);\n",
-  "+\tnew_ring = kvmalloc(new_size * sizeof(*new_ring), GFP_KERNEL);\n",
-  " \tif (!new_ring)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c\n",
-  "index 146b2dc0d2cf..4fc9712d927d 100644\n",
-  "--- a/fs/btrfs/ctree.c\n",
-  "+++ b/fs/btrfs/ctree.c\n",
-  "\@\@ -5391,13 +5391,10 \@\@ int btrfs_compare_trees(struct btrfs_root *left_root,\n",
-  " \t\tgoto out;\n",
-  " \t}\n",
-  " \n",
-  "-\ttmp_buf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN);\n",
-  "+\ttmp_buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);\n",
-  " \tif (!tmp_buf) {\n",
-  "-\t\ttmp_buf = vmalloc(fs_info->nodesize);\n",
-  "-\t\tif (!tmp_buf) {\n",
-  "-\t\t\tret = -ENOMEM;\n",
-  "-\t\t\tgoto out;\n",
-  "-\t\t}\n",
-  "+\t\tret = -ENOMEM;\n",
-  "+\t\tgoto out;\n",
-  " \t}\n",
-  " \n",
-  " \tleft_path->search_commit_root = 1;\n",
-  "diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c\n",
-  "index 77dabfed3a5d..6f0b488c7428 100644\n",
-  "--- a/fs/btrfs/ioctl.c\n",
-  "+++ b/fs/btrfs/ioctl.c\n",
-  "\@\@ -3547,12 +3547,9 \@\@ static int btrfs_clone(struct inode *src, struct inode *inode,\n",
-  " \tu64 last_dest_end = destoff;\n",
-  " \n",
-  " \tret = -ENOMEM;\n",
-  "-\tbuf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!buf) {\n",
-  "-\t\tbuf = vmalloc(fs_info->nodesize);\n",
-  "-\t\tif (!buf)\n",
-  "-\t\t\treturn ret;\n",
-  "-\t}\n",
-  "+\tbuf = kvmalloc(fs_info->nodesize, GFP_KERNEL);\n",
-  "+\tif (!buf)\n",
-  "+\t\treturn ret;\n",
-  " \n",
-  " \tpath = btrfs_alloc_path();\n",
-  " \tif (!path) {\n",
-  "diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c\n",
-  "index d145ce804620..0621ca2a7b5d 100644\n",
-  "--- a/fs/btrfs/send.c\n",
-  "+++ b/fs/btrfs/send.c\n",
-  "\@\@ -6242,22 +6242,16 \@\@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)\n",
-  " \tsctx->clone_roots_cnt = arg->clone_sources_count;\n",
-  " \n",
-  " \tsctx->send_max_size = BTRFS_SEND_BUF_SIZE;\n",
-  "-\tsctx->send_buf = kmalloc(sctx->send_max_size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "+\tsctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);\n",
-  " \tif (!sctx->send_buf) {\n",
-  "-\t\tsctx->send_buf = vmalloc(sctx->send_max_size);\n",
-  "-\t\tif (!sctx->send_buf) {\n",
-  "-\t\t\tret = -ENOMEM;\n",
-  "-\t\t\tgoto out;\n",
-  "-\t\t}\n",
-  "+\t\tret = -ENOMEM;\n",
-  "+\t\tgoto out;\n",
-  " \t}\n",
-  " \n",
-  "-\tsctx->read_buf = kmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL | __GFP_NOWARN);\n",
-  "+\tsctx->read_buf = kvmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL);\n",
-  " \tif (!sctx->read_buf) {\n",
-  "-\t\tsctx->read_buf = vmalloc(BTRFS_SEND_READ_SIZE);\n",
-  "-\t\tif (!sctx->read_buf) {\n",
-  "-\t\t\tret = -ENOMEM;\n",
-  "-\t\t\tgoto out;\n",
-  "-\t\t}\n",
-  "+\t\tret = -ENOMEM;\n",
-  "+\t\tgoto out;\n",
-  " \t}\n",
-  " \n",
-  " \tsctx->pending_dir_moves = RB_ROOT;\n",
-  "\@\@ -6278,13 +6272,10 \@\@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)\n",
-  " \talloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources);\n",
-  " \n",
-  " \tif (arg->clone_sources_count) {\n",
-  "-\t\tclone_sources_tmp = kmalloc(alloc_size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "+\t\tclone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);\n",
-  " \t\tif (!clone_sources_tmp) {\n",
-  "-\t\t\tclone_sources_tmp = vmalloc(alloc_size);\n",
-  "-\t\t\tif (!clone_sources_tmp) {\n",
-  "-\t\t\t\tret = -ENOMEM;\n",
-  "-\t\t\t\tgoto out;\n",
-  "-\t\t\t}\n",
-  "+\t\t\tret = -ENOMEM;\n",
-  "+\t\t\tgoto out;\n",
-  " \t\t}\n",
-  " \n",
-  " \t\tret = copy_from_user(clone_sources_tmp, arg->clone_sources,\n",
-  "diff --git a/fs/ceph/file.c b/fs/ceph/file.c\n",
-  "index 045d30d26624..78b18acf33ba 100644\n",
-  "--- a/fs/ceph/file.c\n",
-  "+++ b/fs/ceph/file.c\n",
-  "\@\@ -74,12 +74,9 \@\@ dio_get_pages_alloc(const struct iov_iter *it, size_t nbytes,\n",
-  " \talign = (unsigned long)(it->iov->iov_base + it->iov_offset) &\n",
-  " \t\t(PAGE_SIZE - 1);\n",
-  " \tnpages = calc_pages_for(align, nbytes);\n",
-  "-\tpages = kmalloc(sizeof(*pages) * npages, GFP_KERNEL);\n",
-  "-\tif (!pages) {\n",
-  "-\t\tpages = vmalloc(sizeof(*pages) * npages);\n",
-  "-\t\tif (!pages)\n",
-  "-\t\t\treturn ERR_PTR(-ENOMEM);\n",
-  "-\t}\n",
-  "+\tpages = kvmalloc(sizeof(*pages) * npages, GFP_KERNEL);\n",
-  "+\tif (!pages)\n",
-  "+\t\treturn ERR_PTR(-ENOMEM);\n",
-  " \n",
-  " \tfor (idx = 0; idx < npages; ) {\n",
-  " \t\tsize_t start;\n",
-  "diff --git a/fs/select.c b/fs/select.c\n",
-  "index 305c0daf5d67..9e8e1189eb99 100644\n",
-  "--- a/fs/select.c\n",
-  "+++ b/fs/select.c\n",
-  "\@\@ -586,10 +586,7 \@\@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,\n",
-  " \t\t\tgoto out_nofds;\n",
-  " \n",
-  " \t\talloc_size = 6 * size;\n",
-  "-\t\tbits = kmalloc(alloc_size, GFP_KERNEL|__GFP_NOWARN);\n",
-  "-\t\tif (!bits && alloc_size > PAGE_SIZE)\n",
-  "-\t\t\tbits = vmalloc(alloc_size);\n",
-  "-\n",
-  "+\t\tbits = kvmalloc(alloc_size, GFP_KERNEL);\n",
-  " \t\tif (!bits)\n",
-  " \t\t\tgoto out_nofds;\n",
-  " \t}\n",
-  "diff --git a/fs/xattr.c b/fs/xattr.c\n",
-  "index 7e3317cf4045..967542e1521b 100644\n",
-  "--- a/fs/xattr.c\n",
-  "+++ b/fs/xattr.c\n",
-  "\@\@ -431,12 +431,9 \@\@ setxattr(struct dentry *d, const char __user *name, const void __user *value,\n",
-  " \tif (size) {\n",
-  " \t\tif (size > XATTR_SIZE_MAX)\n",
-  " \t\t\treturn -E2BIG;\n",
-  "-\t\tkvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!kvalue) {\n",
-  "-\t\t\tkvalue = vmalloc(size);\n",
-  "-\t\t\tif (!kvalue)\n",
-  "-\t\t\t\treturn -ENOMEM;\n",
-  "-\t\t}\n",
-  "+\t\tkvalue = kvmalloc(size, GFP_KERNEL);\n",
-  "+\t\tif (!kvalue)\n",
-  "+\t\t\treturn -ENOMEM;\n",
-  " \t\tif (copy_from_user(kvalue, value, size)) {\n",
-  " \t\t\terror = -EFAULT;\n",
-  " \t\t\tgoto out;\n",
-  "\@\@ -528,12 +525,9 \@\@ getxattr(struct dentry *d, const char __user *name, void __user *value,\n",
-  " \tif (size) {\n",
-  " \t\tif (size > XATTR_SIZE_MAX)\n",
-  " \t\t\tsize = XATTR_SIZE_MAX;\n",
-  "-\t\tkvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!kvalue) {\n",
-  "-\t\t\tkvalue = vmalloc(size);\n",
-  "-\t\t\tif (!kvalue)\n",
-  "-\t\t\t\treturn -ENOMEM;\n",
-  "-\t\t}\n",
-  "+\t\tkvalue = kzmalloc(size, GFP_KERNEL);\n",
-  "+\t\tif (!kvalue)\n",
-  "+\t\t\treturn -ENOMEM;\n",
-  " \t}\n",
-  " \n",
-  " \terror = vfs_getxattr(d, kname, kvalue, size);\n",
-  "\@\@ -611,12 +605,9 \@\@ listxattr(struct dentry *d, char __user *list, size_t size)\n",
-  " \tif (size) {\n",
-  " \t\tif (size > XATTR_LIST_MAX)\n",
-  " \t\t\tsize = XATTR_LIST_MAX;\n",
-  "-\t\tklist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);\n",
-  "-\t\tif (!klist) {\n",
-  "-\t\t\tklist = vmalloc(size);\n",
-  "-\t\t\tif (!klist)\n",
-  "-\t\t\t\treturn -ENOMEM;\n",
-  "-\t\t}\n",
-  "+\t\tklist = kvmalloc(size, GFP_KERNEL);\n",
-  "+\t\tif (!klist)\n",
-  "+\t\t\treturn -ENOMEM;\n",
-  " \t}\n",
-  " \n",
-  " \terror = vfs_listxattr(d, klist, size);\n",
-  "diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c\n",
-  "index 34debc1a9641..4ca30a951bbc 100644\n",
-  "--- a/kernel/bpf/hashtab.c\n",
-  "+++ b/kernel/bpf/hashtab.c\n",
-  "\@\@ -320,14 +320,9 \@\@ static struct bpf_map *htab_map_alloc(union bpf_attr *attr)\n",
-  " \t\tgoto free_htab;\n",
-  " \n",
-  " \terr = -ENOMEM;\n",
-  "-\thtab->buckets = kmalloc_array(htab->n_buckets, sizeof(struct bucket),\n",
-  "-\t\t\t\t      GFP_USER | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!htab->buckets) {\n",
-  "-\t\thtab->buckets = vmalloc(htab->n_buckets * sizeof(struct bucket));\n",
-  "-\t\tif (!htab->buckets)\n",
-  "-\t\t\tgoto free_htab;\n",
-  "-\t}\n",
-  "+\thtab->buckets = kvmalloc(htab->n_buckets * sizeof(struct bucket), GFP_USER);\n",
-  "+\tif (!htab->buckets)\n",
-  "+\t\tgoto free_htab;\n",
-  " \n",
-  " \tfor (i = 0; i < htab->n_buckets; i++) {\n",
-  " \t\tINIT_HLIST_HEAD(&htab->buckets[i].head);\n",
-  "diff --git a/lib/iov_iter.c b/lib/iov_iter.c\n",
-  "index 25f572303801..45c17b5562b5 100644\n",
-  "--- a/lib/iov_iter.c\n",
-  "+++ b/lib/iov_iter.c\n",
-  "\@\@ -957,10 +957,7 \@\@ EXPORT_SYMBOL(iov_iter_get_pages);\n",
-  " \n",
-  " static struct page **get_pages_array(size_t n)\n",
-  " {\n",
-  "-\tstruct page **p = kmalloc(n * sizeof(struct page *), GFP_KERNEL);\n",
-  "-\tif (!p)\n",
-  "-\t\tp = vmalloc(n * sizeof(struct page *));\n",
-  "-\treturn p;\n",
-  "+\treturn kvmalloc(n * sizeof(struct page *), GFP_KERNEL);\n",
-  " }\n",
-  " \n",
-  " static ssize_t pipe_get_pages_alloc(struct iov_iter *i,\n",
-  "diff --git a/mm/frame_vector.c b/mm/frame_vector.c\n",
-  "index db77dcb38afd..72ebec18629c 100644\n",
-  "--- a/mm/frame_vector.c\n",
-  "+++ b/mm/frame_vector.c\n",
-  "\@\@ -200,10 +200,7 \@\@ struct frame_vector *frame_vector_create(unsigned int nr_frames)\n",
-  " \t * Avoid higher order allocations, use vmalloc instead. It should\n",
-  " \t * be rare anyway.\n",
-  " \t */\n",
-  "-\tif (size <= PAGE_SIZE)\n",
-  "-\t\tvec = kmalloc(size, GFP_KERNEL);\n",
-  "-\telse\n",
-  "-\t\tvec = vmalloc(size);\n",
-  "+\tvec = kvmalloc(size, GFP_KERNEL);\n",
-  " \tif (!vec)\n",
-  " \t\treturn NULL;\n",
-  " \tvec->nr_allocated = nr_frames;\n",
-  "diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c\n",
-  "index ca97835bfec4..a46a9fd8b540 100644\n",
-  "--- a/net/ipv4/inet_hashtables.c\n",
-  "+++ b/net/ipv4/inet_hashtables.c\n",
-  "\@\@ -687,11 +687,7 \@\@ int inet_ehash_locks_alloc(struct inet_hashinfo *hashinfo)\n",
-  " \t\t/* no more locks than number of hash buckets */\n",
-  " \t\tnblocks = min(nblocks, hashinfo->ehash_mask + 1);\n",
-  " \n",
-  "-\t\thashinfo->ehash_locks =\tkmalloc_array(nblocks, locksz,\n",
-  "-\t\t\t\t\t\t      GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!hashinfo->ehash_locks)\n",
-  "-\t\t\thashinfo->ehash_locks = vmalloc(nblocks * locksz);\n",
-  "-\n",
-  "+\t\thashinfo->ehash_locks = kvmalloc(nblocks * locksz, GFP_KERNEL);\n",
-  " \t\tif (!hashinfo->ehash_locks)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c\n",
-  "index d46f4d5b1c62..39b2166d3be8 100644\n",
-  "--- a/net/ipv4/tcp_metrics.c\n",
-  "+++ b/net/ipv4/tcp_metrics.c\n",
-  "\@\@ -1155,10 +1155,7 \@\@ static int __net_init tcp_net_metrics_init(struct net *net)\n",
-  " \ttcp_metrics_hash_log = order_base_2(slots);\n",
-  " \tsize = sizeof(struct tcpm_hash_bucket) << tcp_metrics_hash_log;\n",
-  " \n",
-  "-\ttcp_metrics_hash = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!tcp_metrics_hash)\n",
-  "-\t\ttcp_metrics_hash = vzalloc(size);\n",
-  "-\n",
-  "+\ttcp_metrics_hash = kvzalloc(size, GFP_KERNEL);\n",
-  " \tif (!tcp_metrics_hash)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c\n",
-  "index 15fe97644ffe..a0c82ef74389 100644\n",
-  "--- a/net/mpls/af_mpls.c\n",
-  "+++ b/net/mpls/af_mpls.c\n",
-  "\@\@ -1525,10 +1525,7 \@\@ static int resize_platform_label_table(struct net *net, size_t limit)\n",
-  " \tunsigned index;\n",
-  " \n",
-  " \tif (size) {\n",
-  "-\t\tlabels = kzalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);\n",
-  "-\t\tif (!labels)\n",
-  "-\t\t\tlabels = vzalloc(size);\n",
-  "-\n",
-  "+\t\tlabels = kvzalloc(size, GFP_KERNEL);\n",
-  " \t\tif (!labels)\n",
-  " \t\t\tgoto nolabels;\n",
-  " \t}\n",
-  "diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c\n",
-  "index a011322a027d..cdc55d5ee4ad 100644\n",
-  "--- a/net/netfilter/x_tables.c\n",
-  "+++ b/net/netfilter/x_tables.c\n",
-  "\@\@ -712,17 +712,11 \@\@ EXPORT_SYMBOL(xt_check_entry_offsets);\n",
-  "  */\n",
-  " unsigned int *xt_alloc_entry_offsets(unsigned int size)\n",
-  " {\n",
-  "-\tunsigned int *off;\n",
-  "-\n",
-  "-\toff = kcalloc(size, sizeof(unsigned int), GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (off)\n",
-  "-\t\treturn off;\n",
-  "-\n",
-  " \tif (size < (SIZE_MAX / sizeof(unsigned int)))\n",
-  "-\t\toff = vmalloc(size * sizeof(unsigned int));\n",
-  "+\t\treturn kvzalloc(size * sizeof(unsigned int), GFP_KERNEL);\n",
-  "+\n",
-  "+\treturn NULL;\n",
-  " \n",
-  "-\treturn off;\n",
-  " }\n",
-  " EXPORT_SYMBOL(xt_alloc_entry_offsets);\n",
-  " \n",
-  "\@\@ -956,15 +950,9 \@\@ struct xt_table_info *xt_alloc_table_info(unsigned int size)\n",
-  " \tif ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)\n",
-  " \t\treturn NULL;\n",
-  " \n",
-  "-\tif (sz <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER))\n",
-  "-\t\tinfo = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);\n",
-  "-\tif (!info) {\n",
-  "-\t\tinfo = __vmalloc(sz, GFP_KERNEL | __GFP_NOWARN |\n",
-  "-\t\t\t\t     __GFP_NORETRY | __GFP_HIGHMEM,\n",
-  "-\t\t\t\t PAGE_KERNEL);\n",
-  "-\t\tif (!info)\n",
-  "-\t\t\treturn NULL;\n",
-  "-\t}\n",
-  "+\tinfo = kvmalloc(sz, GFP_KERNEL);\n",
-  "+\tif (!info)\n",
-  "+\t\treturn NULL;\n",
-  " \tmemset(info, 0, sizeof(*info));\n",
-  " \tinfo->size = size;\n",
-  " \treturn info;\n",
-  "\@\@ -1066,7 +1054,7 \@\@ static int xt_jumpstack_alloc(struct xt_table_info *i)\n",
-  " \n",
-  " \tsize = sizeof(void **) * nr_cpu_ids;\n",
-  " \tif (size > PAGE_SIZE)\n",
-  "-\t\ti->jumpstack = vzalloc(size);\n",
-  "+\t\ti->jumpstack = kvzalloc(size, GFP_KERNEL);\n",
-  " \telse\n",
-  " \t\ti->jumpstack = kzalloc(size, GFP_KERNEL);\n",
-  " \tif (i->jumpstack == NULL)\n",
-  "\@\@ -1088,12 +1076,8 \@\@ static int xt_jumpstack_alloc(struct xt_table_info *i)\n",
-  " \t */\n",
-  " \tsize = sizeof(void *) * i->stacksize * 2u;\n",
-  " \tfor_each_possible_cpu(cpu) {\n",
-  "-\t\tif (size > PAGE_SIZE)\n",
-  "-\t\t\ti->jumpstack[cpu] = vmalloc_node(size,\n",
-  "-\t\t\t\tcpu_to_node(cpu));\n",
-  "-\t\telse\n",
-  "-\t\t\ti->jumpstack[cpu] = kmalloc_node(size,\n",
-  "-\t\t\t\tGFP_KERNEL, cpu_to_node(cpu));\n",
-  "+\t\ti->jumpstack[cpu] = kvmalloc_node(size, GFP_KERNEL,\n",
-  "+\t\t\tcpu_to_node(cpu));\n",
-  " \t\tif (i->jumpstack[cpu] == NULL)\n",
-  " \t\t\t/*\n",
-  " \t\t\t * Freeing will be done later on by the callers. The\n",
-  "diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c\n",
-  "index 1d89a4eaf841..d6aa8f63ed2e 100644\n",
-  "--- a/net/netfilter/xt_recent.c\n",
-  "+++ b/net/netfilter/xt_recent.c\n",
-  "\@\@ -388,10 +388,7 \@\@ static int recent_mt_check(const struct xt_mtchk_param *par,\n",
-  " \t}\n",
-  " \n",
-  " \tsz = sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size;\n",
-  "-\tif (sz <= PAGE_SIZE)\n",
-  "-\t\tt = kzalloc(sz, GFP_KERNEL);\n",
-  "-\telse\n",
-  "-\t\tt = vzalloc(sz);\n",
-  "+\tt = kvzalloc(sz, GFP_KERNEL);\n",
-  " \tif (t == NULL) {\n",
-  " \t\tret = -ENOMEM;\n",
-  " \t\tgoto out;\n",
-  "diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c\n",
-  "index 3b6d5bd69101..30d6a39fd2c8 100644\n",
-  "--- a/net/sched/sch_choke.c\n",
-  "+++ b/net/sched/sch_choke.c\n",
-  "\@\@ -431,10 +431,7 \@\@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \tif (mask != q->tab_mask) {\n",
-  " \t\tstruct sk_buff **ntab;\n",
-  " \n",
-  "-\t\tntab = kcalloc(mask + 1, sizeof(struct sk_buff *),\n",
-  "-\t\t\t       GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!ntab)\n",
-  "-\t\t\tntab = vzalloc((mask + 1) * sizeof(struct sk_buff *));\n",
-  "+\t\tntab = kvzalloc((mask + 1) * sizeof(struct sk_buff *), GFP_KERNEL);\n",
-  " \t\tif (!ntab)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c\n",
-  "index a5ea0e9b6be4..c580f0d406c2 100644\n",
-  "--- a/net/sched/sch_fq_codel.c\n",
-  "+++ b/net/sched/sch_fq_codel.c\n",
-  "\@\@ -449,27 +449,13 \@\@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \treturn 0;\n",
-  " }\n",
-  " \n",
-  "-static void *fq_codel_zalloc(size_t sz)\n",
-  "-{\n",
-  "-\tvoid *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!ptr)\n",
-  "-\t\tptr = vzalloc(sz);\n",
-  "-\treturn ptr;\n",
-  "-}\n",
-  "-\n",
-  "-static void fq_codel_free(void *addr)\n",
-  "-{\n",
-  "-\tkvfree(addr);\n",
-  "-}\n",
-  "-\n",
-  " static void fq_codel_destroy(struct Qdisc *sch)\n",
-  " {\n",
-  " \tstruct fq_codel_sched_data *q = qdisc_priv(sch);\n",
-  " \n",
-  " \ttcf_destroy_chain(&q->filter_list);\n",
-  "-\tfq_codel_free(q->backlogs);\n",
-  "-\tfq_codel_free(q->flows);\n",
-  "+\tkvfree(q->backlogs);\n",
-  "+\tkvfree(q->flows);\n",
-  " }\n",
-  " \n",
-  " static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)\n",
-  "\@\@ -497,13 +483,13 \@\@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \t}\n",
-  " \n",
-  " \tif (!q->flows) {\n",
-  "-\t\tq->flows = fq_codel_zalloc(q->flows_cnt *\n",
-  "-\t\t\t\t\t   sizeof(struct fq_codel_flow));\n",
-  "+\t\tq->flows = kvzalloc(q->flows_cnt *\n",
-  "+\t\t\t\t\t   sizeof(struct fq_codel_flow), GFP_KERNEL);\n",
-  " \t\tif (!q->flows)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  "-\t\tq->backlogs = fq_codel_zalloc(q->flows_cnt * sizeof(u32));\n",
-  "+\t\tq->backlogs = kvzalloc(q->flows_cnt * sizeof(u32), GFP_KERNEL);\n",
-  " \t\tif (!q->backlogs) {\n",
-  "-\t\t\tfq_codel_free(q->flows);\n",
-  "+\t\t\tkvfree(q->flows);\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \t\t}\n",
-  " \t\tfor (i = 0; i < q->flows_cnt; i++) {\n",
-  "diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c\n",
-  "index e3d0458af17b..2454055c737e 100644\n",
-  "--- a/net/sched/sch_hhf.c\n",
-  "+++ b/net/sched/sch_hhf.c\n",
-  "\@\@ -467,29 +467,14 \@\@ static void hhf_reset(struct Qdisc *sch)\n",
-  " \t\trtnl_kfree_skbs(skb, skb);\n",
-  " }\n",
-  " \n",
-  "-static void *hhf_zalloc(size_t sz)\n",
-  "-{\n",
-  "-\tvoid *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!ptr)\n",
-  "-\t\tptr = vzalloc(sz);\n",
-  "-\n",
-  "-\treturn ptr;\n",
-  "-}\n",
-  "-\n",
-  "-static void hhf_free(void *addr)\n",
-  "-{\n",
-  "-\tkvfree(addr);\n",
-  "-}\n",
-  "-\n",
-  " static void hhf_destroy(struct Qdisc *sch)\n",
-  " {\n",
-  " \tint i;\n",
-  " \tstruct hhf_sched_data *q = qdisc_priv(sch);\n",
-  " \n",
-  " \tfor (i = 0; i < HHF_ARRAYS_CNT; i++) {\n",
-  "-\t\thhf_free(q->hhf_arrays[i]);\n",
-  "-\t\thhf_free(q->hhf_valid_bits[i]);\n",
-  "+\t\tkvfree(q->hhf_arrays[i]);\n",
-  "+\t\tkvfree(q->hhf_valid_bits[i]);\n",
-  " \t}\n",
-  " \n",
-  " \tfor (i = 0; i < HH_FLOWS_CNT; i++) {\n",
-  "\@\@ -503,7 +488,7 \@\@ static void hhf_destroy(struct Qdisc *sch)\n",
-  " \t\t\tkfree(flow);\n",
-  " \t\t}\n",
-  " \t}\n",
-  "-\thhf_free(q->hh_flows);\n",
-  "+\tkvfree(q->hh_flows);\n",
-  " }\n",
-  " \n",
-  " static const struct nla_policy hhf_policy[TCA_HHF_MAX + 1] = {\n",
-  "\@\@ -609,8 +594,8 \@\@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \n",
-  " \tif (!q->hh_flows) {\n",
-  " \t\t/* Initialize heavy-hitter flow table. */\n",
-  "-\t\tq->hh_flows = hhf_zalloc(HH_FLOWS_CNT *\n",
-  "-\t\t\t\t\t sizeof(struct list_head));\n",
-  "+\t\tq->hh_flows = kvzalloc(HH_FLOWS_CNT *\n",
-  "+\t\t\t\t\t sizeof(struct list_head), GFP_KERNEL);\n",
-  " \t\tif (!q->hh_flows)\n",
-  " \t\t\treturn -ENOMEM;\n",
-  " \t\tfor (i = 0; i < HH_FLOWS_CNT; i++)\n",
-  "\@\@ -624,8 +609,8 \@\@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \n",
-  " \t\t/* Initialize heavy-hitter filter arrays. */\n",
-  " \t\tfor (i = 0; i < HHF_ARRAYS_CNT; i++) {\n",
-  "-\t\t\tq->hhf_arrays[i] = hhf_zalloc(HHF_ARRAYS_LEN *\n",
-  "-\t\t\t\t\t\t      sizeof(u32));\n",
-  "+\t\t\tq->hhf_arrays[i] = kvzalloc(HHF_ARRAYS_LEN *\n",
-  "+\t\t\t\t\t\t      sizeof(u32), GFP_KERNEL);\n",
-  " \t\t\tif (!q->hhf_arrays[i]) {\n",
-  " \t\t\t\thhf_destroy(sch);\n",
-  " \t\t\t\treturn -ENOMEM;\n",
-  "\@\@ -635,8 +620,8 \@\@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \n",
-  " \t\t/* Initialize valid bits of heavy-hitter filter arrays. */\n",
-  " \t\tfor (i = 0; i < HHF_ARRAYS_CNT; i++) {\n",
-  "-\t\t\tq->hhf_valid_bits[i] = hhf_zalloc(HHF_ARRAYS_LEN /\n",
-  "-\t\t\t\t\t\t\t  BITS_PER_BYTE);\n",
-  "+\t\t\tq->hhf_valid_bits[i] = kvzalloc(HHF_ARRAYS_LEN /\n",
-  "+\t\t\t\t\t\t\t  BITS_PER_BYTE, GFP_KERNEL);\n",
-  " \t\t\tif (!q->hhf_valid_bits[i]) {\n",
-  " \t\t\t\thhf_destroy(sch);\n",
-  " \t\t\t\treturn -ENOMEM;\n",
-  "diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c\n",
-  "index bcfadfdea8e0..08a3d2af1792 100644\n",
-  "--- a/net/sched/sch_netem.c\n",
-  "+++ b/net/sched/sch_netem.c\n",
-  "\@\@ -692,15 +692,11 \@\@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)\n",
-  " \tspinlock_t *root_lock;\n",
-  " \tstruct disttable *d;\n",
-  " \tint i;\n",
-  "-\tsize_t s;\n",
-  " \n",
-  " \tif (n > NETEM_DIST_MAX)\n",
-  " \t\treturn -EINVAL;\n",
-  " \n",
-  "-\ts = sizeof(struct disttable) + n * sizeof(s16);\n",
-  "-\td = kmalloc(s, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\tif (!d)\n",
-  "-\t\td = vmalloc(s);\n",
-  "+\td = kvmalloc(sizeof(struct disttable) + n * sizeof(s16), GFP_KERNEL);\n",
-  " \tif (!d)\n",
-  " \t\treturn -ENOMEM;\n",
-  " \n",
-  "diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c\n",
-  "index 7f195ed4d568..5d70cd6a032d 100644\n",
-  "--- a/net/sched/sch_sfq.c\n",
-  "+++ b/net/sched/sch_sfq.c\n",
-  "\@\@ -684,11 +684,7 \@\@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)\n",
-  " \n",
-  " static void *sfq_alloc(size_t sz)\n",
-  " {\n",
-  "-\tvoid *ptr = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\n",
-  "-\tif (!ptr)\n",
-  "-\t\tptr = vmalloc(sz);\n",
-  "-\treturn ptr;\n",
-  "+\treturn  kvmalloc(sz, GFP_KERNEL);\n",
-  " }\n",
-  " \n",
-  " static void sfq_free(void *addr)\n",
-  "diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c\n",
-  "index 38c00e867bda..a5c21f05ece4 100644\n",
-  "--- a/security/keys/keyctl.c\n",
-  "+++ b/security/keys/keyctl.c\n",
-  "\@\@ -99,14 +99,9 \@\@ SYSCALL_DEFINE5(add_key, const char __user *, _type,\n",
-  " \n",
-  " \tif (_payload) {\n",
-  " \t\tret = -ENOMEM;\n",
-  "-\t\tpayload = kmalloc(plen, GFP_KERNEL | __GFP_NOWARN);\n",
-  "-\t\tif (!payload) {\n",
-  "-\t\t\tif (plen <= PAGE_SIZE)\n",
-  "-\t\t\t\tgoto error2;\n",
-  "-\t\t\tpayload = vmalloc(plen);\n",
-  "-\t\t\tif (!payload)\n",
-  "-\t\t\t\tgoto error2;\n",
-  "-\t\t}\n",
-  "+\t\tpayload = kvmalloc(plen, GFP_KERNEL);\n",
-  "+\t\tif (!payload)\n",
-  "+\t\t\tgoto error2;\n",
-  " \n",
-  " \t\tret = -EFAULT;\n",
-  " \t\tif (copy_from_user(payload, _payload, plen) != 0)\n",
-  "\@\@ -1064,14 +1059,9 \@\@ long keyctl_instantiate_key_common(key_serial_t id,\n",
-  " \n",
-  " \tif (from) {\n",
-  " \t\tret = -ENOMEM;\n",
-  "-\t\tpayload = kmalloc(plen, GFP_KERNEL);\n",
-  "-\t\tif (!payload) {\n",
-  "-\t\t\tif (plen <= PAGE_SIZE)\n",
-  "-\t\t\t\tgoto error;\n",
-  "-\t\t\tpayload = vmalloc(plen);\n",
-  "-\t\t\tif (!payload)\n",
-  "-\t\t\t\tgoto error;\n",
-  "-\t\t}\n",
-  "+\t\tpayload = kvmalloc(plen, GFP_KERNEL);\n",
-  "+\t\tif (!payload)\n",
-  "+\t\t\tgoto error;\n",
-  " \n",
-  " \t\tret = -EFAULT;\n",
-  " \t\tif (!copy_from_iter_full(payload, plen, from))\n",
-  "-- \n",
-  "2.11.0\n",
-  "\n",
-  "-- \n",
-  "Michal Hocko\n",
-  "SUSE Labs"
+  "---"
 ]
 
-96903ddeca344c284a7670d040c99dd84c1be03d04c285e76911e4dda5b5e5fe
+914366da4ccf3a21ccf6a9385e4d8256f94b857dde7690a098cd04c1e5d4d2c2

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.