diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 43cff01a5a67..060c82222063 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -1037,10 +1037,12 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg, return -EBUSY; } + mutex_lock(&nbd->config_lock); socks = krealloc(config->socks, (config->num_connections + 1) * sizeof(struct nbd_sock *), GFP_KERNEL); if (!socks) { sockfd_put(sock); + mutex_unlock(&nbd->config_lock); return -ENOMEM; } @@ -1049,6 +1051,7 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg, nsock = kzalloc(sizeof(struct nbd_sock), GFP_KERNEL); if (!nsock) { sockfd_put(sock); + mutex_unlock(&nbd->config_lock); return -ENOMEM; } @@ -1061,6 +1064,7 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg, nsock->cookie = 0; socks[config->num_connections++] = nsock; atomic_inc(&config->live_connections); + mutex_unlock(&nbd->config_lock); return 0; }