From: Sean Hefty Date: Wed, 18 Jul 2012 16:01:43 +0000 (-0700) Subject: debug fork X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=0687e42f87b1129e584afae0e28b5a9c15f75510;p=~shefty%2Flibrdmacm.git debug fork --- diff --git a/examples/rstream.c b/examples/rstream.c index befb7c66..545328bf 100644 --- a/examples/rstream.c +++ b/examples/rstream.c @@ -182,6 +182,7 @@ static void show_perf(void) static int size_to_count(int size) { + return 100; if (size >= 1000000) return 100; else if (size >= 100000) diff --git a/src/cma.c b/src/cma.c index 5280620e..54b804e1 100755 --- a/src/cma.c +++ b/src/cma.c @@ -48,6 +48,7 @@ #include #include #include +#include #include "cma.h" #include @@ -141,6 +142,7 @@ static void ucma_cleanup(void) free(cma_dev_array); cma_dev_cnt = 0; } + printf("ucma_cleanup\n"); } static int check_abi_version(void) @@ -214,6 +216,7 @@ int ucma_init(void) if (cma_dev_cnt) return 0; + printf("ucma_init\n"); pthread_mutex_lock(&mut); if (cma_dev_cnt) { pthread_mutex_unlock(&mut); diff --git a/src/preload.c b/src/preload.c index f824af3f..47e1e645 100644 --- a/src/preload.c +++ b/src/preload.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -467,14 +468,17 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl uint32_t msg; long flags; + printf("connect_fork\n"); fd = fd_getd(socket); flags = real.fcntl(fd, F_GETFL); real.fcntl(fd, F_SETFL, 0); ret = real.connect(fd, addr, addrlen); + printf("connect_fork - real connect %d %s\n", ret, strerror(errno)); if (ret) return ret; ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK); + printf("connect_fork - real recv %d msg %d\n", ret, msg); if ((ret != sizeof msg) || msg) { fd_store(socket, fd, fd_normal); return 0; @@ -482,10 +486,12 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl real.fcntl(fd, F_SETFL, flags); ret = transpose_socket(socket, fd_rsocket); + printf("connect_fork - transpose socket %d\n", ret); if (ret < 0) return ret; real.close(fd); + printf("connect_fork - connecting rsocket"); return rconnect(ret, addr, addrlen); } @@ -834,11 +840,15 @@ pid_t fork(void) uint32_t msg; init_preload(); + printf("fork\n"); pid = real.fork(); + printf("fork - pid %d fork_support %d last_accept %d \n", + pid, fork_support, last_accept); if (pid || !fork_support || (last_accept < 0) || (fd_get(last_accept, &sfd) != fd_fork)) goto out; + printf("fork - switching to rsocket\n"); len = sizeof sin6; ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len); if (ret) @@ -846,33 +856,42 @@ pid_t fork(void) sin6.sin6_flowinfo = sin6.sin6_scope_id = 0; memset(&sin6.sin6_addr, 0, sizeof sin6.sin6_addr); + sem_unlink("/rsocket_fork"); sem = sem_open("/rsocket_fork", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG, 1); + printf("fork - sem_open\n"); + printf("fork - sem value %d\n", sem_getvalue(sem, &ret)); if (sem == SEM_FAILED) goto out; lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0); + printf("fork - rsocket %d\n", lfd); if (lfd < 0) goto sclose; param = 1; rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param); + printf("fork - waiting for semaphore\n"); sem_wait(sem); ret = rbind(lfd, (struct sockaddr *) &sin6, sizeof sin6); + printf("fork - rbind %d\n", ret); if (ret) goto lclose; ret = rlisten(lfd, 1); + printf("fork - rlisten %d\n", ret); if (ret) goto lclose; msg = 0; ret = real.write(sfd, &msg, sizeof msg); + printf("fork - real write %d\n", ret); if (ret != sizeof msg) goto lclose; dfd = raccept(lfd, NULL, NULL); + printf("fork - raccept %d %s\n", dfd, strerror(errno)); if (dfd < 0) goto lclose; @@ -883,6 +902,7 @@ pid_t fork(void) copysockopts(dfd, sfd, &rs, &real); real.shutdown(sfd, SHUT_RDWR); real.close(sfd); + printf("fork - using rsocket\n"); fd_store(last_accept, dfd, fd_rsocket); lclose: diff --git a/src/rsocket.c b/src/rsocket.c index ed125b3b..1d293f75 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -361,7 +361,9 @@ static int rs_init_bufs(struct rsocket *rs) if (!rs->sbuf) return -1; + printf("rs init bufs cm_id %p pd %p\n", rs->cm_id, rs->cm_id->pd); rs->smr = rdma_reg_msgs(rs->cm_id, rs->sbuf, rs->sbuf_size); + printf("rs init bufs - after reg %p\n", rs->smr); if (!rs->smr) return -1; @@ -425,10 +427,12 @@ static int rs_create_ep(struct rsocket *rs) rs_set_qp_size(rs); ret = rs_init_bufs(rs); + printf("rs create ep init bufs %d\n", ret); if (ret) return ret; ret = rs_create_cq(rs); + printf("rs create ep - create cq %d\n", ret); if (ret) return ret; @@ -445,6 +449,7 @@ static int rs_create_ep(struct rsocket *rs) qp_attr.cap.max_inline_data = rs->sq_inline; ret = rdma_create_qp(rs->cm_id, NULL, &qp_attr); + printf("rs create ep - create qp %d\n", ret); if (ret) return ret; @@ -602,16 +607,19 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) struct rs_conn_data *creq, cresp; int ret; + printf("raccept %d\n", socket); rs = idm_at(&idm, socket); new_rs = rs_alloc(rs); if (!new_rs) return ERR(ENOMEM); ret = rdma_get_request(rs->cm_id, &new_rs->cm_id); + printf("raccept get request %d\n", ret); if (ret) goto err; ret = rs_insert(new_rs); + printf("raccept insert %d\n", ret); if (ret < 0) goto err; @@ -625,6 +633,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) rs_set_nonblocking(new_rs, O_NONBLOCK); ret = rs_create_ep(new_rs); + printf("raccept create ep %d\n", ret); if (ret) goto err; @@ -632,6 +641,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen) param = new_rs->cm_id->event->param.conn; rs_set_conn_data(new_rs, ¶m, &cresp); ret = rdma_accept(new_rs->cm_id, ¶m); + printf("raccept rdma accept %d\n", ret); if (!ret) new_rs->state = rs_connect_rdwr; else if (errno == EAGAIN || errno == EWOULDBLOCK)