Commit 2fdb611d authored by Al Viro's avatar Al Viro Committed by Linus Torvalds

[PATCH] ... and then some more work_struct-induced breakage (ibmvscsi)

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 91c7c568
...@@ -67,6 +67,7 @@ struct vio_port { ...@@ -67,6 +67,7 @@ struct vio_port {
unsigned long liobn; unsigned long liobn;
unsigned long riobn; unsigned long riobn;
struct srp_target *target;
}; };
static struct workqueue_struct *vtgtd; static struct workqueue_struct *vtgtd;
...@@ -685,10 +686,10 @@ static inline struct viosrp_crq *next_crq(struct crq_queue *queue) ...@@ -685,10 +686,10 @@ static inline struct viosrp_crq *next_crq(struct crq_queue *queue)
return crq; return crq;
} }
static void handle_crq(void *data) static void handle_crq(struct work_struct *work)
{ {
struct srp_target *target = (struct srp_target *) data; struct vio_port *vport = container_of(work, struct vio_port, crq_work);
struct vio_port *vport = target_to_port(target); struct srp_target *target = vport->target;
struct viosrp_crq *crq; struct viosrp_crq *crq;
int done = 0; int done = 0;
...@@ -822,6 +823,7 @@ static int ibmvstgt_probe(struct vio_dev *dev, const struct vio_device_id *id) ...@@ -822,6 +823,7 @@ static int ibmvstgt_probe(struct vio_dev *dev, const struct vio_device_id *id)
target->shost = shost; target->shost = shost;
vport->dma_dev = dev; vport->dma_dev = dev;
target->ldata = vport; target->ldata = vport;
vport->target = target;
err = srp_target_alloc(target, &dev->dev, INITIAL_SRP_LIMIT, err = srp_target_alloc(target, &dev->dev, INITIAL_SRP_LIMIT,
SRP_MAX_IU_LEN); SRP_MAX_IU_LEN);
if (err) if (err)
...@@ -837,7 +839,7 @@ static int ibmvstgt_probe(struct vio_dev *dev, const struct vio_device_id *id) ...@@ -837,7 +839,7 @@ static int ibmvstgt_probe(struct vio_dev *dev, const struct vio_device_id *id)
vport->liobn = dma[0]; vport->liobn = dma[0];
vport->riobn = dma[5]; vport->riobn = dma[5];
INIT_WORK(&vport->crq_work, handle_crq, target); INIT_WORK(&vport->crq_work, handle_crq);
err = crq_queue_create(&vport->crq_queue, target); err = crq_queue_create(&vport->crq_queue, target);
if (err) if (err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment