On Mon, 2005-07-25 at 12:20 -0700, Libor Michalek wrote: > The original code at the begining of sdp_inet_port_put() was checking > to see if the connection was already in the bind list, and returning an > error if it was not in the list. The error check that's there now is > doing something different, and we return success if the connection > is not in the bind list and has a put() done on it. > > If we are regularly doing a put on a socket not in the bind list, > the function should be made void, and the check for list membership > not generate an error...
Something like this? Signed-off-by: Tom Duffy <[EMAIL PROTECTED]> Index: linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_inet.c =================================================================== --- linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_inet.c (revision 2909) +++ linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_inet.c (working copy) @@ -1100,7 +1100,7 @@ static int sdp_inet_setopt(struct socket SDP_MSG_HDR_SIZE)); break; case SDP_UNBIND: - result = sdp_inet_port_put(conn); + sdp_inet_port_put(conn); break; default: sdp_warn("SETSOCKOPT unimplemented option <%d:%d> conn <%d>.", Index: linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_proto.h =================================================================== --- linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_proto.h (revision 2909) +++ linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_proto.h (working copy) @@ -287,7 +287,7 @@ struct sdp_sock *sdp_inet_listen_lookup( int sdp_inet_port_get(struct sdp_sock *conn, u16 port); -int sdp_inet_port_put(struct sdp_sock *conn); +void sdp_inet_port_put(struct sdp_sock *conn); void sdp_inet_port_inherit(struct sdp_sock *parent, struct sdp_sock *child); Index: linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_conn.c =================================================================== --- linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_conn.c (revision 2909) +++ linux-2.6.13-rc3-openib/drivers/infiniband/ulp/sdp/sdp_conn.c (working copy) @@ -490,19 +490,17 @@ done: /* * sdp_inet_port_put - unbind a socket from a port. */ -int sdp_inet_port_put(struct sdp_sock *conn) +void sdp_inet_port_put(struct sdp_sock *conn) { unsigned long flags; - - if (list_empty(&dev_root_s.bind_list)) - return -EADDRNOTAVAIL; + struct sdp_sock *i, *j; spin_lock_irqsave(&dev_root_s.bind_lock, flags); - list_del(&conn->bind_next); + list_for_each_entry_safe(i, j, &dev_root_s.bind_list, bind_next) + if (conn == i) + list_del(&conn->bind_next); conn->src_port = 0; spin_unlock_irqrestore(&dev_root_s.bind_lock, flags); - - return 0; } /* @@ -694,7 +692,7 @@ void sdp_conn_put(struct sdp_sock *conn) /* * If the socket is bound, return the port */ - (void)sdp_inet_port_put(conn); + sdp_inet_port_put(conn); sdp_conn_stat_dump(conn); /* _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general