aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2016-01-22 18:54:42 -0500
committerShaohua Li <shli@fb.com>2016-01-24 21:13:18 -0500
commit4ac7a65f8070098187b1e2afa992848366aae079 (patch)
tree8849ccc28d50cde6f814b7280ac820a538fc30ec /drivers/md
parent6a84f57241e1fb9fb6772256f538d1073359a32d (diff)
md-cluster: fix missing memory free
There are several places we allocate dlm_lock_resource, but not free it. leave() need free a lock resource too (from Guoqing) Cc: Goldwyn Rodrigues <rgoldwyn@suse.com> Cc: Guoqing Jiang <gqjiang@suse.com> Cc: NeilBrown <neilb@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/md-cluster.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
index 0ded8e97751d..dd97d4245822 100644
--- a/drivers/md/md-cluster.c
+++ b/drivers/md/md-cluster.c
@@ -293,6 +293,7 @@ static void recover_bitmaps(struct md_thread *thread)
293dlm_unlock: 293dlm_unlock:
294 dlm_unlock_sync(bm_lockres); 294 dlm_unlock_sync(bm_lockres);
295clear_bit: 295clear_bit:
296 lockres_free(bm_lockres);
296 clear_bit(slot, &cinfo->recovery_map); 297 clear_bit(slot, &cinfo->recovery_map);
297 } 298 }
298} 299}
@@ -682,8 +683,10 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots)
682 bm_lockres = lockres_init(mddev, str, NULL, 1); 683 bm_lockres = lockres_init(mddev, str, NULL, 1);
683 if (!bm_lockres) 684 if (!bm_lockres)
684 return -ENOMEM; 685 return -ENOMEM;
685 if (i == (cinfo->slot_number - 1)) 686 if (i == (cinfo->slot_number - 1)) {
687 lockres_free(bm_lockres);
686 continue; 688 continue;
689 }
687 690
688 bm_lockres->flags |= DLM_LKF_NOQUEUE; 691 bm_lockres->flags |= DLM_LKF_NOQUEUE;
689 ret = dlm_lock_sync(bm_lockres, DLM_LOCK_PW); 692 ret = dlm_lock_sync(bm_lockres, DLM_LOCK_PW);
@@ -858,6 +861,7 @@ static int leave(struct mddev *mddev)
858 lockres_free(cinfo->token_lockres); 861 lockres_free(cinfo->token_lockres);
859 lockres_free(cinfo->ack_lockres); 862 lockres_free(cinfo->ack_lockres);
860 lockres_free(cinfo->no_new_dev_lockres); 863 lockres_free(cinfo->no_new_dev_lockres);
864 lockres_free(cinfo->resync_lockres);
861 lockres_free(cinfo->bitmap_lockres); 865 lockres_free(cinfo->bitmap_lockres);
862 unlock_all_bitmaps(mddev); 866 unlock_all_bitmaps(mddev);
863 dlm_release_lockspace(cinfo->lockspace, 2); 867 dlm_release_lockspace(cinfo->lockspace, 2);