summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuoqing Jiang <gqjiang@suse.com>2016-01-20 16:21:25 +0800
committerNeilBrown <neilb@suse.com>2016-01-27 11:43:02 +1100
commit32539f74d2d51d72b57f2314943ea8e0df6dab41 (patch)
tree7042cc637f9f3b54e3614c6e592dedf85882be1a
parent50d72ed4298618c679efd43647dd055527e59b10 (diff)
downloadmdadm-32539f74d2d51d72b57f2314943ea8e0df6dab41.tar.gz
util: fix wrong return value of cluster_get_dlmlock
Actually lksb.sb_status means that a node got the lock or not instead of the return value of dlm_lock. Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
-rw-r--r--util.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/util.c b/util.c
index f1b0b95..cf9572b 100644
--- a/util.c
+++ b/util.c
@@ -142,7 +142,7 @@ int cluster_get_dlmlock(int *lockid)
dlm_lock_res->ls = dlm_hooks->create_lockspace(cluster_name, O_RDWR);
if (!dlm_lock_res->ls) {
pr_err("%s failed to create lockspace\n", cluster_name);
- goto out;
+ return -ENOMEM;
}
/* Conversions need the lockid in the LKSB */
@@ -157,21 +157,15 @@ int cluster_get_dlmlock(int *lockid)
dlm_lock_res, NULL, NULL);
if (ret) {
pr_err("error %d when get PW mode on lock %s\n", errno, str);
- goto out;
+ dlm_hooks->release_lockspace(cluster_name, dlm_lock_res->ls, 1);
+ return ret;
}
/* Wait for it to complete */
poll_for_ast(dlm_lock_res->ls);
*lockid = dlm_lock_res->lksb.sb_lkid;
- errno = dlm_lock_res->lksb.sb_status;
- if (errno) {
- pr_err("error %d happened in ast with lock %s\n", errno, str);
- goto out;
- }
-
-out:
- return ret;
+ return dlm_lock_res->lksb.sb_status;
}
int cluster_release_dlmlock(int lockid)