io_uring: fix a layering violation in io_iopoll_req_issued
authorChristoph Hellwig <hch@lst.de>
Tue, 12 Oct 2021 11:12:14 +0000 (13:12 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 12:17:35 +0000 (06:17 -0600)
syscall-level code can't just poke into the details of the poll cookie,
which is private information of the block layer.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20211012111226.760968-5-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index e68d278..d2e8678 100644 (file)
@@ -2738,19 +2738,12 @@ static void io_iopoll_req_issued(struct io_kiocb *req)
                ctx->poll_multi_queue = false;
        } else if (!ctx->poll_multi_queue) {
                struct io_kiocb *list_req;
-               unsigned int queue_num0, queue_num1;
 
                list_req = list_first_entry(&ctx->iopoll_list, struct io_kiocb,
                                                inflight_entry);
 
-               if (list_req->file != req->file) {
+               if (list_req->file != req->file)
                        ctx->poll_multi_queue = true;
-               } else {
-                       queue_num0 = blk_qc_t_to_queue_num(list_req->rw.kiocb.ki_cookie);
-                       queue_num1 = blk_qc_t_to_queue_num(req->rw.kiocb.ki_cookie);
-                       if (queue_num0 != queue_num1)
-                               ctx->poll_multi_queue = true;
-               }
        }
 
        /*