X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=drivers%2Fblock%2Fnbd.c;h=8b9622eb0a21b280bc30d60182fec9c521be8537;hb=9820b4dca0f9c6b7ab8b4307286cdace171b724d;hp=b076a0a53fb138ec697edb46e782bc6830603d7e;hpb=f4b64ae6745177642cd9610cfd7df0041e7fca58;p=linux-2.6-microblaze.git diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index b076a0a53fb1..8b9622eb0a21 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -1022,6 +1022,12 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg, if (!sock) return err; + /* + * We need to make sure we don't get any errant requests while we're + * reallocating the ->socks array. + */ + blk_mq_freeze_queue(nbd->disk->queue); + if (!netlink && !nbd->task_setup && !test_bit(NBD_RT_BOUND, &config->runtime_flags)) nbd->task_setup = current; @@ -1060,10 +1066,12 @@ 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); + blk_mq_unfreeze_queue(nbd->disk->queue); return 0; put_socket: + blk_mq_unfreeze_queue(nbd->disk->queue); sockfd_put(sock); return err; }