@@ -1025,6 +1025,7 @@ static ssize_t io_import_iovec(int rw, struct io_kiocb *req,
10251025static int io_setup_async_rw (struct io_kiocb * req , const struct iovec * iovec ,
10261026 const struct iovec * fast_iov ,
10271027 struct iov_iter * iter , bool force );
1028+ static void io_req_drop_files (struct io_kiocb * req );
10281029
10291030static struct kmem_cache * req_cachep ;
10301031
@@ -1048,8 +1049,7 @@ EXPORT_SYMBOL(io_uring_get_socket);
10481049
10491050static inline void io_clean_op (struct io_kiocb * req )
10501051{
1051- if (req -> flags & (REQ_F_NEED_CLEANUP | REQ_F_BUFFER_SELECTED |
1052- REQ_F_INFLIGHT ))
1052+ if (req -> flags & (REQ_F_NEED_CLEANUP | REQ_F_BUFFER_SELECTED ))
10531053 __io_clean_op (req );
10541054}
10551055
@@ -1394,6 +1394,8 @@ static void io_req_clean_work(struct io_kiocb *req)
13941394 free_fs_struct (fs );
13951395 req -> work .flags &= ~IO_WQ_WORK_FS ;
13961396 }
1397+ if (req -> flags & REQ_F_INFLIGHT )
1398+ io_req_drop_files (req );
13971399
13981400 io_put_identity (req -> task -> io_uring , req );
13991401}
@@ -6230,9 +6232,6 @@ static void __io_clean_op(struct io_kiocb *req)
62306232 }
62316233 req -> flags &= ~REQ_F_NEED_CLEANUP ;
62326234 }
6233-
6234- if (req -> flags & REQ_F_INFLIGHT )
6235- io_req_drop_files (req );
62366235}
62376236
62386237static int io_issue_sqe (struct io_kiocb * req , bool force_nonblock ,
@@ -8879,6 +8878,7 @@ static void io_uring_cancel_files(struct io_ring_ctx *ctx,
88798878 io_wq_cancel_cb (ctx -> io_wq , io_cancel_task_cb , & cancel , true);
88808879 io_poll_remove_all (ctx , task , files );
88818880 io_kill_timeouts (ctx , task , files );
8881+ io_cqring_overflow_flush (ctx , true, task , files );
88828882 /* cancellations _may_ trigger task work */
88838883 io_run_task_work ();
88848884 schedule ();
0 commit comments