All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] rsocket: Fix removing rsocket from service thread
@ 2014-07-03 22:08 sean.hefty-ral2JQCrhuEAvxtiuMwx3w
       [not found] ` <1404425324-20201-1-git-send-email-sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: sean.hefty-ral2JQCrhuEAvxtiuMwx3w @ 2014-07-03 22:08 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA; +Cc: Sean Hefty

From: Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>

When removing an rsocket from a service thread, we replace
the removed service with the one at the end of the service list.
This keeps the array tightly packed.  However, rs_svc_rm_rs
decrements the rsocket count before doing the swap.  The result
is that the entry at the end of the list gets dropped off.
Defer decrementing the count until the swap has been made.

In this case, the cnt value is a valid index into the array,
because we start at index 1.  Index 0 is used internally by
the service thread.

Signed-off-by: Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
 src/rsocket.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/rsocket.c b/src/rsocket.c
index f81fb1b..e9d12c7 100644
--- a/src/rsocket.c
+++ b/src/rsocket.c
@@ -3947,11 +3947,11 @@ static int rs_svc_rm_rs(struct rs_svc *svc, struct rsocket *rs)
 
 	for (i = 1; i <= svc->cnt; i++) {
 		if (svc->rss[i] == rs) {
-			svc->cnt--;
 			svc->rss[i] = svc->rss[svc->cnt];
 			memcpy(svc->contexts + i * svc->context_size,
 			       svc->contexts + svc->cnt * svc->context_size,
 			       svc->context_size);
+			svc->cnt--;
 			return 0;
 		}
 	}
-- 
1.7.3

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-07 10:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-03 22:08 [PATCH 1/2] rsocket: Fix removing rsocket from service thread sean.hefty-ral2JQCrhuEAvxtiuMwx3w
     [not found] ` <1404425324-20201-1-git-send-email-sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-07-03 22:08   ` [PATCH 2/2] rsocket: Update correct rsocket keepalive time sean.hefty-ral2JQCrhuEAvxtiuMwx3w
     [not found]     ` <1404425324-20201-2-git-send-email-sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-07-07 10:08       ` Hal Rosenstock
2014-07-07 10:08   ` [PATCH 1/2] rsocket: Fix removing rsocket from service thread Hal Rosenstock

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.