]> Git Repo - linux.git/commitdiff
Merge tag 'rslib-v4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
authorLinus Torvalds <[email protected]>
Tue, 5 Jun 2018 17:48:05 +0000 (10:48 -0700)
committerLinus Torvalds <[email protected]>
Tue, 5 Jun 2018 17:48:05 +0000 (10:48 -0700)
Pull reed-salomon library updates from Kees Cook:
 "Refactors rslib and callers to provide a per-instance allocation area
  instead of performing VLAs on the stack"

* tag 'rslib-v4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  rslib: Allocate decoder buffers to avoid VLAs
  mtd: rawnand: diskonchip: Allocate rs control per instance
  rslib: Split rs control struct
  rslib: Simplify error path
  rslib: Remove GPL boilerplate
  rslib: Add SPDX identifiers
  rslib: Cleanup top level comments
  rslib: Cleanup whitespace damage
  dm/verity_fec: Use GFP aware reed solomon init
  rslib: Add GFP aware init function

1  2 
drivers/md/dm-verity-fec.c

index 86405869f1aff4b51f77ca00c5411e049bdeebb6,375453ef6f26daf883892615107f61a982d9ec3d..684af08d07478cb4652ad6642fc99d9bc3be189f
@@@ -309,13 -309,13 +309,13 @@@ static int fec_alloc_bufs(struct dm_ver
        unsigned n;
  
        if (!fio->rs)
 -              fio->rs = mempool_alloc(v->fec->rs_pool, GFP_NOIO);
 +              fio->rs = mempool_alloc(&v->fec->rs_pool, GFP_NOIO);
  
        fec_for_each_prealloc_buffer(n) {
                if (fio->bufs[n])
                        continue;
  
 -              fio->bufs[n] = mempool_alloc(v->fec->prealloc_pool, GFP_NOWAIT);
 +              fio->bufs[n] = mempool_alloc(&v->fec->prealloc_pool, GFP_NOWAIT);
                if (unlikely(!fio->bufs[n])) {
                        DMERR("failed to allocate FEC buffer");
                        return -ENOMEM;
                if (fio->bufs[n])
                        continue;
  
 -              fio->bufs[n] = mempool_alloc(v->fec->extra_pool, GFP_NOWAIT);
 +              fio->bufs[n] = mempool_alloc(&v->fec->extra_pool, GFP_NOWAIT);
                /* we can manage with even one buffer if necessary */
                if (unlikely(!fio->bufs[n]))
                        break;
        fio->nbufs = n;
  
        if (!fio->output)
 -              fio->output = mempool_alloc(v->fec->output_pool, GFP_NOIO);
 +              fio->output = mempool_alloc(&v->fec->output_pool, GFP_NOIO);
  
        return 0;
  }
@@@ -493,15 -493,15 +493,15 @@@ void verity_fec_finish_io(struct dm_ver
        if (!verity_fec_is_enabled(io->v))
                return;
  
 -      mempool_free(fio->rs, f->rs_pool);
 +      mempool_free(fio->rs, &f->rs_pool);
  
        fec_for_each_prealloc_buffer(n)
 -              mempool_free(fio->bufs[n], f->prealloc_pool);
 +              mempool_free(fio->bufs[n], &f->prealloc_pool);
  
        fec_for_each_extra_buffer(fio, n)
 -              mempool_free(fio->bufs[n], f->extra_pool);
 +              mempool_free(fio->bufs[n], &f->extra_pool);
  
 -      mempool_free(fio->output, f->output_pool);
 +      mempool_free(fio->output, &f->output_pool);
  }
  
  /*
@@@ -549,9 -549,9 +549,9 @@@ void verity_fec_dtr(struct dm_verity *v
        if (!verity_fec_is_enabled(v))
                goto out;
  
 -      mempool_destroy(f->rs_pool);
 -      mempool_destroy(f->prealloc_pool);
 -      mempool_destroy(f->extra_pool);
 +      mempool_exit(&f->rs_pool);
 +      mempool_exit(&f->prealloc_pool);
 +      mempool_exit(&f->extra_pool);
        kmem_cache_destroy(f->cache);
  
        if (f->data_bufio)
@@@ -570,7 -570,7 +570,7 @@@ static void *fec_rs_alloc(gfp_t gfp_mas
  {
        struct dm_verity *v = (struct dm_verity *)pool_data;
  
-       return init_rs(8, 0x11d, 0, 1, v->fec->roots);
+       return init_rs_gfp(8, 0x11d, 0, 1, v->fec->roots, gfp_mask);
  }
  
  static void fec_rs_free(void *element, void *pool_data)
@@@ -675,7 -675,6 +675,7 @@@ int verity_fec_ctr(struct dm_verity *v
        struct dm_verity_fec *f = v->fec;
        struct dm_target *ti = v->ti;
        u64 hash_blocks;
 +      int ret;
  
        if (!verity_fec_is_enabled(v)) {
                verity_fec_dtr(v);
        }
  
        /* Preallocate an rs_control structure for each worker thread */
 -      f->rs_pool = mempool_create(num_online_cpus(), fec_rs_alloc,
 -                                  fec_rs_free, (void *) v);
 -      if (!f->rs_pool) {
 +      ret = mempool_init(&f->rs_pool, num_online_cpus(), fec_rs_alloc,
 +                         fec_rs_free, (void *) v);
 +      if (ret) {
                ti->error = "Cannot allocate RS pool";
 -              return -ENOMEM;
 +              return ret;
        }
  
        f->cache = kmem_cache_create("dm_verity_fec_buffers",
        }
  
        /* Preallocate DM_VERITY_FEC_BUF_PREALLOC buffers for each thread */
 -      f->prealloc_pool = mempool_create_slab_pool(num_online_cpus() *
 -                                                  DM_VERITY_FEC_BUF_PREALLOC,
 -                                                  f->cache);
 -      if (!f->prealloc_pool) {
 +      ret = mempool_init_slab_pool(&f->prealloc_pool, num_online_cpus() *
 +                                   DM_VERITY_FEC_BUF_PREALLOC,
 +                                   f->cache);
 +      if (ret) {
                ti->error = "Cannot allocate FEC buffer prealloc pool";
 -              return -ENOMEM;
 +              return ret;
        }
  
 -      f->extra_pool = mempool_create_slab_pool(0, f->cache);
 -      if (!f->extra_pool) {
 +      ret = mempool_init_slab_pool(&f->extra_pool, 0, f->cache);
 +      if (ret) {
                ti->error = "Cannot allocate FEC buffer extra pool";
 -              return -ENOMEM;
 +              return ret;
        }
  
        /* Preallocate an output buffer for each thread */
 -      f->output_pool = mempool_create_kmalloc_pool(num_online_cpus(),
 -                                                   1 << v->data_dev_block_bits);
 -      if (!f->output_pool) {
 +      ret = mempool_init_kmalloc_pool(&f->output_pool, num_online_cpus(),
 +                                      1 << v->data_dev_block_bits);
 +      if (ret) {
                ti->error = "Cannot allocate FEC output pool";
 -              return -ENOMEM;
 +              return ret;
        }
  
        /* Reserve space for our per-bio data */
This page took 0.082852 seconds and 4 git commands to generate.