Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 260f4aed authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen
Browse files

scsi: scsi_transport_fc: return -EBUSY for deleted vport



When trying to delete a vport via 'vport_delete' sysfs attribute we
should be checking if the port is already in state VPORT_DELETING; if so
there's no need to do anything.

Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 50292710
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1286,7 +1286,7 @@ store_fc_vport_delete(struct device *dev, struct device_attribute *attr,
	unsigned long flags;

	spin_lock_irqsave(shost->host_lock, flags);
	if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) {
	if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING | FC_VPORT_DELETING)) {
		spin_unlock_irqrestore(shost->host_lock, flags);
		return -EBUSY;
	}
@@ -2430,8 +2430,10 @@ fc_remove_host(struct Scsi_Host *shost)
	spin_lock_irqsave(shost->host_lock, flags);

	/* Remove any vports */
	list_for_each_entry_safe(vport, next_vport, &fc_host->vports, peers)
	list_for_each_entry_safe(vport, next_vport, &fc_host->vports, peers) {
		vport->flags |= FC_VPORT_DELETING;
		fc_queue_work(shost, &vport->vport_delete_work);
	}

	/* Remove any remote ports */
	list_for_each_entry_safe(rport, next_rport,