@@ -1318,23 +1318,23 @@ int io_send_zc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
13181318 if (unlikely (!iomsg ))
13191319 return - ENOMEM ;
13201320
1321- if (zc -> flags & IORING_RECVSEND_FIXED_BUF )
1322- iomsg -> msg .sg_from_iter = io_sg_from_iter ;
1323- else
1324- iomsg -> msg .sg_from_iter = io_sg_from_iter_iovec ;
1325-
13261321 if (req -> opcode == IORING_OP_SEND_ZC ) {
1327- req -> flags |= REQ_F_IMPORT_BUFFER ;
1328- return io_send_setup (req , sqe );
1322+ if (zc -> flags & IORING_RECVSEND_FIXED_BUF )
1323+ req -> flags |= REQ_F_IMPORT_BUFFER ;
1324+ ret = io_send_setup (req , sqe );
1325+ } else {
1326+ if (unlikely (sqe -> addr2 || sqe -> file_index ))
1327+ return - EINVAL ;
1328+ ret = io_sendmsg_setup (req , sqe );
13291329 }
1330- if (unlikely (sqe -> addr2 || sqe -> file_index ))
1331- return - EINVAL ;
1332- ret = io_sendmsg_setup (req , sqe );
13331330 if (unlikely (ret ))
13341331 return ret ;
13351332
1336- if (!(zc -> flags & IORING_RECVSEND_FIXED_BUF ))
1333+ if (!(zc -> flags & IORING_RECVSEND_FIXED_BUF )) {
1334+ iomsg -> msg .sg_from_iter = io_sg_from_iter_iovec ;
13371335 return io_notif_account_mem (zc -> notif , iomsg -> msg .msg_iter .count );
1336+ }
1337+ iomsg -> msg .sg_from_iter = io_sg_from_iter ;
13381338 return 0 ;
13391339}
13401340
@@ -1392,25 +1392,13 @@ static int io_send_zc_import(struct io_kiocb *req, unsigned int issue_flags)
13921392{
13931393 struct io_sr_msg * sr = io_kiocb_to_cmd (req , struct io_sr_msg );
13941394 struct io_async_msghdr * kmsg = req -> async_data ;
1395- int ret ;
13961395
1397- if (sr -> flags & IORING_RECVSEND_FIXED_BUF ) {
1398- sr -> notif -> buf_index = req -> buf_index ;
1399- ret = io_import_reg_buf (sr -> notif , & kmsg -> msg .msg_iter ,
1400- (u64 )(uintptr_t )sr -> buf , sr -> len ,
1401- ITER_SOURCE , issue_flags );
1402- if (unlikely (ret ))
1403- return ret ;
1404- } else {
1405- ret = import_ubuf (ITER_SOURCE , sr -> buf , sr -> len , & kmsg -> msg .msg_iter );
1406- if (unlikely (ret ))
1407- return ret ;
1408- ret = io_notif_account_mem (sr -> notif , sr -> len );
1409- if (unlikely (ret ))
1410- return ret ;
1411- }
1396+ WARN_ON_ONCE (!(sr -> flags & IORING_RECVSEND_FIXED_BUF ));
14121397
1413- return ret ;
1398+ sr -> notif -> buf_index = req -> buf_index ;
1399+ return io_import_reg_buf (sr -> notif , & kmsg -> msg .msg_iter ,
1400+ (u64 )(uintptr_t )sr -> buf , sr -> len ,
1401+ ITER_SOURCE , issue_flags );
14141402}
14151403
14161404int io_send_zc (struct io_kiocb * req , unsigned int issue_flags )
0 commit comments