From: Gabriel Krisman Bertazi <krisman@suse.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring <io-uring@vger.kernel.org>
Subject: Re: [PATCH] io_uring/rw: always clear ->bytes_done on io_async_rw setup
Date: Mon, 30 Dec 2024 11:08:56 -0500 [thread overview]
Message-ID: <87wmfh6tlz.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <1e3d150c-8d0c-42b9-b479-0aa55f0ab86f@kernel.dk> (Jens Axboe's message of "Fri, 27 Dec 2024 09:53:43 -0700")
Jens Axboe <axboe@kernel.dk> writes:
> A previous commit mistakenly moved the clearing of the in-progress byte
> count into the section that's dependent on having a cached iovec or not,
> but it should be cleared for any IO. If not, then extra bytes may be
> added at IO completion time, causing potentially weird behavior like
> over-reporting the amount of IO done.
Hi Jens,
Sorry for the delay. I went completely offline during the christmas
week.
Did this solve the sysbot report? I'm failing to understand how it can
happen. This could only be hit if the allocation returned a cached
object that doesn't have a free_iov, since any newly kmalloc'ed object
will have this field cleaned inside the io_rw_async_data_init callback.
But I don't understand where we can cache the rw object without having a
valid free_iov - it didn't seem possible to me before or now.
the iov is freed only by io_rw_iovec_free, which is called from
(1) io_rw_recycle, in the case where we don't cache. we drop also
drop the CLEANUP flag, so we will just call kfree inside io_clean_op later.
(2) io_readv_writev_cleanup: where we also don't cache, since we are inside
the io_clean_op, we'll just hit the kfree(req->async_data), and
(3) io_rw_cache_free: where we are emptying the cache to shut down.
> diff --git a/io_uring/rw.c b/io_uring/rw.c
> index 75f70935ccf4..ca1b19d3d142 100644
> --- a/io_uring/rw.c
> +++ b/io_uring/rw.c
> @@ -228,8 +228,8 @@ static int io_rw_alloc_async(struct io_kiocb *req)
> kasan_mempool_unpoison_object(rw->free_iovec,
> rw->free_iov_nr * sizeof(struct iovec));
> req->flags |= REQ_F_NEED_CLEANUP;
> - rw->bytes_done = 0;
> }
> + rw->bytes_done = 0;
> return 0;
> }
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2024-12-30 16:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-27 16:53 [PATCH] io_uring/rw: always clear ->bytes_done on io_async_rw setup Jens Axboe
2024-12-30 16:08 ` Gabriel Krisman Bertazi [this message]
2024-12-30 16:58 ` Jens Axboe
2024-12-30 23:02 ` Gabriel Krisman Bertazi
2024-12-31 0:13 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wmfh6tlz.fsf@mailhost.krisman.be \
--to=krisman@suse.de \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.