Merge branch 'no-unittest-dep' of https://github.com/parallel-fs-utils/fio
[fio.git] / server.c
index 6f85810963e694129656a7640749cb52a0ed04a6..b966c66cbfe342d476b8054e2665932004ed41ba 100644 (file)
--- a/server.c
+++ b/server.c
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <sys/socket.h>
@@ -526,6 +526,9 @@ static struct sk_entry *fio_net_prep_cmd(uint16_t opcode, void *buf,
        struct sk_entry *entry;
 
        entry = smalloc(sizeof(*entry));
+       if (!entry)
+               return NULL;
+
        INIT_FLIST_HEAD(&entry->next);
        entry->opcode = opcode;
        if (flags & SK_F_COPY) {
@@ -614,7 +617,7 @@ static int fio_net_queue_quit(void)
 {
        dprint(FD_NET, "server: sending quit\n");
 
-       return fio_net_queue_cmd(FIO_NET_CMD_QUIT, NULL, 0, NULL, SK_F_SIMPLE | SK_F_INLINE);
+       return fio_net_queue_cmd(FIO_NET_CMD_QUIT, NULL, 0, NULL, SK_F_SIMPLE);
 }
 
 int fio_net_send_quit(int sk)
@@ -634,7 +637,7 @@ static int fio_net_send_ack(struct fio_net_cmd *cmd, int error, int signal)
 
        epdu.error = __cpu_to_le32(error);
        epdu.signal = __cpu_to_le32(signal);
-       return fio_net_queue_cmd(FIO_NET_CMD_STOP, &epdu, sizeof(epdu), &tag, SK_F_COPY | SK_F_INLINE);
+       return fio_net_queue_cmd(FIO_NET_CMD_STOP, &epdu, sizeof(epdu), &tag, SK_F_COPY);
 }
 
 static int fio_net_queue_stop(int error, int signal)
@@ -1196,7 +1199,6 @@ static int handle_connection(struct sk_out *sk_out)
                        .events = POLLIN,
                };
 
-               ret = 0;
                do {
                        int timeout = 1000;
 
@@ -1356,7 +1358,12 @@ static int accept_loop(int listen_sk)
 
                dprint(FD_NET, "server: connect from %s\n", from);
 
-               sk_out = smalloc(sizeof(*sk_out));
+               sk_out = scalloc(1, sizeof(*sk_out));
+               if (!sk_out) {
+                       close(sk);
+                       return -1;
+               }
+
                sk_out->sk = sk;
                INIT_FLIST_HEAD(&sk_out->list);
                __fio_sem_init(&sk_out->lock, FIO_SEM_UNLOCKED);
@@ -1587,7 +1594,7 @@ void fio_server_send_gs(struct group_run_stats *rs)
 }
 
 void fio_server_send_job_options(struct flist_head *opt_list,
-                                unsigned int groupid)
+                                unsigned int gid)
 {
        struct cmd_job_option pdu;
        struct flist_head *entry;
@@ -1602,12 +1609,12 @@ void fio_server_send_job_options(struct flist_head *opt_list,
                p = flist_entry(entry, struct print_option, list);
                memset(&pdu, 0, sizeof(pdu));
 
-               if (groupid == -1U) {
+               if (gid == -1U) {
                        pdu.global = __cpu_to_le16(1);
                        pdu.groupid = 0;
                } else {
                        pdu.global = 0;
-                       pdu.groupid = cpu_to_le32(groupid);
+                       pdu.groupid = cpu_to_le32(gid);
                }
                len = strlen(p->name);
                if (len >= sizeof(pdu.name)) {
@@ -1693,8 +1700,8 @@ static inline void __fio_net_prep_tail(z_stream *stream, void *out_pdu,
 
        *last_entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len,
                                 NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE);
-       flist_add_tail(&(*last_entry)->list, &first->next);
-
+       if (*last_entry)
+               flist_add_tail(&(*last_entry)->list, &first->next);
 }
 
 /*
@@ -1710,9 +1717,10 @@ static int __deflate_pdu_buffer(void *next_in, unsigned int next_sz, void **out_
        stream->next_in = next_in;
        stream->avail_in = next_sz;
        do {
-               if (! stream->avail_out) {
-
+               if (!stream->avail_out) {
                        __fio_net_prep_tail(stream, *out_pdu, last_entry, first);
+                       if (*last_entry == NULL)
+                               return 1;
 
                        *out_pdu = malloc(FIO_SERVER_MAX_FRAGMENT_PDU);
 
@@ -1776,8 +1784,7 @@ static int __fio_append_iolog_gz_hist(struct sk_entry *first, struct io_log *log
        }
 
        __fio_net_prep_tail(stream, out_pdu, &entry, first);
-
-       return 0;
+       return entry == NULL;
 }
 
 static int __fio_append_iolog_gz(struct sk_entry *first, struct io_log *log,
@@ -1816,6 +1823,10 @@ static int __fio_append_iolog_gz(struct sk_entry *first, struct io_log *log,
 
                entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len,
                                         NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE);
+               if (!entry) {
+                       free(out_pdu);
+                       return 1;
+               }
                flist_add_tail(&entry->list, &first->next);
        } while (stream->avail_in);
 
@@ -1867,6 +1878,10 @@ static int fio_append_iolog_gz(struct sk_entry *first, struct io_log *log)
 
                entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len,
                                         NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE);
+               if (!entry) {
+                       free(out_pdu);
+                       break;
+               }
                flist_add_tail(&entry->list, &first->next);
        } while (ret != Z_STREAM_END);
 
@@ -1887,6 +1902,7 @@ static int fio_append_gz_chunks(struct sk_entry *first, struct io_log *log)
 {
        struct sk_entry *entry;
        struct flist_head *node;
+       int ret = 0;
 
        pthread_mutex_lock(&log->chunk_lock);
        flist_for_each(node, &log->chunk_list) {
@@ -1895,16 +1911,20 @@ static int fio_append_gz_chunks(struct sk_entry *first, struct io_log *log)
                c = flist_entry(node, struct iolog_compress, list);
                entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, c->buf, c->len,
                                                NULL, SK_F_VEC | SK_F_INLINE);
+               if (!entry) {
+                       ret = 1;
+                       break;
+               }
                flist_add_tail(&entry->list, &first->next);
        }
        pthread_mutex_unlock(&log->chunk_lock);
-
-       return 0;
+       return ret;
 }
 
 static int fio_append_text_log(struct sk_entry *first, struct io_log *log)
 {
        struct sk_entry *entry;
+       int ret = 0;
 
        while (!flist_empty(&log->io_logs)) {
                struct io_logs *cur_log;
@@ -1917,10 +1937,14 @@ static int fio_append_text_log(struct sk_entry *first, struct io_log *log)
 
                entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, cur_log->log, size,
                                                NULL, SK_F_VEC | SK_F_INLINE);
+               if (!entry) {
+                       ret = 1;
+                       break;
+               }
                flist_add_tail(&entry->list, &first->next);
        }
 
-       return 0;
+       return ret;
 }
 
 int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name)
@@ -1961,7 +1985,7 @@ int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name)
                        s->time         = cpu_to_le64(s->time);
                        s->data.val     = cpu_to_le64(s->data.val);
                        s->__ddir       = cpu_to_le32(s->__ddir);
-                       s->bs           = cpu_to_le32(s->bs);
+                       s->bs           = cpu_to_le64(s->bs);
 
                        if (log->log_offset) {
                                struct io_sample_offset *so = (void *) s;
@@ -1975,6 +1999,8 @@ int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name)
         * Assemble header entry first
         */
        first = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, &pdu, sizeof(pdu), NULL, SK_F_VEC | SK_F_INLINE | SK_F_COPY);
+       if (!first)
+               return 1;
 
        /*
         * Now append actual log entries. If log compression was enabled on
@@ -2118,14 +2144,14 @@ static int fio_init_server_ip(void)
 #endif
 
        if (use_ipv6) {
-               const void *src = &saddr_in6.sin6_addr;
+               void *src = &saddr_in6.sin6_addr;
 
                addr = (struct sockaddr *) &saddr_in6;
                socklen = sizeof(saddr_in6);
                saddr_in6.sin6_family = AF_INET6;
                str = inet_ntop(AF_INET6, src, buf, sizeof(buf));
        } else {
-               const void *src = &saddr_in.sin_addr;
+               void *src = &saddr_in.sin_addr;
 
                addr = (struct sockaddr *) &saddr_in;
                socklen = sizeof(saddr_in);
@@ -2193,7 +2219,7 @@ static int fio_init_server_connection(void)
 
        if (!bind_sock) {
                char *p, port[16];
-               const void *src;
+               void *src;
                int af;
 
                if (use_ipv6) {