From 121e0b906f4ed43da2edc3f3b3129140da074c49 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Fri, 8 May 2015 15:43:39 +0300 Subject: [PATCH] sysctl: Make CTL_READ nonfatal Some entries might be missing and that should not cause CRIU to stop dumping when we know the entries are safe to unuse. Signed-off-by: Cyrill Gorcunov Signed-off-by: Pavel Emelyanov --- include/sysctl.h | 6 ++++++ net.c | 1 + sysctl.c | 2 ++ 3 files changed, 9 insertions(+) diff --git a/include/sysctl.h b/include/sysctl.h index 3d7b182e8..610fbf6d6 100644 --- a/include/sysctl.h +++ b/include/sysctl.h @@ -5,6 +5,7 @@ struct sysctl_req { char *name; void *arg; int type; + int flags; }; extern int sysctl_op(struct sysctl_req *req, size_t nr_req, int op); @@ -30,4 +31,9 @@ enum { #define CTL_LEN(t) ((t) >> CTL_SHIFT) #define CTL_TYPE(t) ((t) & ((1 << CTL_SHIFT) - 1)) +/* + * Some entries might be missing mark them as optional. + */ +#define CTL_FLAGS_OPTIONAL 1 + #endif /* __CR_SYSCTL_H__ */ diff --git a/net.c b/net.c index 034793029..5d531d4ad 100644 --- a/net.c +++ b/net.c @@ -104,6 +104,7 @@ static int ipv4_conf_op(char *tgt, int *conf, int op, NetnsEntry **netns) req[ri].name = path[i]; req[ri].arg = &conf[i]; req[ri].type = CTL_32; + req[ri].flags = 0; ri++; } diff --git a/sysctl.c b/sysctl.c index 5c3a01f25..b0591408f 100644 --- a/sysctl.c +++ b/sysctl.c @@ -137,6 +137,8 @@ static int __sysctl_op(int dir, struct sysctl_req *req, int op) fd = openat(dir, req->name, flags); if (fd < 0) { + if (errno == ENOENT && (req->flags & CTL_FLAGS_OPTIONAL)) + return 0; pr_perror("Can't open sysctl %s", req->name); return -1; }