diff options
author | Gerd Rausch <gerd.rausch@oracle.com> | 2019-07-17 00:29:17 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-07-17 21:06:52 +0200 |
commit | 3a2886cca703fde5ee21baea9fedf8b1389c59d7 (patch) | |
tree | ebeffb5e2ef043aa46be9929db3a466466df50ce /net/rds/ib.h | |
parent | net/rds: Set fr_state only to FRMR_IS_FREE if IB_WR_LOCAL_INV had been succes... (diff) | |
download | linux-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.h | 1 |
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; |