@@ -563,8 +563,10 @@ static void io_complete_rw_iopoll(struct kiocb *kiocb, long res)
563
563
smp_store_release (& req -> iopoll_completed , 1 );
564
564
}
565
565
566
- static inline void io_rw_done (struct kiocb * kiocb , ssize_t ret )
566
+ static inline void io_rw_done (struct io_kiocb * req , ssize_t ret )
567
567
{
568
+ struct io_rw * rw = io_kiocb_to_cmd (req , struct io_rw );
569
+
568
570
/* IO was queued async, completion will happen later */
569
571
if (ret == - EIOCBQUEUED )
570
572
return ;
@@ -586,8 +588,10 @@ static inline void io_rw_done(struct kiocb *kiocb, ssize_t ret)
586
588
}
587
589
}
588
590
589
- INDIRECT_CALL_2 (kiocb -> ki_complete , io_complete_rw_iopoll ,
590
- io_complete_rw , kiocb , ret );
591
+ if (req -> ctx -> flags & IORING_SETUP_IOPOLL )
592
+ io_complete_rw_iopoll (& rw -> kiocb , ret );
593
+ else
594
+ io_complete_rw (& rw -> kiocb , ret );
591
595
}
592
596
593
597
static int kiocb_done (struct io_kiocb * req , ssize_t ret ,
@@ -598,7 +602,7 @@ static int kiocb_done(struct io_kiocb *req, ssize_t ret,
598
602
599
603
if (ret >= 0 && req -> flags & REQ_F_CUR_POS )
600
604
req -> file -> f_pos = rw -> kiocb .ki_pos ;
601
- if (ret >= 0 && ( rw -> kiocb . ki_complete == io_complete_rw )) {
605
+ if (ret >= 0 && !( req -> ctx -> flags & IORING_SETUP_IOPOLL )) {
602
606
__io_complete_rw_common (req , ret );
603
607
/*
604
608
* Safe to call io_end from here as we're inline
@@ -609,7 +613,7 @@ static int kiocb_done(struct io_kiocb *req, ssize_t ret,
609
613
io_req_rw_cleanup (req , issue_flags );
610
614
return IOU_OK ;
611
615
} else {
612
- io_rw_done (& rw -> kiocb , ret );
616
+ io_rw_done (req , ret );
613
617
}
614
618
615
619
return IOU_ISSUE_SKIP_COMPLETE ;
0 commit comments