Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 161080
b: refs/heads/master
c: 4544683
h: refs/heads/master
v: v3
  • Loading branch information
Swen Schillig authored and James Bottomley committed Sep 5, 2009
1 parent 9a8e426 commit b8bfe6f
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 09a46c6e34ba152169b7400d266d2efb4c391a43
refs/heads/master: 4544683a4b1d4e65ccca8c736bac56a195a5206b
29 changes: 27 additions & 2 deletions trunk/drivers/s390/scsi/zfcp_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,6 @@ static int __init zfcp_module_init(void)
if (!zfcp_data.gid_pn_cache)
goto out_gid_cache;

zfcp_data.work_queue = create_singlethread_workqueue("zfcp_wq");

sema_init(&zfcp_data.config_sema, 1);
rwlock_init(&zfcp_data.config_lock);

Expand Down Expand Up @@ -458,6 +456,27 @@ static void zfcp_print_sl(struct seq_file *m, struct service_level *sl)
adapter->fsf_lic_version);
}

static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter)
{
char name[TASK_COMM_LEN];

snprintf(name, sizeof(name), "zfcp_q_%s",
dev_name(&adapter->ccw_device->dev));
adapter->work_queue = create_singlethread_workqueue(name);

if (adapter->work_queue)
return 0;
return -ENOMEM;
}

static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter)
{
if (adapter->work_queue)
destroy_workqueue(adapter->work_queue);
adapter->work_queue = NULL;

}

/**
* zfcp_adapter_enqueue - enqueue a new adapter to the list
* @ccw_device: pointer to the struct cc_device
Expand Down Expand Up @@ -504,6 +523,9 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
if (zfcp_adapter_debug_register(adapter))
goto debug_register_failed;

if (zfcp_setup_adapter_work_queue(adapter))
goto work_queue_failed;

init_waitqueue_head(&adapter->remove_wq);
init_waitqueue_head(&adapter->erp_thread_wqh);
init_waitqueue_head(&adapter->erp_done_wqh);
Expand Down Expand Up @@ -543,6 +565,8 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
return 0;

sysfs_failed:
zfcp_destroy_adapter_work_queue(adapter);
work_queue_failed:
zfcp_adapter_debug_unregister(adapter);
debug_register_failed:
dev_set_drvdata(&ccw_device->dev, NULL);
Expand Down Expand Up @@ -579,6 +603,7 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
if (!retval)
return;

zfcp_destroy_adapter_work_queue(adapter);
zfcp_adapter_debug_unregister(adapter);
zfcp_qdio_free(adapter);
zfcp_free_low_mem_buffers(adapter);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/s390/scsi/zfcp_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ struct zfcp_adapter {
struct work_struct scan_work;
struct service_level service_level;
atomic_t qdio_outb_full; /* queue full incidents */
struct workqueue_struct *work_queue;
};

struct zfcp_port {
Expand Down Expand Up @@ -573,7 +574,6 @@ struct zfcp_data {
struct kmem_cache *qtcb_cache;
struct kmem_cache *sr_buffer_cache;
struct kmem_cache *gid_pn_cache;
struct workqueue_struct *work_queue;
};

/********************** ZFCP SPECIFIC DEFINES ********************************/
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/s390/scsi/zfcp_erp.c
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,7 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
return zfcp_erp_open_ptp_port(act);
if (!port->d_id) {
zfcp_port_get(port);
if (!queue_work(zfcp_data.work_queue,
if (!queue_work(adapter->work_queue,
&port->gid_pn_work))
zfcp_port_put(port);
return ZFCP_ERP_CONTINUES;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/s390/scsi/zfcp_fc.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ void zfcp_fc_link_test_work(struct work_struct *work)
void zfcp_test_link(struct zfcp_port *port)
{
zfcp_port_get(port);
if (!queue_work(zfcp_data.work_queue, &port->test_link_work))
if (!queue_work(port->adapter->work_queue, &port->test_link_work))
zfcp_port_put(port);
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/s390/scsi/zfcp_fsf.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
zfcp_fsf_req_free(req);

atomic_inc(&adapter->stat_miss);
queue_work(zfcp_data.work_queue, &adapter->stat_work);
queue_work(adapter->work_queue, &adapter->stat_work);
}

static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req)
Expand Down
5 changes: 3 additions & 2 deletions trunk/drivers/s390/scsi/zfcp_scsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,7 @@ void zfcp_scsi_schedule_rport_register(struct zfcp_port *port)
zfcp_port_get(port);
port->rport_task = RPORT_ADD;

if (!queue_work(zfcp_data.work_queue, &port->rport_work))
if (!queue_work(port->adapter->work_queue, &port->rport_work))
zfcp_port_put(port);
}

Expand All @@ -581,7 +581,8 @@ void zfcp_scsi_schedule_rport_block(struct zfcp_port *port)
zfcp_port_get(port);
port->rport_task = RPORT_DEL;

if (port->rport && queue_work(zfcp_data.work_queue, &port->rport_work))
if (port->rport && queue_work(port->adapter->work_queue,
&port->rport_work))
return;

zfcp_port_put(port);
Expand Down

0 comments on commit b8bfe6f

Please sign in to comment.