• Gal Rosen's avatar
    [SCSI] scsi_transport_fc: Fix synchronization issue while deleting vport · 0d9dc7c8
    Gal Rosen authored
    The issue occur while deleting 60 virtual ports through the sys
    interface /sys/class/fc_vports/vport-X/vport_delete. It happen while in
    a mistake each request sent twice for the same vport. This interface is
    asynchronous, entering the delete request into a work queue, allowing
    more than one request to enter to the delete work queue. The result is a
    NULL pointer. The first request already delete the vport, while the
    second request got a pointer to the vport before the device destroyed.
    Re-create vport later cause system freeze.
    
    Solution: Check vport flags before entering the request to the work queue.
    
    [jejb: fixed int<->long problem on spinlock flags variable]
    Signed-off-by: default avatarGal Rosen <galr@storwize.com>
    Acked-by: default avatarJames Smart <james.smart@emulex.com>
    Cc: Stable Tree <stable@kernel.org>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
    0d9dc7c8
scsi_transport_fc.c 117 KB