diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-03-09 18:29:08 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-03-09 18:29:08 +0100 |
commit | d2268a20a0bf99c5d26bee9048aa48b377c72949 (patch) | |
tree | 72052a528fffa8a904c7368f74d905fa1b0070af /src | |
parent | 705778ad6a0d1fd62bdb81fad0074199a3e25666 (diff) |
fsckd: fix error handling when sending cancel request to fsck client
Diffstat (limited to 'src')
-rw-r--r-- | src/fsckd/fsckd.c | 23 |
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; } |