• Chris Leech's avatar
    nvme: fix RCU hole that allowed for endless looping in multipath round robin · d6d67427
    Chris Leech authored
    Make nvme_ns_remove match the assumptions elsewhere.
    
    1) !NVME_NS_READY needs to be srcu synchronized to make sure nothing is
       running in __nvme_find_path or nvme_round_robin_path that will
       re-assign this ns to current_path.
    
    2) Any matching current_path entries need to be cleared before removing
       from the siblings list, to prevent calling nvme_round_robin_path with
       an "old" ns that's off list.
    
    3) Finally the list_del_rcu can happen, and then synchronize again
       before releasing any reference counts.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    d6d67427
core.c 128 KB