summaryrefslogtreecommitdiffstats
path: root/net/rds/ib.h
diff options
context:
space:
mode:
authorGerd Rausch <gerd.rausch@oracle.com>2019-07-17 00:29:17 +0200
committerDavid S. Miller <davem@davemloft.net>2019-07-17 21:06:52 +0200
commit3a2886cca703fde5ee21baea9fedf8b1389c59d7 (patch)
treeebeffb5e2ef043aa46be9929db3a466466df50ce /net/rds/ib.h
parentnet/rds: Set fr_state only to FRMR_IS_FREE if IB_WR_LOCAL_INV had been succes... (diff)
downloadlinux-3a2886cca703fde5ee21baea9fedf8b1389c59d7.tar.xz
linux-3a2886cca703fde5ee21baea9fedf8b1389c59d7.zip
net/rds: Keep track of and wait for FRWR segments in use upon shutdown
Since "rds_ib_free_frmr" and "rds_ib_free_frmr_list" simply put the FRMR memory segments on the "drop_list" or "free_list", and it is the job of "rds_ib_flush_mr_pool" to reap those entries by ultimately issuing a "IB_WR_LOCAL_INV" work-request, we need to trigger and then wait for all those memory segments attached to a particular connection to be fully released before we can move on to release the QP, CQ, etc. So we make "rds_ib_conn_path_shutdown" wait for one more atomic_t called "i_fastreg_inuse_count" that keeps track of how many FRWR memory segments are out there marked "FRMR_IS_INUSE" (and also wake_up rds_ib_ring_empty_wait, as they go away). Signed-off-by: Gerd Rausch <gerd.rausch@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rds/ib.h')
-rw-r--r--net/rds/ib.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/rds/ib.h b/net/rds/ib.h
index 66c03c7665b2..303c6ee8bdb7 100644
--- a/net/rds/ib.h
+++ b/net/rds/ib.h
@@ -156,6 +156,7 @@ struct rds_ib_connection {
/* To control the number of wrs from fastreg */
atomic_t i_fastreg_wrs;
+ atomic_t i_fastreg_inuse_count;
/* interrupt handling */
struct tasklet_struct i_send_tasklet;