From: Sean Hefty Date: Wed, 27 Jun 2012 00:47:35 +0000 (-0700) Subject: refresh (create temporary patch) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=2028b6b07a302a5426fa6b7e6f59d76d0fbd9ec0;p=~shefty%2Flibrdmacm.git refresh (create temporary patch) --- diff --git a/meta b/meta index ee064c15..2b518b0d 100644 --- a/meta +++ b/meta @@ -1,10 +1,11 @@ Version: 1 -Previous: fed3462835b91d164a6f35f82d19f7240041f828 -Head: b2b48ba0a9ade70864e201b41e4cc7214081b452 +Previous: 4efbd0d33d93cd51bb292fb9fa817815acce7bda +Head: 5a51c2ae068e7c4cfc0ca29ba2c1bbfb76595aa9 Applied: v6only: 3afce107e2baec86c5541ed0acd992e37bcb992a rselect: 7d25968d337e976e0e22fdba69c8a2a2f5d35008 shut_wr: b2b48ba0a9ade70864e201b41e4cc7214081b452 + refresh-temp: 5a51c2ae068e7c4cfc0ca29ba2c1bbfb76595aa9 Unapplied: rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de ip6-opt: 7e43a759255e9890d1e41f1edf71792836f53941 diff --git a/patches/refresh-temp b/patches/refresh-temp new file mode 100644 index 00000000..21760ca9 --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,69 @@ +Bottom: 1264339bc4c5c10bfdee4de6e8d685732a67024a +Top: 1c160ef5df5740a60dc56e2b865de959ae19f00c +Author: Sean Hefty +Date: 2012-06-26 17:47:35 -0700 + +Refresh of shut_wr + +--- + +diff --git a/src/rsocket.c b/src/rsocket.c +index 4ed646b..581ecd8 100644 +--- a/src/rsocket.c ++++ b/src/rsocket.c +@@ -167,7 +167,7 @@ struct rsocket { + uint64_t so_opts; + uint64_t tcp_opts; + uint64_t ipv6_opts; +- enum rs_state state; ++ int state; + int cq_armed; + int retries; + int err; +@@ -757,6 +757,14 @@ int rconnect(int socket, const struct sockaddr *addr, socklen_t addrlen) + return rs_do_connect(rs); + } + ++static int rs_shutdown_state(struct rsocket *rs, int state) ++{ ++ rs->state &= ~state; ++ if (rs->state == rs_connected) ++ rs->state = rs_disconnected; ++ return rs->state == rs_disconnected; ++} ++ + static int rs_post_write(struct rsocket *rs, uint64_t wr_id, + struct ibv_sge *sgl, int nsge, + uint32_t imm_data, int flags, +@@ -889,7 +897,8 @@ static int rs_poll_cq(struct rsocket *rs) + rs->state = rs_disconnected; + return ERR(ECONNRESET); + } else if (rs_msg_data(imm_data) == RS_CTRL_SHUTDOWN) { +- rs->state &= ~rs_connect_rd; ++ if (rs_shutdown_state(rs, rs_connect_rd)) ++ return ERR(ECONNRESET); + } + break; + default: +@@ -1702,9 +1711,7 @@ int rshutdown(int socket, int how) + + rs = idm_at(&idm, socket); + if (how == SHUT_RD) { +- rs->state &= ~rs_connect_rd; +- if (rs->state == rs_connected) +- rs->state = rs_disconnected; ++ rs_shutdown_state(rs, rs_connect_rd); + return 0; + } + +@@ -1716,8 +1723,8 @@ int rshutdown(int socket, int how) + ctrl = RS_CTRL_DISCONNECT; + rs->state = rs_disconnected; + } else { +- ctrl = RS_CTRL_SHUTDOWN; +- rs->state &= ~rs_connect_wr; ++ ctrl = rs_shutdown_state(rs, rs_connect_wr) ? ++ RS_CTRL_DISCONNECT : RS_CTRL_SHUTDOWN; + } + if (!rs_can_send_ctrl(rs)) { + ret = rs_process_cq(rs, 0, rs_can_send_ctrl);