Merge branches 'ib-mfd-4.19', 'ib-mfd-gpio-pinctrl-4.19', 'ib-mfd-i915-media-platform...
[linux-2.6-microblaze.git] / drivers / md / dm-integrity.c
index 77d9fe5..86438b2 100644 (file)
@@ -142,7 +142,7 @@ struct dm_integrity_c {
        unsigned tag_size;
        __s8 log2_tag_size;
        sector_t start;
-       mempool_t *journal_io_mempool;
+       mempool_t journal_io_mempool;
        struct dm_io_client *io;
        struct dm_bufio_client *bufio;
        struct workqueue_struct *metadata_wq;
@@ -1817,7 +1817,7 @@ static void complete_copy_from_journal(unsigned long error, void *context)
        struct journal_completion *comp = io->comp;
        struct dm_integrity_c *ic = comp->ic;
        remove_range(ic, &io->range);
-       mempool_free(io, ic->journal_io_mempool);
+       mempool_free(io, &ic->journal_io_mempool);
        if (unlikely(error != 0))
                dm_integrity_io_error(ic, "copying from journal", -EIO);
        complete_journal_op(comp);
@@ -1886,7 +1886,7 @@ static void do_journal_write(struct dm_integrity_c *ic, unsigned write_start,
                        }
                        next_loop = k - 1;
 
-                       io = mempool_alloc(ic->journal_io_mempool, GFP_NOIO);
+                       io = mempool_alloc(&ic->journal_io_mempool, GFP_NOIO);
                        io->comp = ∁
                        io->range.logical_sector = sec;
                        io->range.n_sectors = (k - j) << ic->sb->log2_sectors_per_block;
@@ -1918,7 +1918,7 @@ static void do_journal_write(struct dm_integrity_c *ic, unsigned write_start,
                                if (j == k) {
                                        remove_range_unlocked(ic, &io->range);
                                        spin_unlock_irq(&ic->endio_wait.lock);
-                                       mempool_free(io, ic->journal_io_mempool);
+                                       mempool_free(io, &ic->journal_io_mempool);
                                        goto skip_io;
                                }
                                for (l = j; l < k; l++) {
@@ -2440,7 +2440,7 @@ static void dm_integrity_free_journal_scatterlist(struct dm_integrity_c *ic, str
        unsigned i;
        for (i = 0; i < ic->journal_sections; i++)
                kvfree(sl[i]);
-       kfree(sl);
+       kvfree(sl);
 }
 
 static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_integrity_c *ic, struct page_list *pl)
@@ -2448,7 +2448,9 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
        struct scatterlist **sl;
        unsigned i;
 
-       sl = kvmalloc(ic->journal_sections * sizeof(struct scatterlist *), GFP_KERNEL | __GFP_ZERO);
+       sl = kvmalloc_array(ic->journal_sections,
+                           sizeof(struct scatterlist *),
+                           GFP_KERNEL | __GFP_ZERO);
        if (!sl)
                return NULL;
 
@@ -2464,7 +2466,8 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
 
                n_pages = (end_index - start_index + 1);
 
-               s = kvmalloc(n_pages * sizeof(struct scatterlist), GFP_KERNEL);
+               s = kvmalloc_array(n_pages, sizeof(struct scatterlist),
+                                  GFP_KERNEL);
                if (!s) {
                        dm_integrity_free_journal_scatterlist(ic, sl);
                        return NULL;
@@ -2643,7 +2646,9 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
                                goto bad;
                        }
 
-                       sg = kvmalloc((ic->journal_pages + 1) * sizeof(struct scatterlist), GFP_KERNEL);
+                       sg = kvmalloc_array(ic->journal_pages + 1,
+                                           sizeof(struct scatterlist),
+                                           GFP_KERNEL);
                        if (!sg) {
                                *error = "Unable to allocate sg list";
                                r = -ENOMEM;
@@ -2709,7 +2714,9 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
                                r = -ENOMEM;
                                goto bad;
                        }
-                       ic->sk_requests = kvmalloc(ic->journal_sections * sizeof(struct skcipher_request *), GFP_KERNEL | __GFP_ZERO);
+                       ic->sk_requests = kvmalloc_array(ic->journal_sections,
+                                                        sizeof(struct skcipher_request *),
+                                                        GFP_KERNEL | __GFP_ZERO);
                        if (!ic->sk_requests) {
                                *error = "Unable to allocate sk requests";
                                r = -ENOMEM;
@@ -2743,7 +2750,8 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
                                        r = -ENOMEM;
                                        goto bad;
                                }
-                               section_req->iv = kmalloc(ivsize * 2, GFP_KERNEL);
+                               section_req->iv = kmalloc_array(ivsize, 2,
+                                                               GFP_KERNEL);
                                if (!section_req->iv) {
                                        skcipher_request_free(section_req);
                                        *error = "Unable to allocate iv";
@@ -2980,9 +2988,8 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
                goto bad;
        }
 
-       ic->journal_io_mempool = mempool_create_slab_pool(JOURNAL_IO_MEMPOOL, journal_io_cache);
-       if (!ic->journal_io_mempool) {
-               r = -ENOMEM;
+       r = mempool_init_slab_pool(&ic->journal_io_mempool, JOURNAL_IO_MEMPOOL, journal_io_cache);
+       if (r) {
                ti->error = "Cannot allocate mempool";
                goto bad;
        }
@@ -3196,7 +3203,7 @@ static void dm_integrity_dtr(struct dm_target *ti)
                destroy_workqueue(ic->writer_wq);
        if (ic->bufio)
                dm_bufio_client_destroy(ic->bufio);
-       mempool_destroy(ic->journal_io_mempool);
+       mempool_exit(&ic->journal_io_mempool);
        if (ic->io)
                dm_io_client_destroy(ic->io);
        if (ic->dev)