diff options
| author | Mohammed Rafi KC <rkavunga@redhat.com> | 2015-03-13 11:37:14 +0530 | 
|---|---|---|
| committer | Raghavendra Bhat <raghavendra@redhat.com> | 2015-03-27 04:35:31 -0700 | 
| commit | d5b6c5265524efe8f927066f342b89f12a531079 (patch) | |
| tree | 8310efcf60b5c60975bcc32b05cb30d6990e268c | |
| parent | 7095d05ae3e06c2ea0f01b18cb117a817316fb9e (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.c | 15 | 
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;  | 
