]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh
authorSean Hefty <sean.hefty@intel.com>
Mon, 16 Jul 2012 21:18:53 +0000 (14:18 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 16 Jul 2012 21:18:53 +0000 (14:18 -0700)
meta
patches/refresh-temp [deleted file]
patches/transpose

diff --git a/meta b/meta
index b3a6b99fe6411d5fd07a02041ff093c812359536..c8c846a1107e3bbaec77f35dbf919701150735b8 100644 (file)
--- a/meta
+++ b/meta
@@ -1,9 +1,8 @@
 Version: 1
-Previous: 5571cf2b5b15472b73775b2d5ffa81086c960d49
-Head: 018fff2b15218aa621bcbd991530d483b86ac3d2
+Previous: 95c2c2477e09cb430e4d83229c6705454731b5f6
+Head: 33ebfdf89e5ba9a69cc9001625155c351c7c7cd5
 Applied:
-  transpose: 467f4d6bebb1a619fcad225b8ea1cf9662a4a97d
-  refresh-temp: 018fff2b15218aa621bcbd991530d483b86ac3d2
+  transpose: 33ebfdf89e5ba9a69cc9001625155c351c7c7cd5
 Unapplied:
   fork: d62b389a7f30187f39e8c6ae709fbdbf8423e7e8
   waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8
diff --git a/patches/refresh-temp b/patches/refresh-temp
deleted file mode 100644 (file)
index 028119b..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-Bottom: 7ec243f3149e9a1ff1d5183f18e30d2458e354d6
-Top:    8ec84e6e24d58093de94f5921ca22d6e4c566290
-Author: Sean Hefty <sean.hefty@intel.com>
-Date:   2012-07-16 14:18:52 -0700
-
-Refresh of transpose
-
----
-
-diff --git a/src/preload.c b/src/preload.c
-index 2750b30..8b9fbaf 100644
---- a/src/preload.c
-+++ b/src/preload.c
-@@ -92,10 +92,12 @@ static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
- static int sq_size;
- static int rq_size;
- static int sq_inline;
-+static int fork_support;
- enum fd_type {
-       fd_normal,
--      fd_rsocket
-+      fd_rsocket,
-+      fd_fork
- };
- struct fd_info {
-@@ -207,6 +209,10 @@ void getenv_options(void)
-       var = getenv("RS_INLINE");
-       if (var)
-               sq_inline = atoi(var);
-+
-+      var = getenv("RDMAV_FORK_SAFE");
-+      if (var)
-+              fork_support = atoi(var);
- }
- static void init_preload(void)
-@@ -301,6 +307,68 @@ err:
- }
- /*
-+ * Convert between an rsocket and a normal socket.  The new socket should have the
-+ * same settings and bindings as the current socket.  We currently only handle
-+ * setting a few of the more common values.
-+ */
-+static int
-+transpose_socket(int index, int *fd, enum fd_type new_type,
-+      int (*socket_new)(int domain, int type, int protocol),
-+      int (*shutdown_old)(int socket, int how),
-+      int (*close_old)(int socket),
-+      int (*getsockname_old)(int socket, struct sockaddr *addr,
-+                             socklen_t *addrlen),
-+      int (*getsockopt_old)(int socket, int level, int optname,
-+                            void *optval, socklen_t *optlen),
-+      int (*setsockopt_new)(int socket, int level, int optname,
-+                            const void *optval, socklen_t optlen),
-+      int (*fcntl_old)(int socket, int cmd, ... /* arg */),
-+      int (*fcntl_new)(int socket, int cmd, ... /* arg */))
-+{
-+      socklen_t len = 0;
-+      int new_fd, param, ret;
-+
-+      ret = getsockname_old(*fd, NULL, &len);
-+      if (ret)
-+              return ret;
-+
-+      param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET;
-+      new_fd = socket_new(param, SOCK_STREAM, 0);
-+      if (new_fd < 0)
-+              return new_fd;
-+
-+      ret = fcntl_old(*fd, F_GETFL);
-+      if (ret > 0)
-+              ret = fcntl_new(new_fd, F_SETFL, ret);
-+      if (ret)
-+              goto err;
-+
-+      len = sizeof param;
-+      ret = getsockopt_old(*fd, SOL_SOCKET, SO_REUSEADDR, &param, &len);
-+      if (param && !ret)
-+              ret = setsockopt_new(new_fd, SOL_SOCKET, SO_REUSEADDR, &param, len);
-+      if (ret)
-+              goto err;
-+
-+      len = sizeof param;
-+      ret = getsockopt_old(*fd, IPPROTO_TCP, TCP_NODELAY, &param, &len);
-+      if (param && !ret)
-+              ret = setsockopt_new(new_fd, IPPROTO_TCP, TCP_NODELAY, &param, len);
-+      if (ret)
-+              goto err;
-+
-+      shutdown_old(*fd, SHUT_RDWR);
-+      close_old(*fd);
-+      fd_store(socket, new_fd, new_type);
-+      *fd = new_fd;
-+      return 0;
-+
-+err:
-+      real_close(new_fd);
-+      return ret;
-+}
-+
-+/*
-  * Use defaults on failure.
-  */
- void set_rsocket_options(int rsocket)
-@@ -332,8 +400,16 @@ int socket(int domain, int type, int protocol)
-       ret = rsocket(domain, type, protocol);
-       recursive = 0;
-       if (ret >= 0) {
--              fd_store(index, ret, fd_rsocket);
--              set_rsocket_options(ret);
-+              if (fork_support) {
-+                      rclose(ret);
-+                      ret = real_socket(domain, type, protocol);
-+                      if (ret < 0)
-+                              return ret;
-+                      fd_store(index, ret, fd_fork);
-+              } else {
-+                      fd_store(index, ret, fd_rsocket);
-+                      set_rsocket_options(ret);
-+              }
-               return index;
-       }
-       fd_close(index, &ret);
-@@ -388,6 +464,29 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
-       }
- }
-+static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrlen)
-+{
-+      uint32_t msg;
-+      int rs, fd, ret;
-+
-+      fd = fd_getd(socket);
-+      ret = real_connect(fd, addr, addrlen);
-+      if (!ret)
-+              return ret;
-+
-+      ret = real_read(fd, &msg, sizeof msg);
-+      if (ret != sizeof msg)
-+              return ret;
-+
-+      rs = rsocket(domain, type, protocol);
-+
-+      real_shutdown(fd, SHUT_RDWR);
-+      real_close(fd);
-+
-+      fd_store(socket, fd, fd_rsocket);
-+      return connect(socket, addr, addrlen);
-+}
-+
- int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
- {
-       struct sockaddr_in *sin;
index e5619e0e34213007491f688a89549f0b6b8a02c0..278eac21fa4a958c70601aacd9dc94028844ef5e 100644 (file)
@@ -1,5 +1,5 @@
 Bottom: 7ec243f3149e9a1ff1d5183f18e30d2458e354d6
-Top:    7ec243f3149e9a1ff1d5183f18e30d2458e354d6
+Top:    8ec84e6e24d58093de94f5921ca22d6e4c566290
 Author: Sean Hefty <sean.hefty@intel.com>
 Date:   2012-07-16 14:17:58 -0700
 
@@ -16,4 +16,150 @@ Signed-off-by: Sean Hefty <sean.hefty@intel.com>
 
 ---
 
-
+diff --git a/src/preload.c b/src/preload.c
+index 2750b30..8b9fbaf 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -92,10 +92,12 @@ static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
+ static int sq_size;
+ static int rq_size;
+ static int sq_inline;
++static int fork_support;
+ enum fd_type {
+       fd_normal,
+-      fd_rsocket
++      fd_rsocket,
++      fd_fork
+ };
+ struct fd_info {
+@@ -207,6 +209,10 @@ void getenv_options(void)
+       var = getenv("RS_INLINE");
+       if (var)
+               sq_inline = atoi(var);
++
++      var = getenv("RDMAV_FORK_SAFE");
++      if (var)
++              fork_support = atoi(var);
+ }
+ static void init_preload(void)
+@@ -301,6 +307,68 @@ err:
+ }
+ /*
++ * Convert between an rsocket and a normal socket.  The new socket should have the
++ * same settings and bindings as the current socket.  We currently only handle
++ * setting a few of the more common values.
++ */
++static int
++transpose_socket(int index, int *fd, enum fd_type new_type,
++      int (*socket_new)(int domain, int type, int protocol),
++      int (*shutdown_old)(int socket, int how),
++      int (*close_old)(int socket),
++      int (*getsockname_old)(int socket, struct sockaddr *addr,
++                             socklen_t *addrlen),
++      int (*getsockopt_old)(int socket, int level, int optname,
++                            void *optval, socklen_t *optlen),
++      int (*setsockopt_new)(int socket, int level, int optname,
++                            const void *optval, socklen_t optlen),
++      int (*fcntl_old)(int socket, int cmd, ... /* arg */),
++      int (*fcntl_new)(int socket, int cmd, ... /* arg */))
++{
++      socklen_t len = 0;
++      int new_fd, param, ret;
++
++      ret = getsockname_old(*fd, NULL, &len);
++      if (ret)
++              return ret;
++
++      param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET;
++      new_fd = socket_new(param, SOCK_STREAM, 0);
++      if (new_fd < 0)
++              return new_fd;
++
++      ret = fcntl_old(*fd, F_GETFL);
++      if (ret > 0)
++              ret = fcntl_new(new_fd, F_SETFL, ret);
++      if (ret)
++              goto err;
++
++      len = sizeof param;
++      ret = getsockopt_old(*fd, SOL_SOCKET, SO_REUSEADDR, &param, &len);
++      if (param && !ret)
++              ret = setsockopt_new(new_fd, SOL_SOCKET, SO_REUSEADDR, &param, len);
++      if (ret)
++              goto err;
++
++      len = sizeof param;
++      ret = getsockopt_old(*fd, IPPROTO_TCP, TCP_NODELAY, &param, &len);
++      if (param && !ret)
++              ret = setsockopt_new(new_fd, IPPROTO_TCP, TCP_NODELAY, &param, len);
++      if (ret)
++              goto err;
++
++      shutdown_old(*fd, SHUT_RDWR);
++      close_old(*fd);
++      fd_store(socket, new_fd, new_type);
++      *fd = new_fd;
++      return 0;
++
++err:
++      real_close(new_fd);
++      return ret;
++}
++
++/*
+  * Use defaults on failure.
+  */
+ void set_rsocket_options(int rsocket)
+@@ -332,8 +400,16 @@ int socket(int domain, int type, int protocol)
+       ret = rsocket(domain, type, protocol);
+       recursive = 0;
+       if (ret >= 0) {
+-              fd_store(index, ret, fd_rsocket);
+-              set_rsocket_options(ret);
++              if (fork_support) {
++                      rclose(ret);
++                      ret = real_socket(domain, type, protocol);
++                      if (ret < 0)
++                              return ret;
++                      fd_store(index, ret, fd_fork);
++              } else {
++                      fd_store(index, ret, fd_rsocket);
++                      set_rsocket_options(ret);
++              }
+               return index;
+       }
+       fd_close(index, &ret);
+@@ -388,6 +464,29 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+       }
+ }
++static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrlen)
++{
++      uint32_t msg;
++      int rs, fd, ret;
++
++      fd = fd_getd(socket);
++      ret = real_connect(fd, addr, addrlen);
++      if (!ret)
++              return ret;
++
++      ret = real_read(fd, &msg, sizeof msg);
++      if (ret != sizeof msg)
++              return ret;
++
++      rs = rsocket(domain, type, protocol);
++
++      real_shutdown(fd, SHUT_RDWR);
++      real_close(fd);
++
++      fd_store(socket, fd, fd_rsocket);
++      return connect(socket, addr, addrlen);
++}
++
+ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+ {
+       struct sockaddr_in *sin;