|
|
|
@ -4802,6 +4802,16 @@ static void clear_pool_work(struct pool *pool)
@@ -4802,6 +4802,16 @@ static void clear_pool_work(struct pool *pool)
|
|
|
|
|
mutex_unlock(stgd_lock); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int cp_prio(void) |
|
|
|
|
{ |
|
|
|
|
int prio; |
|
|
|
|
|
|
|
|
|
mutex_lock(&control_lock); |
|
|
|
|
prio = currentpool->prio; |
|
|
|
|
mutex_unlock(&control_lock); |
|
|
|
|
return prio; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* We only need to maintain a secondary pool connection when we need the
|
|
|
|
|
* capacity to get work from the backup pools while still on the primary */ |
|
|
|
|
static bool cnx_needed(struct pool *pool) |
|
|
|
@ -4829,6 +4839,11 @@ static bool cnx_needed(struct pool *pool)
@@ -4829,6 +4839,11 @@ static bool cnx_needed(struct pool *pool)
|
|
|
|
|
* connection open. */ |
|
|
|
|
if (pool->sshares) |
|
|
|
|
return true; |
|
|
|
|
/* If the pool has only just come to life and is higher priority than
|
|
|
|
|
* the current pool keep the connection open so we can fail back to |
|
|
|
|
* it. */ |
|
|
|
|
if (pool_strategy == POOL_FAILOVER && pool->prio < cp_prio()) |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -5173,19 +5188,9 @@ out:
@@ -5173,19 +5188,9 @@ out:
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline int cp_prio(void) |
|
|
|
|
{ |
|
|
|
|
int prio; |
|
|
|
|
|
|
|
|
|
mutex_lock(&control_lock); |
|
|
|
|
prio = currentpool->prio; |
|
|
|
|
mutex_unlock(&control_lock); |
|
|
|
|
return prio; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void pool_resus(struct pool *pool) |
|
|
|
|
{ |
|
|
|
|
if (pool->prio < cp_prio() && pool_strategy == POOL_FAILOVER) { |
|
|
|
|
if (pool_strategy == POOL_FAILOVER && pool->prio < cp_prio()) { |
|
|
|
|
applog(LOG_WARNING, "Pool %d %s alive", pool->pool_no, pool->rpc_url); |
|
|
|
|
switch_pools(NULL); |
|
|
|
|
} else |
|
|
|
|