Thread (10 messages) 10 messages, 3 authors, 2021-09-23

Re: [PATCH rc] RDMA/cma: Ensure rdma_addr_cancel() happens before issuing more requests

From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2021-09-23 20:04:03

On Thu, Sep 23, 2021 at 09:15:44PM +0300, Leon Romanovsky wrote:
On Thu, Sep 23, 2021 at 08:45:57AM -0300, Jason Gunthorpe wrote:
quoted
On Thu, Sep 23, 2021 at 08:49:06AM +0300, Leon Romanovsky wrote:
quoted
On Wed, Sep 22, 2021 at 11:41:19AM -0300, Jason Gunthorpe wrote:
quoted
On Wed, Sep 22, 2021 at 11:01:39AM +0300, Leon Romanovsky wrote:
quoted
quoted
+			/* The FSM can return back to RDMA_CM_ADDR_BOUND after
+			 * rdma_resolve_ip() is called, eg through the error
+			 * path in addr_handler. If this happens the existing
+			 * request must be canceled before issuing a new one.
+			 */
+			if (id_priv->used_resolve_ip)
+				rdma_addr_cancel(&id->route.addr.dev_addr);
+			else
+				id_priv->used_resolve_ip = 1;
Why don't you never clear this field?
The only case where it can be cleared is if we have called
rdma_addr_cancel(), and since this is the only place that does it and
immediately calls rdma_resolve_ip() again, there is no reason to ever
clear it.
IMHO, it is better to clear instead to rely on "the only place" semantic.
Then the code looks really silly:

	if (id_priv->used_resolve_ip) {
		rdma_addr_cancel(&id->route.addr.dev_addr);
                id_priv->used_resolve_ip = 0;
        }
        id_priv->used_resolve_ip = 1;
So write comment why you don't need to clear used_resolve_ip, but don't
leave it as it is now, where readers need to guess.
I think it is a bit wordy, but I put this:

			/*
			 * The FSM can return back to RDMA_CM_ADDR_BOUND after
			 * rdma_resolve_ip() is called, eg through the error
			 * path in addr_handler(). If this happens the existing
			 * request must be canceled before issuing a new one.
			 * Since canceling a request is a bit slow and this
			 * oddball path is rare, keep track once a request has
			 * been issued. The track turns out to be a permanent
			 * state since this is the only cancel as it is
			 * immediately before rdma_resolve_ip().
			 */

And into for-rc

Jason
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help