Merge branch 'next-tpm' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6-microblaze.git] / drivers / md / dm.c
index 4ea404d..98dff36 100644 (file)
@@ -148,8 +148,8 @@ static int dm_numa_node = DM_NUMA_NODE;
  * For mempools pre-allocation at the table loading time.
  */
 struct dm_md_mempools {
-       struct bio_set *bs;
-       struct bio_set *io_bs;
+       struct bio_set bs;
+       struct bio_set io_bs;
 };
 
 struct table_device {
@@ -537,7 +537,7 @@ static struct dm_io *alloc_io(struct mapped_device *md, struct bio *bio)
        struct dm_target_io *tio;
        struct bio *clone;
 
-       clone = bio_alloc_bioset(GFP_NOIO, 0, md->io_bs);
+       clone = bio_alloc_bioset(GFP_NOIO, 0, &md->io_bs);
        if (!clone)
                return NULL;
 
@@ -572,7 +572,7 @@ static struct dm_target_io *alloc_tio(struct clone_info *ci, struct dm_target *t
                /* the dm_target_io embedded in ci->io is available */
                tio = &ci->io->tio;
        } else {
-               struct bio *clone = bio_alloc_bioset(gfp_mask, 0, ci->io->md->bs);
+               struct bio *clone = bio_alloc_bioset(gfp_mask, 0, &ci->io->md->bs);
                if (!clone)
                        return NULL;
 
@@ -1020,7 +1020,8 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len)
 EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
 
 static struct dm_target *dm_dax_get_live_target(struct mapped_device *md,
-               sector_t sector, int *srcu_idx)
+                                               sector_t sector, int *srcu_idx)
+       __acquires(md->io_barrier)
 {
        struct dm_table *map;
        struct dm_target *ti;
@@ -1037,7 +1038,7 @@ static struct dm_target *dm_dax_get_live_target(struct mapped_device *md,
 }
 
 static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
-               long nr_pages, void **kaddr, pfn_t *pfn)
+                                long nr_pages, void **kaddr, pfn_t *pfn)
 {
        struct mapped_device *md = dax_get_private(dax_dev);
        sector_t sector = pgoff * PAGE_SECTORS;
@@ -1065,7 +1066,7 @@ static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
 }
 
 static size_t dm_dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff,
-               void *addr, size_t bytes, struct iov_iter *i)
+                                   void *addr, size_t bytes, struct iov_iter *i)
 {
        struct mapped_device *md = dax_get_private(dax_dev);
        sector_t sector = pgoff * PAGE_SECTORS;
@@ -1582,7 +1583,7 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md,
                                 * won't be affected by this reassignment.
                                 */
                                struct bio *b = bio_clone_bioset(bio, GFP_NOIO,
-                                                                md->queue->bio_split);
+                                                                &md->queue->bio_split);
                                ci.io->orig_bio = b;
                                bio_advance(bio, (bio_sectors(bio) - ci.sector_count) << 9);
                                bio_chain(b, bio);
@@ -1784,10 +1785,8 @@ static void cleanup_mapped_device(struct mapped_device *md)
                destroy_workqueue(md->wq);
        if (md->kworker_task)
                kthread_stop(md->kworker_task);
-       if (md->bs)
-               bioset_free(md->bs);
-       if (md->io_bs)
-               bioset_free(md->io_bs);
+       bioset_exit(&md->bs);
+       bioset_exit(&md->io_bs);
 
        if (md->dax_dev) {
                kill_dax(md->dax_dev);
@@ -1964,16 +1963,10 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
                 * If so, reload bioset because front_pad may have changed
                 * because a different table was loaded.
                 */
-               if (md->bs) {
-                       bioset_free(md->bs);
-                       md->bs = NULL;
-               }
-               if (md->io_bs) {
-                       bioset_free(md->io_bs);
-                       md->io_bs = NULL;
-               }
+               bioset_exit(&md->bs);
+               bioset_exit(&md->io_bs);
 
-       } else if (md->bs) {
+       } else if (bioset_initialized(&md->bs)) {
                /*
                 * There's no need to reload with request-based dm
                 * because the size of front_pad doesn't change.
@@ -1985,12 +1978,14 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
                goto out;
        }
 
-       BUG_ON(!p || md->bs || md->io_bs);
+       BUG_ON(!p ||
+              bioset_initialized(&md->bs) ||
+              bioset_initialized(&md->io_bs));
 
        md->bs = p->bs;
-       p->bs = NULL;
+       memset(&p->bs, 0, sizeof(p->bs));
        md->io_bs = p->io_bs;
-       p->io_bs = NULL;
+       memset(&p->io_bs, 0, sizeof(p->io_bs));
 out:
        /* mempool bind completed, no longer need any mempools in the table */
        dm_table_free_md_mempools(t);
@@ -2904,6 +2899,7 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
        struct dm_md_mempools *pools = kzalloc_node(sizeof(*pools), GFP_KERNEL, md->numa_node_id);
        unsigned int pool_size = 0;
        unsigned int front_pad, io_front_pad;
+       int ret;
 
        if (!pools)
                return NULL;
@@ -2915,10 +2911,10 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
                pool_size = max(dm_get_reserved_bio_based_ios(), min_pool_size);
                front_pad = roundup(per_io_data_size, __alignof__(struct dm_target_io)) + offsetof(struct dm_target_io, clone);
                io_front_pad = roundup(front_pad,  __alignof__(struct dm_io)) + offsetof(struct dm_io, tio);
-               pools->io_bs = bioset_create(pool_size, io_front_pad, 0);
-               if (!pools->io_bs)
+               ret = bioset_init(&pools->io_bs, pool_size, io_front_pad, 0);
+               if (ret)
                        goto out;
-               if (integrity && bioset_integrity_create(pools->io_bs, pool_size))
+               if (integrity && bioset_integrity_create(&pools->io_bs, pool_size))
                        goto out;
                break;
        case DM_TYPE_REQUEST_BASED:
@@ -2931,11 +2927,11 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
                BUG();
        }
 
-       pools->bs = bioset_create(pool_size, front_pad, 0);
-       if (!pools->bs)
+       ret = bioset_init(&pools->bs, pool_size, front_pad, 0);
+       if (ret)
                goto out;
 
-       if (integrity && bioset_integrity_create(pools->bs, pool_size))
+       if (integrity && bioset_integrity_create(&pools->bs, pool_size))
                goto out;
 
        return pools;
@@ -2951,10 +2947,8 @@ void dm_free_md_mempools(struct dm_md_mempools *pools)
        if (!pools)
                return;
 
-       if (pools->bs)
-               bioset_free(pools->bs);
-       if (pools->io_bs)
-               bioset_free(pools->io_bs);
+       bioset_exit(&pools->bs);
+       bioset_exit(&pools->io_bs);
 
        kfree(pools);
 }