diff options
Diffstat (limited to 'drivers/block/nbd.c')
| -rw-r--r-- | drivers/block/nbd.c | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 2592bd19ebc1..6463d0e8d0ce 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -1473,7 +1473,17 @@ static int nbd_start_device(struct nbd_device *nbd)  		return -EINVAL;  	} -	blk_mq_update_nr_hw_queues(&nbd->tag_set, config->num_connections); +retry: +	mutex_unlock(&nbd->config_lock); +	blk_mq_update_nr_hw_queues(&nbd->tag_set, num_connections); +	mutex_lock(&nbd->config_lock); + +	/* if another code path updated nr_hw_queues, retry until succeed */ +	if (num_connections != config->num_connections) { +		num_connections = config->num_connections; +		goto retry; +	} +  	nbd->pid = task_pid_nr(current);  	nbd_parse_flags(nbd); | 
