[CRIU] [PATCH] sysctl: Use open_proc()
Andrei Vagin
avagin at virtuozzo.com
Fri Apr 21 16:30:45 PDT 2017
Accepted, thanks!
On Fri, Apr 14, 2017 at 07:56:40PM +0300, Pavel Emelyanov wrote:
> Many of sysctl_op-s we have read (or write) single entry.
> In current implementaiton this results in two opens and
> two closes for each -- open /proc/sys, then open the rest.
>
> It's better to use open_proc() as the latter already have
> fd for /proc cached.
>
> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> ---
> criu/sysctl.c | 17 ++++-------------
> 1 file changed, 4 insertions(+), 13 deletions(-)
>
> diff --git a/criu/sysctl.c b/criu/sysctl.c
> index 1f3c9af..76349e0 100644
> --- a/criu/sysctl.c
> +++ b/criu/sysctl.c
> @@ -351,23 +351,15 @@ out:
>
> static int __nonuserns_sysctl_op(struct sysctl_req *req, size_t nr_req, int op)
> {
> - int dir, ret, exit_code = -1;;
> -
> - dir = open("/proc/sys", O_RDONLY, O_DIRECTORY);
> - if (dir < 0) {
> - pr_perror("Can't open sysctl dir");
> - return -1;
> - }
> + int ret, exit_code = -1;;
>
> while (nr_req--) {
> - int fd, flags;
> + int fd;
>
> if (op == CTL_READ)
> - flags = O_RDONLY;
> + fd = open_proc(PROC_GEN, "sys/%s", req->name);
> else
> - flags = O_WRONLY;
> -
> - fd = openat(dir, req->name, flags);
> + fd = open_proc_rw(PROC_GEN, "sys/%s", req->name);
> if (fd < 0) {
> if (errno == ENOENT && (req->flags & CTL_FLAGS_OPTIONAL)) {
> req++;
> @@ -394,7 +386,6 @@ static int __nonuserns_sysctl_op(struct sysctl_req *req, size_t nr_req, int op)
>
> exit_code = 0;
> out:
> - close(dir);
> return exit_code;
> }
>
> --
> 2.5.5
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list