Merge branch 'mailbox-for-next' of git://git.linaro.org/landing-teams/working/fujitsu...
[deliverable/linux.git] / drivers / nvdimm / btt.c
index f068b6513cd286659b1e468e726c45d868a05b7b..9dce03f420eb5f77e8dc625c018c35014591abe4 100644 (file)
@@ -1243,7 +1243,6 @@ static int btt_blk_init(struct btt *btt)
        }
 
        nvdimm_namespace_disk_name(ndns, btt->btt_disk->disk_name);
-       btt->btt_disk->driverfs_dev = &btt->nd_btt->dev;
        btt->btt_disk->first_minor = 0;
        btt->btt_disk->fops = &btt_fops;
        btt->btt_disk->private_data = btt;
@@ -1258,7 +1257,7 @@ static int btt_blk_init(struct btt *btt)
        btt->btt_queue->queuedata = btt;
 
        set_capacity(btt->btt_disk, 0);
-       add_disk(btt->btt_disk);
+       device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
        if (btt_meta_size(btt)) {
                int rc = nd_integrity_init(btt->btt_disk, btt_meta_size(btt));
 
@@ -1306,7 +1305,7 @@ static struct btt *btt_init(struct nd_btt *nd_btt, unsigned long long rawsize,
        struct btt *btt;
        struct device *dev = &nd_btt->dev;
 
-       btt = kzalloc(sizeof(struct btt), GFP_KERNEL);
+       btt = devm_kzalloc(dev, sizeof(struct btt), GFP_KERNEL);
        if (!btt)
                return NULL;
 
@@ -1321,13 +1320,13 @@ static struct btt *btt_init(struct nd_btt *nd_btt, unsigned long long rawsize,
        ret = discover_arenas(btt);
        if (ret) {
                dev_err(dev, "init: error in arena_discover: %d\n", ret);
-               goto out_free;
+               return NULL;
        }
 
        if (btt->init_state != INIT_READY && nd_region->ro) {
                dev_info(dev, "%s is read-only, unable to init btt metadata\n",
                                dev_name(&nd_region->dev));
-               goto out_free;
+               return NULL;
        } else if (btt->init_state != INIT_READY) {
                btt->num_arenas = (rawsize / ARENA_MAX_SIZE) +
                        ((rawsize % ARENA_MAX_SIZE) ? 1 : 0);
@@ -1337,29 +1336,25 @@ static struct btt *btt_init(struct nd_btt *nd_btt, unsigned long long rawsize,
                ret = create_arenas(btt);
                if (ret) {
                        dev_info(dev, "init: create_arenas: %d\n", ret);
-                       goto out_free;
+                       return NULL;
                }
 
                ret = btt_meta_init(btt);
                if (ret) {
                        dev_err(dev, "init: error in meta_init: %d\n", ret);
-                       goto out_free;
+                       return NULL;
                }
        }
 
        ret = btt_blk_init(btt);
        if (ret) {
                dev_err(dev, "init: error in blk_init: %d\n", ret);
-               goto out_free;
+               return NULL;
        }
 
        btt_debugfs_init(btt);
 
        return btt;
-
- out_free:
-       kfree(btt);
-       return NULL;
 }
 
 /**
@@ -1377,7 +1372,6 @@ static void btt_fini(struct btt *btt)
                btt_blk_cleanup(btt);
                free_arenas(btt);
                debugfs_remove_recursive(btt->debugfs_dir);
-               kfree(btt);
        }
 }
 
@@ -1388,11 +1382,15 @@ int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns)
        struct btt *btt;
        size_t rawsize;
 
-       if (!nd_btt->uuid || !nd_btt->ndns || !nd_btt->lbasize)
+       if (!nd_btt->uuid || !nd_btt->ndns || !nd_btt->lbasize) {
+               dev_dbg(&nd_btt->dev, "incomplete btt configuration\n");
                return -ENODEV;
+       }
 
        rawsize = nvdimm_namespace_capacity(ndns) - SZ_4K;
        if (rawsize < ARENA_MIN_SIZE) {
+               dev_dbg(&nd_btt->dev, "%s must be at least %ld bytes\n",
+                               dev_name(&ndns->dev), ARENA_MIN_SIZE + SZ_4K);
                return -ENXIO;
        }
        nd_region = to_nd_region(nd_btt->dev.parent);
@@ -1406,9 +1404,8 @@ int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns)
 }
 EXPORT_SYMBOL(nvdimm_namespace_attach_btt);
 
-int nvdimm_namespace_detach_btt(struct nd_namespace_common *ndns)
+int nvdimm_namespace_detach_btt(struct nd_btt *nd_btt)
 {
-       struct nd_btt *nd_btt = to_nd_btt(ndns->claim);
        struct btt *btt = nd_btt->btt;
 
        btt_fini(btt);
This page took 0.028564 seconds and 5 git commands to generate.