]>
Commit | Line | Data |
---|---|---|
a65d4bac GKH |
1 | From foo@baz Sat Jul 28 10:25:26 CEST 2018 |
2 | From: Jens Remus <jremus@linux.ibm.com> | |
3 | Date: Thu, 17 May 2018 19:15:05 +0200 | |
4 | Subject: scsi: zfcp: assert that the ERP lock is held when tracing a recovery trigger | |
5 | ||
6 | From: Jens Remus <jremus@linux.ibm.com> | |
7 | ||
8 | [ Upstream commit 9e156c54ace310ce7fb1cd960e62416947f3d47c ] | |
9 | ||
10 | Otherwise iterating with list_for_each() over the adapter->erp_ready_head | |
11 | and adapter->erp_running_head lists can lead to an infinite loop. See commit | |
12 | "zfcp: fix infinite iteration on erp_ready_head list". | |
13 | ||
14 | The run-time check is only performed for debug kernels which have the kernel | |
15 | lock validator enabled. Following is an example of the warning that is | |
16 | reported, if the ERP lock is not held when calling zfcp_dbf_rec_trig(): | |
17 | ||
18 | WARNING: CPU: 0 PID: 604 at drivers/s390/scsi/zfcp_dbf.c:288 zfcp_dbf_rec_trig+0x172/0x188 | |
19 | Modules linked in: ... | |
20 | CPU: 0 PID: 604 Comm: kworker/u128:3 Not tainted 4.16.0-... #1 | |
21 | Hardware name: IBM 2964 N96 702 (z/VM 6.4.0) | |
22 | Workqueue: zfcp_q_0.0.1906 zfcp_scsi_rport_work | |
23 | Krnl PSW : 00000000330fdbf9 00000000367e9728 (zfcp_dbf_rec_trig+0x172/0x188) | |
24 | R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:3 PM:0 RI:0 EA:3 | |
25 | Krnl GPRS: 00000000c57a5d99 3288200000000000 0000000000000000 000000006cc82740 | |
26 | 00000000009d09d6 0000000000000000 00000000000000ff 0000000000000000 | |
27 | 0000000000000000 0000000000e1b5fe 000000006de01d38 0000000076130958 | |
28 | 000000006cc82548 000000006de01a98 00000000009d09d6 000000006a6d3c80 | |
29 | Krnl Code: 00000000009d0ad2: eb7ff0b80004 lmg %r7,%r15,184(%r15) | |
30 | 00000000009d0ad8: c0f4000d7dd0 brcl 15,b80678 | |
31 | #00000000009d0ade: a7f40001 brc 15,9d0ae0 | |
32 | >00000000009d0ae2: a7f4ff7d brc 15,9d09dc | |
33 | 00000000009d0ae6: e340f0f00004 lg %r4,240(%r15) | |
34 | 00000000009d0aec: eb7ff0b80004 lmg %r7,%r15,184(%r15) | |
35 | 00000000009d0af2: 07f4 bcr 15,%r4 | |
36 | 00000000009d0af4: 0707 bcr 0,%r7 | |
37 | Call Trace: | |
38 | ([<00000000009d09d6>] zfcp_dbf_rec_trig+0x66/0x188) | |
39 | [<00000000009dd740>] zfcp_scsi_rport_work+0x98/0x190 | |
40 | [<0000000000169b34>] process_one_work+0x3d4/0x6f8 | |
41 | [<000000000016a08a>] worker_thread+0x232/0x418 | |
42 | [<000000000017219e>] kthread+0x166/0x178 | |
43 | [<0000000000b815ea>] kernel_thread_starter+0x6/0xc | |
44 | [<0000000000b815e4>] kernel_thread_starter+0x0/0xc | |
45 | 2 locks held by kworker/u128:3/604: | |
46 | #0: ((wq_completion)name){+.+.}, at: [<0000000082af1024>] process_one_work+0x1dc/0x6f8 | |
47 | #1: ((work_completion)(&port->rport_work)){+.+.}, at: [<0000000082af1024>] process_one_work+0x1dc/0x6f8 | |
48 | Last Breaking-Event-Address: | |
49 | [<00000000009d0ade>] zfcp_dbf_rec_trig+0x16e/0x188 | |
50 | ---[ end trace b2f4020572e2c124 ]--- | |
51 | ||
52 | Suggested-by: Steffen Maier <maier@linux.ibm.com> | |
53 | Signed-off-by: Jens Remus <jremus@linux.ibm.com> | |
54 | Reviewed-by: Benjamin Block <bblock@linux.ibm.com> | |
55 | Reviewed-by: Steffen Maier <maier@linux.ibm.com> | |
56 | Signed-off-by: Steffen Maier <maier@linux.ibm.com> | |
57 | Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> | |
58 | ||
59 | Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> | |
60 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
61 | --- | |
62 | drivers/s390/scsi/zfcp_dbf.c | 2 ++ | |
63 | 1 file changed, 2 insertions(+) | |
64 | ||
65 | --- a/drivers/s390/scsi/zfcp_dbf.c | |
66 | +++ b/drivers/s390/scsi/zfcp_dbf.c | |
67 | @@ -285,6 +285,8 @@ void zfcp_dbf_rec_trig(char *tag, struct | |
68 | struct list_head *entry; | |
69 | unsigned long flags; | |
70 | ||
71 | + lockdep_assert_held(&adapter->erp_lock); | |
72 | + | |
73 | if (unlikely(!debug_level_enabled(dbf->rec, level))) | |
74 | return; | |
75 |