• Keith Busch's avatar
    nvme: Remove RCU namespace protection · 32f0c4af
    Keith Busch authored
    We can't sleep with RCU read lock held, but we need to do potentially
    blocking stuff to namespace queues when iterating the list. This patch
    removes the RCU locking and holds a mutex instead.
    
    To prevent deadlocks, this patch removes holding the mutex during
    namespace scanning and removal. The unlocked namespace scanning is made
    safe by holding a reference to the namespace being scanned.
    
    List iteration that does IO has to be unlocked to allow error recovery.
    The caller must ensure the list can not be manipulated during such an
    event, so this patch adds a comment explaining this requirement to the
    only function that iterates an unlocked list. All callers currently
    meet this requirement, so no further changes required.
    
    List iterations that do not do IO can safely use the lock since it couldn't
    block recovery from missing forced IO completions.
    
    Reported-by: Ming Lin <mlin at kernel.org>
    [fixes 0bf77e9d nvme: switch to RCU freeing the namespace]
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    32f0c4af
core.c 46.3 KB