Opcode handlers like POLL_ADD will use ->async_data as the pointer for double poll handling, which is a bit different than the usual case where it's strictly gated by the REQ_F_ASYNC_DATA flag. Be a bit more proactive in handling ->async_data, and clear it to NULL as part of regular init. Init is touching that cacheline anyway, so might as well clear it.
Unified · Split
| @@ -2119,6 +2119,7 @@ static int io_init_req(struct io_ring_ctx *ctx, struct io_kiocb *req, · 2118 unmodified lines | ||
| 2119 | 2119 | req->file = NULL; |
| 2120 | 2120 | req->tctx = current->io_uring; |
| 2121 | 2121 | req->cancel_seq_set = false; |
| 2122 | + req->async_data = NULL; | |
| 2122 | 2123 | |
| 2123 | 2124 | if (unlikely(opcode >= IORING_OP_LAST)) { |
| 2124 | 2125 | req->opcode = 0; |