]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
debug fork issue
authorSean Hefty <sean.hefty@intel.com>
Tue, 21 Aug 2012 20:49:59 +0000 (13:49 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 21 Aug 2012 20:49:59 +0000 (13:49 -0700)
src/preload.c
src/rsocket.c

index 0645f6ddb780db03d8ab44bee231021c33c4a9ed..b5a67cb7826f9ce73ea35f2204f5dbd957f34cc1 100644 (file)
@@ -34,6 +34,7 @@
 #if HAVE_CONFIG_H
 #  include <config.h>
 #endif /* HAVE_CONFIG_H */
+#include <stdio.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -239,7 +240,7 @@ void getenv_options(void)
        if (var)
                sq_inline = atoi(var);
 
-       var = getenv("RDMAV_FORK_SAFE");
+       var = getenv("RS_FORK_SUPPORT");
        if (var)
                fork_support = atoi(var);
 }
@@ -413,11 +414,14 @@ int socket(int domain, int type, int protocol)
                return index;
 
        recursive = 1;
+printf("skipping rsocket call\n");
+goto realsock;
        ret = rsocket(domain, type, protocol);
        recursive = 0;
        if (ret >= 0) {
                if (fork_support) {
                        rclose(ret);
+realsock:
                        ret = real.socket(domain, type, protocol);
                        if (ret < 0)
                                return ret;
@@ -502,6 +506,7 @@ static void fork_active(int socket)
        uint32_t msg;
        long flags;
 
+       printf("fork_active\n");
        sfd = fd_getd(socket);
 
        flags = real.fcntl(sfd, F_GETFL);
@@ -516,10 +521,12 @@ static void fork_active(int socket)
        if (ret)
                goto err1;
 
+       printf("fork_active - create rsocket\n");
        dfd = rsocket(addr.ss_family, SOCK_STREAM, 0);
        if (dfd < 0)
                goto err1;
 
+       printf("fork_active - rconnect\n");
        ret = rconnect(dfd, (struct sockaddr *) &addr, len);
        if (ret)
                goto err2;
@@ -551,6 +558,7 @@ static void fork_passive(int socket)
        socklen_t len;
        uint32_t msg;
 
+       printf("fork_passive\n");
        sfd = fd_getd(socket);
 
        len = sizeof sin6;
@@ -566,6 +574,7 @@ static void fork_passive(int socket)
                ret = -1;
                goto out;
        }
+       printf("fork_passive - create rsocket\n");
 
        lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
        if (lfd < 0) {
@@ -589,6 +598,7 @@ static void fork_passive(int socket)
        len = real.write(sfd, &msg, sizeof msg);
        if (len != sizeof msg)
                goto lclose;
+       printf("fork_passive - raccept\n");
 
        dfd = raccept(lfd, NULL, NULL);
        if (dfd < 0) {
index 4c4821bca26705dd7862be5f413da549c0d3057b..52476a279f2e486ce33a57dfd2b598cf0693ac27 100644 (file)
@@ -156,6 +156,10 @@ struct rsocket {
        fastlock_t        cq_lock;
        fastlock_t        cq_wait_lock;
 
+       struct rs_msg     last_ctrl;
+       uint64_t          bytes_sent;
+       uint64_t          bytes_received;
+
        int               opts;
        long              fd_flags;
        uint64_t          so_opts;
@@ -816,6 +820,7 @@ static void rs_send_credits(struct rsocket *rs)
 
        rs->ctrl_avail--;
        rs->rseq_comp = rs->rseq_no + (rs->rq_size >> 1);
+       rs->last_ctrl.op = rs->rseq_no + rs->rq_size;
        if (rs->rbuf_bytes_avail >= (rs->rbuf_size >> 1)) {
                if (!(rs->opts & RS_OPT_SWAP_SGL)) {
                        sge.addr = (uintptr_t) &rs->rbuf[rs->rbuf_free_offset];
@@ -830,6 +835,7 @@ static void rs_send_credits(struct rsocket *rs)
                ibsge.addr = (uintptr_t) &sge;
                ibsge.lkey = 0;
                ibsge.length = sizeof(sge);
+               rs->last_ctrl.data = sge.length;
 
                rs_post_write(rs, &ibsge, 1,
                              rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size),
@@ -845,6 +851,7 @@ static void rs_send_credits(struct rsocket *rs)
                if (++rs->remote_sge == rs->remote_sgl.length)
                        rs->remote_sge = 0;
        } else {
+               rs->last_ctrl.data = 0;
                rs_post_write(rs, NULL, 0,
                              rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size), 0, 0, 0);
        }
@@ -1173,6 +1180,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
 
        } while (left && (flags & MSG_WAITALL) && (rs->state & rs_connect_rd));
 
+       rs->bytes_received += (len - left);
        fastlock_release(&rs->rlock);
        return ret ? ret : len - left;
 }
@@ -1289,6 +1297,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
                if (ret)
                        break;
        }
+       rs->bytes_sent += (len - left);
        fastlock_release(&rs->slock);
 
        return (ret && left == len) ? ret : len - left;