summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/cmirrord/functions.c13
-rw-r--r--daemons/cmirrord/local.c14
3 files changed, 20 insertions, 8 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 0158c6c6..10fd7243 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.97 -
===============================
+ Add tests for errors from closedir(), close() in cmirrord.
Fix missing sync of filesystem when creating thin volume snapshot.
Version 2.02.96 - 8th June 2012
diff --git a/daemons/cmirrord/functions.c b/daemons/cmirrord/functions.c
index 96f7b8eb..40b4bad7 100644
--- a/daemons/cmirrord/functions.c
+++ b/daemons/cmirrord/functions.c
@@ -337,14 +337,18 @@ static int find_disk_path(char *major_minor_str, char *path_rtn, int *unlink_pat
(major(statbuf.st_rdev) == major) &&
(minor(statbuf.st_rdev) == minor)) {
LOG_DBG(" %s: YES", dep->d_name);
- closedir(dp);
+ if (closedir(dp))
+ LOG_DBG("Unable to closedir /dev/mapper %s",
+ strerror(errno));
return 0;
} else {
LOG_DBG(" %s: NO", dep->d_name);
}
}
- closedir(dp);
+ if (closedir(dp))
+ LOG_DBG("Unable to closedir /dev/mapper %s",
+ strerror(errno));
/* FIXME Find out why this was here and deal with underlying problem. */
LOG_DBG("Path not found for %d/%d", major, minor);
@@ -640,8 +644,9 @@ static int clog_dtr(struct dm_ulog_request *rq)
LOG_DBG("[%s] Cluster log removed", SHORT_UUID(lc->uuid));
dm_list_del(&lc->list);
- if (lc->disk_fd != -1)
- close(lc->disk_fd);
+ if (lc->disk_fd != -1 && close(lc->disk_fd))
+ LOG_ERROR("Failed to close disk log: %s",
+ strerror(errno));
if (lc->disk_buffer)
free(lc->disk_buffer);
dm_free(lc->clean_bits);
diff --git a/daemons/cmirrord/local.c b/daemons/cmirrord/local.c
index 8601cfd2..50711a1a 100644
--- a/daemons/cmirrord/local.c
+++ b/daemons/cmirrord/local.c
@@ -27,7 +27,7 @@
#define CN_VAL_DM_USERSPACE_LOG 0x1
#endif
-static int cn_fd; /* Connector (netlink) socket fd */
+static int cn_fd = -1; /* Connector (netlink) socket fd */
static char recv_buf[2048];
static char send_buf[2048];
@@ -384,14 +384,18 @@ int init_local(void)
r = bind(cn_fd, (struct sockaddr *) &addr, sizeof(addr));
if (r < 0) {
- close(cn_fd);
+ if (close(cn_fd))
+ LOG_ERROR("Failed to close socket: %s",
+ strerror(errno));
return EXIT_KERNEL_BIND;
}
opt = addr.nl_groups;
r = setsockopt(cn_fd, 270, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt));
if (r) {
- close(cn_fd);
+ if (close(cn_fd))
+ LOG_ERROR("Failed to close socket: %s",
+ strerror(errno));
return EXIT_KERNEL_SETSOCKOPT;
}
@@ -412,5 +416,7 @@ int init_local(void)
void cleanup_local(void)
{
links_unregister(cn_fd);
- close(cn_fd);
+ if (cn_fd >= 0 && close(cn_fd))
+ LOG_ERROR("Failed to close socket: %s",
+ strerror(errno));
}