The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxcfs/pull/351

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From b7604bf9ac90e9f19095c346ea317dfcffa5b7d1 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Thu, 5 Mar 2020 12:06:35 +0100
Subject: [PATCH] proc_loadavg: cleanup

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/proc_loadavg.c | 109 ++++++++++++++++++++++++---------------------
 1 file changed, 58 insertions(+), 51 deletions(-)

diff --git a/src/proc_loadavg.c b/src/proc_loadavg.c
index 6ca5d06..83c4649 100644
--- a/src/proc_loadavg.c
+++ b/src/proc_loadavg.c
@@ -148,6 +148,7 @@ int calc_hash(const char *name)
 {
        unsigned int hash = 0;
        unsigned int x = 0;
+
        /* ELFHash algorithm. */
        while (*name) {
                hash = (hash << 4) + *name++;
@@ -156,21 +157,22 @@ int calc_hash(const char *name)
                        hash ^= (x >> 24);
                hash &= ~x;
        }
+
        return (hash & 0x7fffffff);
 }
 
 int proc_loadavg_read(char *buf, size_t size, off_t offset,
                      struct fuse_file_info *fi)
 {
+       __do_free char *cg = NULL;
        struct fuse_context *fc = fuse_get_context();
        struct file_info *d = INTTYPE_TO_PTR(fi->fh);
        pid_t initpid;
-       char *cg;
        size_t total_len = 0;
        char *cache = d->buf;
        struct load_node *n;
        int hash;
-       int cfd, rv = 0;
+       int cfd;
        unsigned long a, b, c;
 
        if (offset) {
@@ -212,9 +214,9 @@ int proc_loadavg_read(char *buf, size_t size, off_t offset,
                         * because delete is not allowed before read has ended.
                         */
                        pthread_rwlock_unlock(&load_hash[hash].rdlock);
-                       rv = 0;
-                       goto err;
+                       return 0;
                }
+
                do {
                        n = malloc(sizeof(struct load_node));
                } while (!n);
@@ -222,6 +224,7 @@ int proc_loadavg_read(char *buf, size_t size, off_t offset,
                do {
                        n->cg = malloc(strlen(cg)+1);
                } while (!n->cg);
+
                strcpy(n->cg, cg);
                n->avenrun[0] = 0;
                n->avenrun[1] = 0;
@@ -235,28 +238,34 @@ int proc_loadavg_read(char *buf, size_t size, off_t 
offset,
        a = n->avenrun[0] + (FIXED_1/200);
        b = n->avenrun[1] + (FIXED_1/200);
        c = n->avenrun[2] + (FIXED_1/200);
-       total_len = snprintf(d->buf, d->buflen, "%lu.%02lu %lu.%02lu %lu.%02lu 
%d/%d %d\n",
-               LOAD_INT(a), LOAD_FRAC(a),
-               LOAD_INT(b), LOAD_FRAC(b),
-               LOAD_INT(c), LOAD_FRAC(c),
-               n->run_pid, n->total_pid, n->last_pid);
+       total_len = snprintf(d->buf, d->buflen,
+                            "%lu.%02lu "
+                            "%lu.%02lu "
+                            "%lu.%02lu "
+                            "%d/"
+                            "%d"
+                            "%d\n",
+                            LOAD_INT(a),
+                            LOAD_FRAC(a),
+                            LOAD_INT(b),
+                            LOAD_FRAC(b),
+                            LOAD_INT(c),
+                            LOAD_FRAC(c),
+                            n->run_pid,
+                            n->total_pid,
+                            n->last_pid);
        pthread_rwlock_unlock(&load_hash[hash].rdlock);
-       if (total_len < 0 || total_len >=  d->buflen) {
-               lxcfs_error("%s\n", "Failed to write to cache");
-               rv = 0;
-               goto err;
-       }
+       if (total_len < 0 || total_len >= d->buflen)
+               return log_error(0, "Failed to write to cache");
+
        d->size = (int)total_len;
        d->cached = 1;
 
        if (total_len > size)
                total_len = size;
-       memcpy(buf, d->buf, total_len);
-       rv = total_len;
 
-err:
-       free(cg);
-       return rv;
+       memcpy(buf, d->buf, total_len);
+       return total_len;
 }
 
 /*
@@ -398,28 +407,27 @@ static int refresh_load(struct load_node *p, char *path)
                idbuf[i][length] = '\0';
                ret = snprintf(proc_path, 256, "/proc/%s/task", idbuf[i]);
                if (ret < 0 || ret > 255) {
-                       lxcfs_error("%s\n",
-                                   "snprintf() failed in refresh_load.");
                        i = sum;
                        sum = -1;
-                       goto err_out;
+                       log_error(goto err_out, "snprintf() failed in 
refresh_load");
                }
 
                dp = opendir(proc_path);
-               if (!dp) {
-                       lxcfs_error("%s\n",
-                                   "Open proc_path failed in refresh_load.");
-                       continue;
-               }
+               if (!dp)
+                       log_error(continue, "Open proc_path failed in 
refresh_load");
+
                while ((file = readdir(dp)) != NULL) {
                        __do_free void *fopen_cache = NULL;
                        __do_fclose FILE *f = NULL;
 
                        if (strncmp(file->d_name, ".", 1) == 0)
                                continue;
+
                        if (strncmp(file->d_name, "..", 1) == 0)
                                continue;
+
                        total_pid++;
+
                        /* We make the biggest pid become last_pid.*/
                        ret = atof(file->d_name);
                        last_pid = (ret > last_pid) ? ret : last_pid;
@@ -427,10 +435,9 @@ static int refresh_load(struct load_node *p, char *path)
                        ret = snprintf(proc_path, 256, 
"/proc/%s/task/%s/status",
                                       idbuf[i], file->d_name);
                        if (ret < 0 || ret > 255) {
-                               lxcfs_error("%s\n", "snprintf() failed in 
refresh_load.");
                                i = sum;
                                sum = -1;
-                               goto err_out;
+                               log_error(goto err_out, "snprintf() failed in 
refresh_load");
                        }
 
                        f = fopen_cached(proc_path, "re", &fopen_cache);
@@ -456,7 +463,7 @@ static int refresh_load(struct load_node *p, char *path)
 
 err_out:
        for (; i > 0; i--)
-               free(idbuf[i-1]);
+               free(idbuf[i - 1]);
 out:
        free(idbuf);
        return sum;
@@ -515,11 +522,9 @@ static void *load_begin(void *arg)
                                        goto out;
 
                                ret = snprintf(path, length, "%s%s", 
dot_or_empty(f->cg), f->cg);
-                               if (ret < 0 || ret > length - 1) {
-                                       /* snprintf failed, ignore the node.*/
-                                       lxcfs_error("Refresh node %s failed for 
snprintf().\n", f->cg);
-                                       goto out;
-                               }
+                               /* Ignore the node if snprintf fails.*/
+                               if (ret < 0 || ret > length - 1)
+                                       log_error(goto out, "Refresh node %s 
failed for snprintf()", f->cg);
 
                                sum = refresh_load(f, path);
                                if (sum == 0)
@@ -554,22 +559,26 @@ static int init_load(void)
        for (i = 0; i < LOAD_SIZE; i++) {
                load_hash[i].next = NULL;
                ret = pthread_mutex_init(&load_hash[i].lock, NULL);
-               if (ret != 0) {
-                       lxcfs_error("%s\n", "Failed to initialize lock");
+               if (ret) {
+                       lxcfs_error("Failed to initialize lock");
                        goto out3;
                }
+
                ret = pthread_rwlock_init(&load_hash[i].rdlock, NULL);
-               if (ret != 0) {
-                       lxcfs_error("%s\n", "Failed to initialize rdlock");
+               if (ret) {
+                       lxcfs_error("Failed to initialize rdlock");
                        goto out2;
                }
+
                ret = pthread_rwlock_init(&load_hash[i].rilock, NULL);
-               if (ret != 0) {
-                       lxcfs_error("%s\n", "Failed to initialize rilock");
+               if (ret) {
+                       lxcfs_error("Failed to initialize rilock");
                        goto out1;
                }
        }
+
        return 0;
+
 out1:
        pthread_rwlock_destroy(&load_hash[i].rdlock);
 out2:
@@ -581,6 +590,7 @@ static int init_load(void)
                pthread_rwlock_destroy(&load_hash[i].rdlock);
                pthread_rwlock_destroy(&load_hash[i].rilock);
        }
+
        return -1;
 }
 
@@ -625,16 +635,15 @@ pthread_t load_daemon(int load_use)
        pthread_t pid;
 
        ret = init_load();
-       if (ret == -1) {
-               lxcfs_error("%s\n", "Initialize hash_table fails in 
load_daemon!");
-               return 0;
-       }
+       if (ret == -1)
+               return log_error(0, "Initialize hash_table fails in 
load_daemon!");
+
        ret = pthread_create(&pid, NULL, load_begin, NULL);
        if (ret != 0) {
-               lxcfs_error("%s\n", "Create pthread fails in load_daemon!");
                load_free();
-               return 0;
+               return log_error(0, "Create pthread fails in load_daemon!");
        }
+
        /* use loadavg, here loadavg = 1*/
        loadavg = load_use;
        return pid;
@@ -649,10 +658,8 @@ int stop_load_daemon(pthread_t pid)
        loadavg_stop = 1;
 
        s = pthread_join(pid, NULL); /* Make sure sub thread has been canceled. 
*/
-       if (s != 0) {
-               lxcfs_error("%s\n", "stop_load_daemon error: failed to join");
-               return -1;
-       }
+       if (s)
+               return log_error(-1, "stop_load_daemon error: failed to join");
 
        load_free();
        loadavg_stop = 0;
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to