7ca6353
diff --git a/drivers/md/dm-cache-policy-mq.c b/drivers/md/dm-cache-policy-mq.c
7ca6353
index cab6dd2..ec79c8f 100644
7ca6353
--- a/drivers/md/dm-cache-policy-mq.c
7ca6353
+++ b/drivers/md/dm-cache-policy-mq.c
7ca6353
@@ -868,7 +868,7 @@ static void mq_destroy(struct dm_cache_policy *p)
7ca6353
 	struct mq_policy *mq = to_mq_policy(p);
7ca6353
 
7ca6353
 	free_bitset(mq->allocation_bitset);
7ca6353
-	kfree(mq->table);
7ca6353
+	vfree(mq->table);
7ca6353
 	free_entries(mq);
7ca6353
 	kfree(mq);
7ca6353
 }
7ca6353
@@ -1189,7 +1189,7 @@ static struct dm_cache_policy *mq_create(dm_cblock_t cache_size,
7ca6353
 
7ca6353
 	mq->nr_buckets = next_power(from_cblock(cache_size) / 2, 16);
7ca6353
 	mq->hash_bits = ffs(mq->nr_buckets) - 1;
7ca6353
-	mq->table = kzalloc(sizeof(*mq->table) * mq->nr_buckets, GFP_KERNEL);
7ca6353
+	mq->table = vzalloc(sizeof(*mq->table) * mq->nr_buckets);
7ca6353
 	if (!mq->table)
7ca6353
 		goto bad_alloc_table;
7ca6353
 
7ca6353
@@ -1200,7 +1200,7 @@ static struct dm_cache_policy *mq_create(dm_cblock_t cache_size,
7ca6353
 	return &mq->policy;
7ca6353
 
7ca6353
 bad_alloc_bitset:
7ca6353
-	kfree(mq->table);
7ca6353
+	vfree(mq->table);
7ca6353
 bad_alloc_table:
7ca6353
 	free_entries(mq);
7ca6353
 bad_cache_alloc: