summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2015-03-13 11:37:14 +0530
committerRaghavendra Bhat <raghavendra@redhat.com>2015-03-27 04:35:31 -0700
commitd5b6c5265524efe8f927066f342b89f12a531079 (patch)
tree8310efcf60b5c60975bcc32b05cb30d6990e268c
parent7095d05ae3e06c2ea0f01b18cb117a817316fb9e (diff)
rdma:changing list iteration to safe mode
Bck port of : http://review.gluster.org/9872 Change-Id: I2299378f02a5577a8bf2874664ba79e92c3811b5 BUG: 1202212 Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> Reviewed-on: http://review.gluster.org/9872 Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Raghavendra Talur <rtalur@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com> Reviewed-on: http://review.gluster.org/9891 Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
-rw-r--r--rpc/rpc-transport/rdma/src/rdma.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index 55e9638e037..f7667dbc9bd 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/rpc/rpc-transport/rdma/src/rdma.c
@@ -367,11 +367,12 @@ gf_rdma_deregister_arena (struct list_head **mr_list,
struct iobuf_arena *iobuf_arena)
{
gf_rdma_arena_mr *tmp = NULL;
+ gf_rdma_arena_mr *dummy = NULL;
int count = 0, i = 0;
count = iobuf_arena->iobuf_pool->rdma_device_count;
for (i = 0; i < count; i++) {
- list_for_each_entry(tmp, mr_list[i], list) {
+ list_for_each_entry_safe (tmp, dummy, mr_list[i], list) {
if (tmp->iobuf_arena == iobuf_arena) {
if (ibv_dereg_mr(tmp->mr)) {
gf_log("rdma", GF_LOG_WARNING,
@@ -432,6 +433,7 @@ gf_rdma_register_iobuf_pool (rpc_transport_t *this)
{
struct iobuf_pool *iobuf_pool = NULL;
struct iobuf_arena *tmp = NULL;
+ struct iobuf_arena *dummy = NULL;
gf_rdma_private_t *priv = NULL;
gf_rdma_device_t *device = NULL;
struct ibv_mr *mr = NULL;
@@ -443,7 +445,8 @@ gf_rdma_register_iobuf_pool (rpc_transport_t *this)
if (!list_empty(&iobuf_pool->all_arenas)) {
- list_for_each_entry (tmp, &iobuf_pool->all_arenas, all_list) {
+ list_for_each_entry_safe (tmp, dummy, &iobuf_pool->all_arenas,
+ all_list) {
new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr),
gf_common_mt_rdma_arena_mr);
INIT_LIST_HEAD (&new->list);
@@ -473,7 +476,8 @@ gf_rdma_register_iobuf_pool (rpc_transport_t *this)
static struct ibv_mr*
gf_rdma_get_pre_registred_mr(rpc_transport_t *this, void *ptr, int size)
{
- gf_rdma_arena_mr *tmp = NULL;
+ gf_rdma_arena_mr *tmp = NULL;
+ gf_rdma_arena_mr *dummy = NULL;
gf_rdma_private_t *priv = NULL;
gf_rdma_device_t *device = NULL;
@@ -481,7 +485,7 @@ gf_rdma_get_pre_registred_mr(rpc_transport_t *this, void *ptr, int size)
device = priv->device;
if (!list_empty(&device->all_mr)) {
- list_for_each_entry (tmp, &device->all_mr, list) {
+ list_for_each_entry_safe (tmp, dummy, &device->all_mr, list) {
if (tmp->iobuf_arena->mem_base <= ptr &&
ptr < tmp->iobuf_arena->mem_base +
tmp->iobuf_arena->arena_size)
@@ -1653,6 +1657,7 @@ __gf_rdma_deregister_mr (gf_rdma_device_t *device,
struct ibv_mr **mr, int count)
{
gf_rdma_arena_mr *tmp = NULL;
+ gf_rdma_arena_mr *dummy = NULL;
int i = 0;
int found = 0;
@@ -1663,7 +1668,7 @@ __gf_rdma_deregister_mr (gf_rdma_device_t *device,
for (i = 0; i < count; i++) {
found = 0;
if (!list_empty(&device->all_mr)) {
- list_for_each_entry(tmp, &device->all_mr, list) {
+ list_for_each_entry_safe (tmp, dummy, &device->all_mr, list) {
if (tmp->mr == mr[i]) {
found = 1;
break;