md-cluster: init completion within lockres_init
authorGuoqing Jiang <gqjiang@suse.com>
Fri, 10 Jul 2015 09:01:16 +0000 (17:01 +0800)
committerNeilBrown <neilb@suse.com>
Mon, 31 Aug 2015 17:41:50 +0000 (19:41 +0200)
We should init completion within lockres_init, otherwise
completion could be initialized more than one time during
it's life cycle.

Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: NeilBrown <neilb@suse.com>
drivers/md/md-cluster.c

index 85b7836fb4b5f2f8dd8a9f12d2d974a30f2806bb..2a57f193b103a06d71a628d442a449b54ea666e4 100644 (file)
@@ -100,7 +100,6 @@ static int dlm_lock_sync(struct dlm_lock_resource *res, int mode)
 {
        int ret = 0;
 
-       init_completion(&res->completion);
        ret = dlm_lock(res->ls, mode, &res->lksb,
                        res->flags, res->name, strlen(res->name),
                        0, sync_ast, res, res->bast);
@@ -125,6 +124,7 @@ static struct dlm_lock_resource *lockres_init(struct mddev *mddev,
        res = kzalloc(sizeof(struct dlm_lock_resource), GFP_KERNEL);
        if (!res)
                return NULL;
+       init_completion(&res->completion);
        res->ls = cinfo->lockspace;
        res->mddev = mddev;
        namelen = strlen(name);
@@ -169,7 +169,6 @@ static void lockres_free(struct dlm_lock_resource *res)
        if (!res)
                return;
 
-       init_completion(&res->completion);
        dlm_unlock(res->ls, res->lksb.sb_lkid, 0, &res->lksb, res);
        wait_for_completion(&res->completion);