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

Commit 048225e3 authored by Martin Petermann's avatar Martin Petermann Committed by James Bottomley
Browse files

[SCSI] zfcp: remove unit will fail if add unit is not finished



On some hardware it can take some time to add a unit. If
some remove this unit during this process the remove will
fail.

Signed-off-by: default avatarMartin Petermann <martin@linux.vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent d81ad31c
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -254,12 +254,21 @@ static ssize_t zfcp_sysfs_unit_remove_store(struct device *dev,

	write_lock_irq(&zfcp_data.config_lock);
	unit = zfcp_get_unit_by_lun(port, fcp_lun);
	if (unit && (atomic_read(&unit->refcount) == 0)) {
	if (unit) {
		write_unlock_irq(&zfcp_data.config_lock);
		/* wait for possible timeout during SCSI probe */
		flush_work(&unit->scsi_work);
		write_lock_irq(&zfcp_data.config_lock);

		if (atomic_read(&unit->refcount) == 0) {
			zfcp_unit_get(unit);
		atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &unit->status);
			atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE,
					&unit->status);
			list_move(&unit->list, &unit_remove_lh);
	} else
		} else {
			unit = NULL;
		}
	}

	write_unlock_irq(&zfcp_data.config_lock);