author: Pavel Begunkov <asml.silence@gmail.com> 2021-01-09 16:02:59 +0000
committer: Jens Axboe <axboe@kernel.dk> 2021-01-25 08:58:24 -0700
commit: 0cf41e5e9bafc185490624c3e321c915885a91f3
parent: 9b2e0016d04c6542ace0128eb82ecb3b10c97e43
Commit Summary:
Diffstat:
1 file changed, 5 insertions, 0 deletions
diff --git a/block/bio.c b/block/bio.c
index 56a06f94fb63..1cd8a2e79048 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1081,6 +1081,9 @@ static int __bio_iov_append_get_pages(struct bio *bio, struct iov_iter *iter)
* fit into the bio, or are requested in @iter, whatever is smaller. If
* MM encounters an error pinning the requested pages, it stops. Error
* is returned only if 0 pages could be pinned.
+ *
+ * It's intended for direct IO, so doesn't do PSI tracking, the caller is
+ * responsible for setting BIO_WORKINGSET if necessary.
*/
int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
{
@@ -1105,6 +1108,9 @@ int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
if (is_bvec)
bio_set_flag(bio, BIO_NO_PAGE_REF);
+
+ /* don't account direct I/O as memory stall */
+ bio_clear_flag(bio, BIO_WORKINGSET);
return bio->bi_vcnt ? 0 : ret;
}
EXPORT_SYMBOL_GPL(bio_iov_iter_get_pages);