Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Al Viro and committed by
Linus Torvalds
2fdb611d 91c7c568

+6 -4
+6 -4
drivers/scsi/ibmvscsi/ibmvstgt.c
··· 67 67 68 68 unsigned long liobn; 69 69 unsigned long riobn; 70 + struct srp_target *target; 70 71 }; 71 72 72 73 static struct workqueue_struct *vtgtd; ··· 686 685 return crq; 687 686 } 688 687 689 - static void handle_crq(void *data) 688 + static void handle_crq(struct work_struct *work) 690 689 { 691 - struct srp_target *target = (struct srp_target *) data; 692 - struct vio_port *vport = target_to_port(target); 690 + struct vio_port *vport = container_of(work, struct vio_port, crq_work); 691 + struct srp_target *target = vport->target; 693 692 struct viosrp_crq *crq; 694 693 int done = 0; 695 694 ··· 823 822 target->shost = shost; 824 823 vport->dma_dev = dev; 825 824 target->ldata = vport; 825 + vport->target = target; 826 826 err = srp_target_alloc(target, &dev->dev, INITIAL_SRP_LIMIT, 827 827 SRP_MAX_IU_LEN); 828 828 if (err) ··· 839 837 vport->liobn = dma[0]; 840 838 vport->riobn = dma[5]; 841 839 842 - INIT_WORK(&vport->crq_work, handle_crq, target); 840 + INIT_WORK(&vport->crq_work, handle_crq); 843 841 844 842 err = crq_queue_create(&vport->crq_queue, target); 845 843 if (err)