[lvm-devel] dev-mornfall-lvmcache - clmvd: fix responce status
Petr Rockai
mornfall at fedoraproject.org
Wed Jun 5 12:01:10 UTC 2013
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c9d8d22224f5516f364bd66ce41aa506a39801a6
Commit: c9d8d22224f5516f364bd66ce41aa506a39801a6
Parent: 764195207d4773cf6f1674a2fb16e9a0acda304a
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Fri Apr 19 21:11:32 2013 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Sun Apr 21 22:54:42 2013 +0200
clmvd: fix responce status
Failing status code is expected to be 0.
Also do not return '*response' as pointer which has been already free().
---
WHATS_NEW | 1 +
daemons/clvmd/refresh_clvmd.c | 15 ++++++---------
lib/locking/cluster_locking.c | 10 ++++------
3 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 76347e9..95b6e13 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.99 -
===================================
+ Fix clvmd _cluster_request() return code in memory fail path.
Add writemostly/writebehind support for RAID1
Add lv_change_activate() for common activation code in vg/lvchange.
Revert change that allowed identical table reload for RAID.
diff --git a/daemons/clvmd/refresh_clvmd.c b/daemons/clvmd/refresh_clvmd.c
index 28b5625..42c3958 100644
--- a/daemons/clvmd/refresh_clvmd.c
+++ b/daemons/clvmd/refresh_clvmd.c
@@ -225,16 +225,14 @@ static int _cluster_request(char cmd, const char *node, void *data, int len,
* With an extra pair of INTs on the front to sanity
* check the pointer when we are given it back to free
*/
- *response = dm_malloc(sizeof(lvm_response_t) * num_responses +
- sizeof(int) * 2);
- if (!*response) {
+ *response = NULL;
+ if (!(rarray = dm_malloc(sizeof(lvm_response_t) * num_responses +
+ sizeof(int) * 2))) {
errno = ENOMEM;
status = 0;
goto out;
}
- rarray = *response;
-
/* Unpack the response into an lvm_response_t array */
inptr = head->args;
i = 0;
@@ -251,9 +249,9 @@ static int _cluster_request(char cmd, const char *node, void *data, int len,
int j;
for (j = 0; j < i; j++)
dm_free(rarray[i].response);
- free(*response);
+ dm_free(rarray);
errno = ENOMEM;
- status = -1;
+ status = 0;
goto out;
}
@@ -266,8 +264,7 @@ static int _cluster_request(char cmd, const char *node, void *data, int len,
*response = rarray;
out:
- if (retbuf)
- dm_free(retbuf);
+ dm_free(retbuf);
return status;
}
diff --git a/lib/locking/cluster_locking.c b/lib/locking/cluster_locking.c
index 01a47b0..3169f0d 100644
--- a/lib/locking/cluster_locking.c
+++ b/lib/locking/cluster_locking.c
@@ -241,15 +241,13 @@ static int _cluster_request(char clvmd_cmd, const char *node, void *data, int le
* With an extra pair of INTs on the front to sanity
* check the pointer when we are given it back to free
*/
- *response = dm_malloc(sizeof(lvm_response_t) * num_responses);
- if (!*response) {
+ *response = NULL;
+ if (!(rarray = dm_malloc(sizeof(lvm_response_t) * num_responses))) {
errno = ENOMEM;
status = 0;
goto out;
}
- rarray = *response;
-
/* Unpack the response into an lvm_response_t array */
inptr = head->args;
i = 0;
@@ -266,9 +264,9 @@ static int _cluster_request(char clvmd_cmd, const char *node, void *data, int le
int j;
for (j = 0; j < i; j++)
dm_free(rarray[i].response);
- free(*response);
+ dm_free(rarray);
errno = ENOMEM;
- status = -1;
+ status = 0;
goto out;
}
More information about the lvm-devel
mailing list