]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
SCSI: scsi_transport_fc: Fix synchronization issue while deleting vport
authorGal Rosen <galr@storwize.com>
Thu, 21 Jan 2010 08:15:32 +0000 (10:15 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 1 Apr 2010 23:01:32 +0000 (16:01 -0700)
commitae56fa68db2da81677393b9a3b777b96ac683cbb
tree5e6f388b8e3fa4d4dd2a71d77bbef2d3f5e6fb44
parent82df18799be6189a905651888ea471ef11e01807
SCSI: scsi_transport_fc: Fix synchronization issue while deleting vport

commit 0d9dc7c8b9b7fa0f53647423b41056ee1beed735 upstream.

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: Gal Rosen <galr@storwize.com>
Acked-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/scsi/scsi_transport_fc.c