summaryrefslogtreecommitdiff
path: root/src/fsckd
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-03-09 18:29:08 +0100
committerLennart Poettering <lennart@poettering.net>2015-03-09 18:29:08 +0100
commitd2268a20a0bf99c5d26bee9048aa48b377c72949 (patch)
tree72052a528fffa8a904c7368f74d905fa1b0070af /src/fsckd
parent705778ad6a0d1fd62bdb81fad0074199a3e25666 (diff)
fsckd: fix error handling when sending cancel request to fsck client
Diffstat (limited to 'src/fsckd')
-rw-r--r--src/fsckd/fsckd.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/fsckd/fsckd.c b/src/fsckd/fsckd.c
index cf823322a1..4a61d80a18 100644
--- a/src/fsckd/fsckd.c
+++ b/src/fsckd/fsckd.c
@@ -34,16 +34,16 @@
#include <sys/un.h>
#include <unistd.h>
+#include "sd-daemon.h"
#include "build.h"
#include "def.h"
#include "event-util.h"
-#include "fsckd.h"
#include "log.h"
#include "list.h"
#include "macro.h"
-#include "sd-daemon.h"
#include "socket-util.h"
#include "util.h"
+#include "fsckd.h"
#define IDLE_TIME_SECONDS 30
#define PLYMOUTH_REQUEST_KEY "K\2\2\3"
@@ -102,16 +102,21 @@ static double compute_percent(int pass, size_t cur, size_t max) {
}
static int request_cancel_client(Client *current) {
- FsckdMessage cancel_msg;
+ FsckdMessage cancel_msg = {
+ .cancel = 1,
+ };
+
ssize_t n;
- cancel_msg.cancel = 1;
n = send(current->fd, &cancel_msg, sizeof(FsckdMessage), 0);
- if (n < 0 || (size_t) n < sizeof(FsckdMessage))
- return log_warning_errno(n, "Cannot send cancel to fsck on (%u, %u): %m",
- major(current->devnum), minor(current->devnum));
- else
- current->cancelled = true;
+ if (n < 0)
+ return log_warning_errno(errno, "Cannot send cancel to fsck on (%u:%u): %m", major(current->devnum), minor(current->devnum));
+ if ((size_t) n < sizeof(FsckdMessage)) {
+ log_warning("Short send when sending cancel to fsck on (%u:%u).", major(current->devnum), minor(current->devnum));
+ return -EIO;
+ }
+
+ current->cancelled = true;
return 0;
}