• U
    scsi: cxlflash: Acquire semaphore before invoking ioctl services · 32a9ae41
    Uma Krishnan 提交于
    When a superpipe process that makes use of virtual LUNs is terminated or
    killed abruptly, there is a possibility that the cxlflash driver could hang
    and deprive other operations on the adapter.
    
    The release fop registered to be invoked on a context close, detaches every
    LUN associated with the context. The underlying service to detach the LUN
    assumes it has been called with the read semaphore held, and releases the
    semaphore before any operation that could be time consuming.
    
    When invoked without holding the read semaphore, an opportunity is created
    for the semaphore's count to become negative when it is temporarily released
    during one of these potential lengthy operations. This negative count
    results in subsequent acquisition attempts taking forever, leading to the
    hang.
    
    To support the current design point of holding the semaphore on the ioctl()
    paths, the release fop should acquire it before invoking any ioctl services.
    Signed-off-by: NUma Krishnan <ukrishn@linux.vnet.ibm.com>
    Acked-by: NMatthew R. Ochs <mrochs@linux.vnet.ibm.com>
    Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
    32a9ae41
superpipe.c 61.1 KB