if (unlikely(!(req->file->f_mode & FMODE_READ)))
                return -EBADF;
 
-       if (!req->io)
+       /* either don't need iovec imported or already have it */
+       if (!req->io || req->flags & REQ_F_NEED_CLEANUP)
                return 0;
 
        io = req->io;
        if (unlikely(!(req->file->f_mode & FMODE_WRITE)))
                return -EBADF;
 
-       if (!req->io)
+       /* either don't need iovec imported or already have it */
+       if (!req->io || req->flags & REQ_F_NEED_CLEANUP)
                return 0;
 
        io = req->io;
 
        if (!io || req->opcode == IORING_OP_SEND)
                return 0;
+       /* iovec is already imported */
+       if (req->flags & REQ_F_NEED_CLEANUP)
+               return 0;
 
        io->msg.iov = io->msg.fast_iov;
        ret = sendmsg_copy_msghdr(&io->msg.msg, sr->msg, sr->msg_flags,
 
        if (!io || req->opcode == IORING_OP_RECV)
                return 0;
+       /* iovec is already imported */
+       if (req->flags & REQ_F_NEED_CLEANUP)
+               return 0;
 
        io->msg.iov = io->msg.fast_iov;
        ret = recvmsg_copy_msghdr(&io->msg.msg, sr->msg, sr->msg_flags,