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

Commit 6b183334 authored by Swen Schillig's avatar Swen Schillig Committed by James Bottomley
Browse files

[SCSI] zfcp: Remove STATUS_COMMON_REMOVE flag as it is not required anymore



The flag ZFCP_STATUS_COMMON_REMOVE was used to indicate that a
resource is not ready to be used or about to be removed from the
system. This is now better done by an improved list handling
and therefore the additional indicator is not required anymore.

Signed-off-by: default avatarSwen Schillig <swen@vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent c1fad417
Loading
Loading
Loading
Loading
+7 −20
Original line number Original line Diff line number Diff line
@@ -245,9 +245,9 @@ struct zfcp_unit *zfcp_get_unit_by_lun(struct zfcp_port *port, u64 fcp_lun)


	read_lock_irqsave(&port->unit_list_lock, flags);
	read_lock_irqsave(&port->unit_list_lock, flags);
	list_for_each_entry(unit, &port->unit_list, list)
	list_for_each_entry(unit, &port->unit_list, list)
		if ((unit->fcp_lun == fcp_lun) &&
		if (unit->fcp_lun == fcp_lun) {
		    !(atomic_read(&unit->status) & ZFCP_STATUS_COMMON_REMOVE)) {
			if (!get_device(&unit->sysfs_device))
			get_device(&unit->sysfs_device);
				unit = NULL;
			read_unlock_irqrestore(&port->unit_list_lock, flags);
			read_unlock_irqrestore(&port->unit_list_lock, flags);
			return unit;
			return unit;
		}
		}
@@ -270,9 +270,9 @@ struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter,


	read_lock_irqsave(&adapter->port_list_lock, flags);
	read_lock_irqsave(&adapter->port_list_lock, flags);
	list_for_each_entry(port, &adapter->port_list, list)
	list_for_each_entry(port, &adapter->port_list, list)
		if ((port->wwpn == wwpn) &&
		if (port->wwpn == wwpn) {
		    !(atomic_read(&port->status) & ZFCP_STATUS_COMMON_REMOVE)) {
			if (!get_device(&port->sysfs_device))
			get_device(&port->sysfs_device);
				port = NULL;
			read_unlock_irqrestore(&adapter->port_list_lock, flags);
			read_unlock_irqrestore(&adapter->port_list_lock, flags);
			return port;
			return port;
		}
		}
@@ -334,9 +334,6 @@ struct zfcp_unit *zfcp_unit_enqueue(struct zfcp_port *port, u64 fcp_lun)
	}
	}
	retval = -EINVAL;
	retval = -EINVAL;


	/* mark unit unusable as long as sysfs registration is not complete */
	atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &unit->status);

	INIT_WORK(&unit->scsi_work, zfcp_scsi_scan);
	INIT_WORK(&unit->scsi_work, zfcp_scsi_scan);


	spin_lock_init(&unit->latencies.lock);
	spin_lock_init(&unit->latencies.lock);
@@ -360,7 +357,6 @@ struct zfcp_unit *zfcp_unit_enqueue(struct zfcp_port *port, u64 fcp_lun)
	list_add_tail(&unit->list, &port->unit_list);
	list_add_tail(&unit->list, &port->unit_list);
	write_unlock_irq(&port->unit_list_lock);
	write_unlock_irq(&port->unit_list_lock);


	atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &unit->status);
	atomic_set_mask(ZFCP_STATUS_COMMON_RUNNING, &unit->status);
	atomic_set_mask(ZFCP_STATUS_COMMON_RUNNING, &unit->status);


	return unit;
	return unit;
@@ -565,17 +561,12 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device)


	adapter->service_level.seq_print = zfcp_print_sl;
	adapter->service_level.seq_print = zfcp_print_sl;


	/* mark adapter unusable as long as sysfs registration is not complete */
	atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);

	dev_set_drvdata(&ccw_device->dev, adapter);
	dev_set_drvdata(&ccw_device->dev, adapter);


	if (sysfs_create_group(&ccw_device->dev.kobj,
	if (sysfs_create_group(&ccw_device->dev.kobj,
			       &zfcp_sysfs_adapter_attrs))
			       &zfcp_sysfs_adapter_attrs))
		goto failed;
		goto failed;


	atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);

	if (!zfcp_adapter_scsi_register(adapter))
	if (!zfcp_adapter_scsi_register(adapter))
		return adapter;
		return adapter;


@@ -692,9 +683,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
	port->sysfs_device.parent = &adapter->ccw_device->dev;
	port->sysfs_device.parent = &adapter->ccw_device->dev;
	port->sysfs_device.release = zfcp_port_release;
	port->sysfs_device.release = zfcp_port_release;


	/* mark port unusable as long as sysfs registration is not complete */
	atomic_set_mask(status | ZFCP_STATUS_COMMON_REMOVE, &port->status);

	if (dev_set_name(&port->sysfs_device, "0x%016llx",
	if (dev_set_name(&port->sysfs_device, "0x%016llx",
			 (unsigned long long)wwpn)) {
			 (unsigned long long)wwpn)) {
		kfree(port);
		kfree(port);
@@ -715,8 +703,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
	list_add_tail(&port->list, &adapter->port_list);
	list_add_tail(&port->list, &adapter->port_list);
	write_unlock_irq(&adapter->port_list_lock);
	write_unlock_irq(&adapter->port_list_lock);


	atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &port->status);
	atomic_set_mask(status | ZFCP_STATUS_COMMON_RUNNING, &port->status);
	atomic_set_mask(ZFCP_STATUS_COMMON_RUNNING, &port->status);


	return port;
	return port;


+1 −6
Original line number Original line Diff line number Diff line
@@ -113,16 +113,11 @@ static void zfcp_ccw_remove(struct ccw_device *cdev)
	write_lock_irq(&adapter->port_list_lock);
	write_lock_irq(&adapter->port_list_lock);
	list_for_each_entry_safe(port, p, &adapter->port_list, list) {
	list_for_each_entry_safe(port, p, &adapter->port_list, list) {
		write_lock(&port->unit_list_lock);
		write_lock(&port->unit_list_lock);
		list_for_each_entry_safe(unit, u, &port->unit_list, list) {
		list_for_each_entry_safe(unit, u, &port->unit_list, list)
			atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE,
					&unit->status);
			list_move(&unit->list, &unit_remove_lh);
			list_move(&unit->list, &unit_remove_lh);
		}
		write_unlock(&port->unit_list_lock);
		write_unlock(&port->unit_list_lock);
		atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &port->status);
		list_move(&port->list, &port_remove_lh);
		list_move(&port->list, &port_remove_lh);
	}
	}
	atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
	write_unlock_irq(&adapter->port_list_lock);
	write_unlock_irq(&adapter->port_list_lock);
	zfcp_ccw_adapter_put(adapter); /* put from zfcp_ccw_adapter_by_cdev */
	zfcp_ccw_adapter_put(adapter); /* put from zfcp_ccw_adapter_by_cdev */


+0 −1
Original line number Original line Diff line number Diff line
@@ -205,7 +205,6 @@ struct zfcp_ls_adisc {
#define ZFCP_COMMON_FLAGS			0xfff00000
#define ZFCP_COMMON_FLAGS			0xfff00000


/* common status bits */
/* common status bits */
#define ZFCP_STATUS_COMMON_REMOVE		0x80000000
#define ZFCP_STATUS_COMMON_RUNNING		0x40000000
#define ZFCP_STATUS_COMMON_RUNNING		0x40000000
#define ZFCP_STATUS_COMMON_ERP_FAILED		0x20000000
#define ZFCP_STATUS_COMMON_ERP_FAILED		0x20000000
#define ZFCP_STATUS_COMMON_UNBLOCKED		0x10000000
#define ZFCP_STATUS_COMMON_UNBLOCKED		0x10000000
+4 −2
Original line number Original line Diff line number Diff line
@@ -174,7 +174,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need,


	switch (need) {
	switch (need) {
	case ZFCP_ERP_ACTION_REOPEN_UNIT:
	case ZFCP_ERP_ACTION_REOPEN_UNIT:
		get_device(&unit->sysfs_device);
		if (!get_device(&unit->sysfs_device))
			return NULL;
		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &unit->status);
		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &unit->status);
		erp_action = &unit->erp_action;
		erp_action = &unit->erp_action;
		if (!(atomic_read(&unit->status) & ZFCP_STATUS_COMMON_RUNNING))
		if (!(atomic_read(&unit->status) & ZFCP_STATUS_COMMON_RUNNING))
@@ -183,7 +184,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need,


	case ZFCP_ERP_ACTION_REOPEN_PORT:
	case ZFCP_ERP_ACTION_REOPEN_PORT:
	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
		get_device(&port->sysfs_device);
		if (!get_device(&port->sysfs_device))
			return NULL;
		zfcp_erp_action_dismiss_port(port);
		zfcp_erp_action_dismiss_port(port);
		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
		erp_action = &port->erp_action;
		erp_action = &port->erp_action;
+0 −1
Original line number Original line Diff line number Diff line
@@ -589,7 +589,6 @@ static void zfcp_fc_validate_port(struct zfcp_port *port, struct list_head *lh)
	    !list_empty(&port->unit_list))
	    !list_empty(&port->unit_list))
		return;
		return;


	atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &port->status);
	list_move_tail(&port->list, lh);
	list_move_tail(&port->list, lh);
}
}


Loading