• Mike Christie's avatar
    nbd: fix max number of supported devs · 9f0f39c9
    Mike Christie authored
    commit e9e006f5 upstream.
    
    This fixes a bug added in 4.10 with commit:
    
    commit 9561a7ad
    Author: Josef Bacik <jbacik@fb.com>
    Date:   Tue Nov 22 14:04:40 2016 -0500
    
        nbd: add multi-connection support
    
    that limited the number of devices to 256. Before the patch we could
    create 1000s of devices, but the patch switched us from using our
    own thread to using a work queue which has a default limit of 256
    active works.
    
    The problem is that our recv_work function sits in a loop until
    disconnection but only handles IO for one connection. The work is
    started when the connection is started/restarted, but if we end up
    creating 257 or more connections, the queue_work call just queues
    connection257+'s recv_work and that waits for connection 1 - 256's
    recv_work to be disconnected and that work instance completing.
    
    Instead of reverting back to kthreads, this has us allocate a
    workqueue_struct per device, so we can block in the work.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    9f0f39c9
nbd.c 56.6 KB