fsckd: fix error handling when sending cancel request to fsck client

This commit is contained in:
Lennart Poettering 2015-03-09 18:29:08 +01:00
parent 705778ad6a
commit d2268a20a0

View file

@ -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;
}