00636 Unable to handle kernel NULL pointer dereference at virtual address
00000000000000b0
00636 Mem abort info:
00636 ESR = 0x0000000096000005
00636 EC = 0x25: DABT (current EL), IL = 32 bits
00636 SET = 0, FnV = 0
00636 EA = 0, S1PTW = 0
00636 FSC = 0x05: level 1 translation fault
00636 Data abort info:
00636 ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
00636 CM = 0, WnR = 0, TnD = 0, TagAccess = 0
00636 GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
00636 user pgtable: 4k pages, 39-bit VAs, pgdp=
0000000101b10000
00636 [
00000000000000b0] pgd=
0000000000000000, p4d=
0000000000000000, pud=
0000000000000000
00636 Internal error: Oops:
0000000096000005 [#1] SMP
00636 Modules linked in:
00636 CPU: 12 UID: 0 PID: 79369 Comm: cat Not tainted
6.14.0-rc6-ktest-g3783b8973ab7 #17757
00636 Hardware name: linux,dummy-virt (DT)
00636 pstate:
20001005 (nzCv daif -PAN -UAO -TCO -DIT +SSBS BTYPE=--)
00636 pc : print_chain+0xb8/0x170
00636 lr : print_chain+0xa0/0x170
00636 sp :
ffffff80d9c1bbb0
00636 x29:
ffffff80d9c1bbb0 x28:
0000000000000002 x27:
ffffff80c1be8250
00636 x26:
ffffff80dd9b0000 x25:
0000000000000020 x24:
000000000000002d
00636 x23:
000000000000003c x22:
ffffffc080a54518 x21:
ffffff80da6e00d0
00636 x20:
ffffff80da6e0170 x19:
ffffff80c1a1d240 x18:
00000000ffffffff
00636 x17:
3535303937202d3c x16:
203139202d3c2035 x15:
00000000ffffffff
00636 x14:
0000000000000000 x13:
ffffff80d71b63f1 x12:
0000000000000006
00636 x11:
ffffffc080beb1c0 x10:
0000000000000020 x9 :
00000000000134cc
00636 x8 :
0000000000000020 x7 :
0000000000000004 x6 :
0000000000000020
00636 x5 :
ffffff80d71b63f7 x4 :
ffffffc080a5451b x3 :
0000000000000000
00636 x2 :
0000000000000000 x1 :
0000000000000000 x0 :
0000000000000000
00636 Call trace:
00636 print_chain+0xb8/0x170 (P)
00636 bch2_check_for_deadlock+0x444/0x5a0
00636 bch2_btree_deadlock_read+0xb4/0x1c8
00636 full_proxy_read+0x74/0xd8
00636 vfs_read+0x90/0x300
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
struct trans_waiting_for_lock *i;
for (i = g->g; i != g->g + g->nr; i++) {
- struct task_struct *task = i->trans->locking_wait.task;
+ struct task_struct *task = READ_ONCE(i->trans->locking_wait.task);
if (i != g->g)
prt_str(out, "<- ");
- prt_printf(out, "%u ", task ?task->pid : 0);
+ prt_printf(out, "%u ", task ? task->pid : 0);
}
prt_newline(out);
}