diff options
| -rw-r--r-- | libglusterfs/src/mem-types.h | 2 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 17 | 
2 files changed, 16 insertions, 3 deletions
diff --git a/libglusterfs/src/mem-types.h b/libglusterfs/src/mem-types.h index 455ee641dae..d0384dad0be 100644 --- a/libglusterfs/src/mem-types.h +++ b/libglusterfs/src/mem-types.h @@ -161,6 +161,8 @@ enum gf_common_mem_types_ {          gf_common_mt_tbf_t,          gf_common_mt_tbf_bucket_t,          gf_common_mt_tbf_throttle_t, + +        gf_common_mt_pthread_t,          gf_common_mt_end  };  #endif diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index d7632376c58..81a86779f6b 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -25,7 +25,6 @@  #define GF_DISK_SECTOR_SIZE             512  #define DHT_REBALANCE_PID               4242 /* Change it if required */  #define DHT_REBALANCE_BLKSIZE           (128 * 1024) -#define MAX_MIGRATOR_THREAD_COUNT       40  #define MAX_MIGRATE_QUEUE_COUNT         500  #define MIN_MIGRATE_QUEUE_COUNT         200 @@ -3419,7 +3418,7 @@ gf_defrag_start_crawl (void *data)          int                     thread_index            = 0;          int                     err                     = 0;          int                     thread_spawn_count      = 0; -        pthread_t tid[MAX_MIGRATOR_THREAD_COUNT]; +        pthread_t               *tid                    = NULL;          gf_boolean_t            is_tier_detach          = _gf_false;          this = data; @@ -3556,7 +3555,8 @@ gf_defrag_start_crawl (void *data)                                             gf_dht_mt_container_t);                  if (!defrag->queue) { -                        gf_log (this->name, GF_LOG_INFO, "No memory for queue"); +                        gf_log (this->name, GF_LOG_ERROR, "No memory for " +                                "queue");                          ret = -1;                          goto out;                  } @@ -3568,6 +3568,15 @@ gf_defrag_start_crawl (void *data)                  gf_msg_debug (this->name, 0, "thread_spawn_count: %d",                                thread_spawn_count); +                tid = GF_CALLOC (thread_spawn_count, sizeof (pthread_t), +                                 gf_common_mt_pthread_t); +                if (!tid) { +                        gf_log (this->name, GF_LOG_ERROR, "Insufficient memory " +                                "for tid"); +                        ret = -1; +                        goto out; +                } +                  defrag->current_thread_count = thread_spawn_count;                  /*Spawn Threads Here*/ @@ -3657,6 +3666,8 @@ out:                  pthread_join (tid[i], NULL);          } +        GF_FREE (tid); +          if (defrag->cmd == GF_DEFRAG_CMD_START_TIER) {                  /* Wait for the tier fixlayout to                   * complete if its was started.*/  | 
