imsm: trim some memory wastage
drop the previously loaded data as load_imsm_super_all loops through the disks. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
949c47a0fa
commit
9ca2c81c0f
|
@ -870,6 +870,8 @@ static int parse_raid_devices(struct intel_super *super)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __free_imsm(struct intel_super *super);
|
||||||
|
|
||||||
/* load_imsm_mpb - read matrix metadata
|
/* load_imsm_mpb - read matrix metadata
|
||||||
* allocates super->mpb to be freed by free_super
|
* allocates super->mpb to be freed by free_super
|
||||||
*/
|
*/
|
||||||
|
@ -916,6 +918,7 @@ static int load_imsm_mpb(int fd, struct intel_super *super, char *devname)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__free_imsm(super);
|
||||||
super->len = __le32_to_cpu(anchor->mpb_size);
|
super->len = __le32_to_cpu(anchor->mpb_size);
|
||||||
super->len = ROUND_UP(anchor->mpb_size, 512);
|
super->len = ROUND_UP(anchor->mpb_size, 512);
|
||||||
if (posix_memalign(&super->buf, 512, super->len) != 0) {
|
if (posix_memalign(&super->buf, 512, super->len) != 0) {
|
||||||
|
@ -991,19 +994,28 @@ static void free_imsm_disks(struct intel_super *super)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_imsm(struct intel_super *super)
|
/* free all the pieces hanging off of a super pointer */
|
||||||
|
static void __free_imsm(struct intel_super *super)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (super->buf)
|
if (super->buf) {
|
||||||
free(super->buf);
|
free(super->buf);
|
||||||
|
super->buf = NULL;
|
||||||
|
}
|
||||||
free_imsm_disks(super);
|
free_imsm_disks(super);
|
||||||
for (i = 0; i < IMSM_MAX_RAID_DEVS; i++)
|
for (i = 0; i < IMSM_MAX_RAID_DEVS; i++)
|
||||||
if (super->dev_tbl[i])
|
if (super->dev_tbl[i]) {
|
||||||
free(super->dev_tbl[i]);
|
free(super->dev_tbl[i]);
|
||||||
free(super);
|
super->dev_tbl[i] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void free_imsm(struct intel_super *super)
|
||||||
|
{
|
||||||
|
__free_imsm(super);
|
||||||
|
free(super);
|
||||||
|
}
|
||||||
|
|
||||||
static void free_super_imsm(struct supertype *st)
|
static void free_super_imsm(struct supertype *st)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue