libnvdimm: release ida resources
authorDan Williams <dan.j.williams@intel.com>
Wed, 18 May 2016 03:24:16 +0000 (20:24 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sat, 21 May 2016 05:02:56 +0000 (22:02 -0700)
ida instances allocate some internal memory for ->free_bitmap in
addition to the base 'struct ida'.  Use ida_destroy() to release that
memory at module_exit().

Reported-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/core.c
drivers/nvdimm/dimm_devs.c
drivers/nvdimm/nd-core.h
drivers/nvdimm/region_devs.c

index 182a93f..847532d 100644 (file)
@@ -648,6 +648,9 @@ static __exit void libnvdimm_exit(void)
        nd_region_exit();
        nvdimm_exit();
        nvdimm_bus_exit();
+       nd_region_devs_exit();
+       nvdimm_devs_exit();
+       ida_destroy(&nd_ida);
 }
 
 MODULE_LICENSE("GPL v2");
index c56f882..6cca03e 100644 (file)
@@ -546,3 +546,8 @@ int nvdimm_bus_check_dimm_count(struct nvdimm_bus *nvdimm_bus, int dimm_count)
        return 0;
 }
 EXPORT_SYMBOL_GPL(nvdimm_bus_check_dimm_count);
+
+void __exit nvdimm_devs_exit(void)
+{
+       ida_destroy(&dimm_ida);
+}
index cb65308..4136c1a 100644 (file)
@@ -49,6 +49,8 @@ bool is_nd_blk(struct device *dev);
 struct nvdimm_bus *walk_to_nvdimm_bus(struct device *nd_dev);
 int __init nvdimm_bus_init(void);
 void nvdimm_bus_exit(void);
+void nvdimm_devs_exit(void);
+void nd_region_devs_exit(void);
 void nd_region_probe_success(struct nvdimm_bus *nvdimm_bus, struct device *dev);
 struct nd_region;
 void nd_region_create_blk_seed(struct nd_region *nd_region);
index 9e1b054..40fcfea 100644 (file)
@@ -793,3 +793,8 @@ struct nd_region *nvdimm_volatile_region_create(struct nvdimm_bus *nvdimm_bus,
                        __func__);
 }
 EXPORT_SYMBOL_GPL(nvdimm_volatile_region_create);
+
+void __exit nd_region_devs_exit(void)
+{
+       ida_destroy(&region_ida);
+}