]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/nvdimm/btt.c
Merge remote-tracking branch 'mkp-scsi/4.7/scsi-fixes' into fixes
[karo-tx-linux.git] / drivers / nvdimm / btt.c
index f068b6513cd286659b1e468e726c45d868a05b7b..68a7c3c1eed9115bb23a7c0501c2134b4c238e39 100644 (file)
@@ -1306,7 +1306,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 +1321,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 +1337,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 +1373,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 +1383,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 +1405,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);