Jens Axboe
310726c33a
block: be a bit more careful in checking for NULL bdev while polling
Wei reports a crash with an application using polled IO:
PGD 14265e067 P4D 14265e067 PUD 47ec50067 PMD 0
Oops: 0000 [#1] SMP
CPU: 0 PID: 21915 Comm: iocore_0 Kdump: loaded Tainted: G S 5.12.0-0_fbk12_clang_7346_g1bb6f2e7058f #1
Hardware name: Wiwynn Delta Lake MP T8/Delta Lake-Class2, BIOS Y3DLM08 04/10/2022
RIP: 0010:bio_poll+0x25/0x200
Code: 0f 1f 44 00 00 0f 1f 44 00 00 55 41 57 41 56 41 55 41 54 53 48 83 ec 28 65 48 8b 04 25 28 00 00 00 48 89 44 24 20 48 8b 47 08 <48> 8b 80 70 02 00 00 4c 8b 70 50 8b 6f 34 31 db 83 fd ff 75 25 65
RSP: 0018:ffffc90005fafdf8 EFLAGS: 00010292
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 74b43cd65dd66600
RDX: 0000000000000003 RSI: ffffc90005fafe78 RDI: ffff8884b614e140
RBP: ffff88849964df78 R08: 0000000000000000 R09: 0000000000000008
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88849964df00
R13: ffffc90005fafe78 R14: ffff888137d3c378 R15: 0000000000000001
FS: 00007fd195000640(0000) GS:ffff88903f400000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000270 CR3: 0000000466121001 CR4: 00000000007706f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
PKRU: 55555554
Call Trace:
iocb_bio_iopoll+0x1d/0x30
io_do_iopoll+0xac/0x250
__se_sys_io_uring_enter+0x3c5/0x5a0
? __x64_sys_write+0x89/0xd0
do_syscall_64+0x2d/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xae
RIP: 0033:0x94f225d
Code: 24 cc 00 00 00 41 8b 84 24 d0 00 00 00 c1 e0 04 83 e0 10 41 09 c2 8b 33 8b 53 04 4c 8b 43 18 4c 63 4b 0c b8 aa 01 00 00 0f 05 <85> c0 0f 88 85 00 00 00 29 03 45 84 f6 0f 84 88 00 00 00 41 f6 c7
RSP: 002b:00007fd194ffcd88 EFLAGS: 00000202 ORIG_RAX: 00000000000001aa
RAX: ffffffffffffffda RBX: 00007fd194ffcdc0 RCX: 00000000094f225d
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000007
RBP: 00007fd194ffcdb0 R08: 0000000000000000 R09: 0000000000000008
R10: 0000000000000001 R11: 0000000000000202 R12: 00007fd269d68030
R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
which is due to bio->bi_bdev being NULL. This can happen if we have two
tasks doing polled IO, and task B ends up completing IO from task A if
they are sharing a poll queue. If task B completes the IO and puts the
bio into our cache, then it can allocate that bio again before task A
is done polling for it. As that would necessitate a preempt between the
two tasks, it's enough to just be a bit more careful in checking for
whether or not bio->bi_bdev is NULL.
Reported-and-tested-by: Wei Zhang <wzhang@meta.com>
Cc: stable@vger.kernel.org
Fixes: be4d234d7a ("bio: add allocation cache abstraction")
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2023-02-24 13:19:59 -07:00
..
2022-09-03 11:29:03 -06:00
2022-04-23 07:15:26 -06:00
2022-12-01 09:16:46 -07:00
2023-02-14 14:24:09 -07:00
2023-02-03 08:20:05 -07:00
2023-02-07 10:20:59 -07:00
2023-01-29 15:18:33 -07:00
2023-02-16 11:05:41 -07:00
2023-02-24 13:19:56 -07:00
2022-08-26 10:57:41 -10:00
2023-02-14 14:24:09 -07:00
2022-07-14 12:14:30 -06:00
2023-02-14 14:24:09 -07:00
2023-02-14 14:24:09 -07:00
2023-02-24 13:19:59 -07:00
2022-10-11 17:42:58 -06:00
2022-11-30 11:09:00 -07:00
2022-11-23 10:38:54 -07:00
2023-02-09 09:38:16 -07:00
2022-12-13 10:43:59 -08:00
2022-09-30 07:49:09 -06:00
2023-02-09 09:38:16 -07:00
2023-02-09 09:38:16 -07:00
2022-06-27 06:29:12 -06:00
2023-02-14 14:24:09 -07:00
2023-02-14 14:24:09 -07:00
2023-02-03 08:20:05 -07:00
2022-09-26 19:09:31 -06:00
2022-09-15 00:25:17 -06:00
2023-01-29 15:18:34 -07:00
2023-02-16 19:39:15 -07:00
2022-08-22 10:07:53 -06:00
2022-07-06 06:46:26 -06:00
2023-02-03 08:20:05 -07:00
2022-06-17 07:31:05 -06:00
2022-08-22 10:07:53 -06:00
2022-08-22 10:07:53 -06:00
2023-02-06 09:22:29 -07:00
2021-11-29 06:41:29 -07:00
2023-02-09 09:38:16 -07:00
2022-09-12 00:10:34 -06:00
2022-06-27 06:29:12 -06:00
2022-08-22 10:07:53 -06:00
2023-02-09 08:11:25 -07:00
2022-11-02 08:35:34 -06:00
2021-12-22 23:38:29 -05:00
2021-02-22 06:33:48 -07:00
2023-02-03 08:20:05 -07:00
2023-02-03 08:20:05 -07:00
2023-02-03 08:20:05 -07:00
2023-02-03 08:20:04 -07:00
2021-12-14 17:23:05 -07:00
2023-02-09 09:38:16 -07:00
2023-02-14 14:24:09 -07:00
2022-09-26 19:17:28 -06:00
2020-07-31 16:29:47 -06:00
2023-02-03 08:20:05 -07:00
2023-02-03 08:20:05 -07:00
2023-02-21 09:23:22 -07:00
2023-02-17 06:15:57 -07:00
2022-08-02 17:22:54 -06:00
2022-10-25 08:25:10 -06:00
2022-12-16 03:54:54 -08:00
2022-02-02 07:49:59 -07:00
2023-02-09 09:38:16 -07:00
2022-10-23 18:59:17 -06:00
2023-01-29 15:18:34 -07:00
2023-02-17 06:15:57 -07:00
2022-11-16 15:19:56 -07:00
2023-02-17 06:15:57 -07:00
2022-06-27 06:29:12 -06:00
2023-01-05 08:50:10 -07:00
2023-01-30 09:42:42 -07:00
2022-12-25 13:38:09 -08:00
2022-05-02 14:06:20 -06:00
2022-11-28 19:27:45 -07:00
2022-08-22 07:52:51 -06:00
2023-02-17 06:15:53 -07:00
2022-03-07 12:48:35 -07:00