* [patch 0/1] Fix warning in 2.6.31-rc1 triggered by FC pass-through code @ 2009-06-26 14:30 Christof Schmitt 2009-06-26 14:30 ` [patch 1/1] FC transport: Locking fix for common-code FC pass-through patch Christof Schmitt 0 siblings, 1 reply; 3+ messages in thread From: Christof Schmitt @ 2009-06-26 14:30 UTC (permalink / raw) To: James Bottomley, James Smart Cc: linux-scsi, linux-s390, schwidefsky, heiko.carstens The FC pass-through code triggers a warning in the block layer because __blk_run_queue is called with interrupts enabled, but this function requires being called with disabled interrupts. This patch fixes this by disabling interrupts in fc_bsg_goose_queue. -- Christof Schmitt ^ permalink raw reply [flat|nested] 3+ messages in thread
* [patch 1/1] FC transport: Locking fix for common-code FC pass-through patch 2009-06-26 14:30 [patch 0/1] Fix warning in 2.6.31-rc1 triggered by FC pass-through code Christof Schmitt @ 2009-06-26 14:30 ` Christof Schmitt 2009-06-26 15:19 ` James Smart 0 siblings, 1 reply; 3+ messages in thread From: Christof Schmitt @ 2009-06-26 14:30 UTC (permalink / raw) To: James Bottomley, James Smart Cc: linux-scsi, linux-s390, schwidefsky, heiko.carstens, Christof Schmitt [-- Attachment #1: 700-fc-locking.diff --] [-- Type: text/plain, Size: 3110 bytes --] From: Christof Schmitt <christof.schmitt@de.ibm.com> Fix this: ------------[ cut here ]------------ Badness at block/blk-core.c:244 CPU: 0 Tainted: G W 2.6.31-rc1-00004-gd3a263a #3 Process zfcp_wq (pid: 901, task: 000000002fb7a038, ksp: 000000002f02bc78) Krnl PSW : 0704300180000000 00000000002141ba (blk_remove_plug+0xb2/0xb8) R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3 Krnl GPRS: 0000000000000001 0000000000000001 0000000022811440 0000000022811798 000000000027ff4e 0000000000000000 0000000000000000 000000002f00f000 070000000006a0f4 000000002af70000 000000002af2a800 00000000228d1c00 0000000022811440 000000000050c708 000000002f02bca8 000000002f02bc80 Krnl Code: 00000000002141b0: b9140022 lgfr %r2,%r2 00000000002141b4: 07fe bcr 15,%r14 00000000002141b6: a7f40001 brc 15,2141b8 >00000000002141ba: a7f4ffbe brc 15,214136 00000000002141be: 0707 bcr 0,%r7 00000000002141c0: ebaff0680024 stmg %r10,%r15,104(%r15) 00000000002141c6: c0d00017c2a9 larl %r13,50c718 00000000002141cc: a7f13fc0 tmll %r15,16320 Call Trace: ([<000000000050e7d8>] C.272.16122+0x88/0x110) [<00000000002141ec>] __blk_run_queue+0x2c/0x154 [<000000000028013a>] fc_remote_port_add+0x85e/0x95c [<000000000037596e>] zfcp_scsi_rport_work+0xe6/0x148 [<000000000006908c>] worker_thread+0x25c/0x318 [<000000000006f10c>] kthread+0x94/0x9c [<000000000001c2b2>] kernel_thread_starter+0x6/0xc [<000000000001c2ac>] kernel_thread_starter+0x0/0xc INFO: lockdep is turned off. Last Breaking-Event-Address: [<00000000002141b6>] blk_remove_plug+0xae/0xb8 The FC pass-through support triggers the WARN_ON(!irqs_disabled()) in blk_plug_device. Since blk_plug_device requires being called with disabled interrupts, use spin_lock_irqsave in fc_bsg_goose_queue to disable the interrupts before calling into the block layer. Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> --- drivers/scsi/scsi_transport_fc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff -urpN linux-2.6/drivers/scsi/scsi_transport_fc.c linux-2.6-patched/drivers/scsi/scsi_transport_fc.c --- linux-2.6/drivers/scsi/scsi_transport_fc.c 2009-06-26 09:56:55.000000000 +0200 +++ linux-2.6-patched/drivers/scsi/scsi_transport_fc.c 2009-06-26 09:57:06.000000000 +0200 @@ -3670,13 +3670,14 @@ static void fc_bsg_goose_queue(struct fc_rport *rport) { int flagset; + unsigned long flags; if (!rport->rqst_q) return; get_device(&rport->dev); - spin_lock(rport->rqst_q->queue_lock); + spin_lock_irqsave(rport->rqst_q->queue_lock, flags); flagset = test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags) && !test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags); if (flagset) @@ -3684,7 +3685,7 @@ fc_bsg_goose_queue(struct fc_rport *rpor __blk_run_queue(rport->rqst_q); if (flagset) queue_flag_clear(QUEUE_FLAG_REENTER, rport->rqst_q); - spin_unlock(rport->rqst_q->queue_lock); + spin_unlock_irqrestore(rport->rqst_q->queue_lock, flags); put_device(&rport->dev); } ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch 1/1] FC transport: Locking fix for common-code FC pass-through patch 2009-06-26 14:30 ` [patch 1/1] FC transport: Locking fix for common-code FC pass-through patch Christof Schmitt @ 2009-06-26 15:19 ` James Smart 0 siblings, 0 replies; 3+ messages in thread From: James Smart @ 2009-06-26 15:19 UTC (permalink / raw) To: Christof Schmitt Cc: James Bottomley, linux-scsi@vger.kernel.org, linux-s390@vger.kernel.org, schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com I had tried to remind James that he needed this patch when he pulled in the pass-thru code. Acked-by: James Smart <james.smart@emulex.com> -- james s Christof Schmitt wrote: > From: Christof Schmitt <christof.schmitt@de.ibm.com> > > Fix this: > ------------[ cut here ]------------ > Badness at block/blk-core.c:244 > CPU: 0 Tainted: G W 2.6.31-rc1-00004-gd3a263a #3 > Process zfcp_wq (pid: 901, task: 000000002fb7a038, ksp: 000000002f02bc78) > Krnl PSW : 0704300180000000 00000000002141ba (blk_remove_plug+0xb2/0xb8) > R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3 > Krnl GPRS: 0000000000000001 0000000000000001 0000000022811440 0000000022811798 > 000000000027ff4e 0000000000000000 0000000000000000 000000002f00f000 > 070000000006a0f4 000000002af70000 000000002af2a800 00000000228d1c00 > 0000000022811440 000000000050c708 000000002f02bca8 000000002f02bc80 > Krnl Code: 00000000002141b0: b9140022 lgfr %r2,%r2 > 00000000002141b4: 07fe bcr 15,%r14 > 00000000002141b6: a7f40001 brc 15,2141b8 > >00000000002141ba: a7f4ffbe brc 15,214136 > 00000000002141be: 0707 bcr 0,%r7 > 00000000002141c0: ebaff0680024 stmg %r10,%r15,104(%r15) > 00000000002141c6: c0d00017c2a9 larl %r13,50c718 > 00000000002141cc: a7f13fc0 tmll %r15,16320 > Call Trace: > ([<000000000050e7d8>] C.272.16122+0x88/0x110) > [<00000000002141ec>] __blk_run_queue+0x2c/0x154 > [<000000000028013a>] fc_remote_port_add+0x85e/0x95c > [<000000000037596e>] zfcp_scsi_rport_work+0xe6/0x148 > [<000000000006908c>] worker_thread+0x25c/0x318 > [<000000000006f10c>] kthread+0x94/0x9c > [<000000000001c2b2>] kernel_thread_starter+0x6/0xc > [<000000000001c2ac>] kernel_thread_starter+0x0/0xc > INFO: lockdep is turned off. > Last Breaking-Event-Address: > [<00000000002141b6>] blk_remove_plug+0xae/0xb8 > > The FC pass-through support triggers the WARN_ON(!irqs_disabled()) in > blk_plug_device. Since blk_plug_device requires being called with > disabled interrupts, use spin_lock_irqsave in fc_bsg_goose_queue to > disable the interrupts before calling into the block layer. > > Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> > --- > > drivers/scsi/scsi_transport_fc.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff -urpN linux-2.6/drivers/scsi/scsi_transport_fc.c linux-2.6-patched/drivers/scsi/scsi_transport_fc.c > --- linux-2.6/drivers/scsi/scsi_transport_fc.c 2009-06-26 09:56:55.000000000 +0200 > +++ linux-2.6-patched/drivers/scsi/scsi_transport_fc.c 2009-06-26 09:57:06.000000000 +0200 > @@ -3670,13 +3670,14 @@ static void > fc_bsg_goose_queue(struct fc_rport *rport) > { > int flagset; > + unsigned long flags; > > if (!rport->rqst_q) > return; > > get_device(&rport->dev); > > - spin_lock(rport->rqst_q->queue_lock); > + spin_lock_irqsave(rport->rqst_q->queue_lock, flags); > flagset = test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags) && > !test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags); > if (flagset) > @@ -3684,7 +3685,7 @@ fc_bsg_goose_queue(struct fc_rport *rpor > __blk_run_queue(rport->rqst_q); > if (flagset) > queue_flag_clear(QUEUE_FLAG_REENTER, rport->rqst_q); > - spin_unlock(rport->rqst_q->queue_lock); > + spin_unlock_irqrestore(rport->rqst_q->queue_lock, flags); > > put_device(&rport->dev); > } > > > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-06-26 15:19 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-06-26 14:30 [patch 0/1] Fix warning in 2.6.31-rc1 triggered by FC pass-through code Christof Schmitt 2009-06-26 14:30 ` [patch 1/1] FC transport: Locking fix for common-code FC pass-through patch Christof Schmitt 2009-06-26 15:19 ` James Smart
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.