summaryrefslogtreecommitdiffstats
path: root/fs/direct-io.c
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2021-01-09 17:02:59 +0100
committerJens Axboe <axboe@kernel.dk>2021-01-25 16:58:24 +0100
commit0cf41e5e9bafc185490624c3e321c915885a91f3 (patch)
tree343e6d70ec93b155f88a685ce5415ff2018b7c7d /fs/direct-io.c
parentbvec/iter: disallow zero-length segment bvecs (diff)
downloadlinux-0cf41e5e9bafc185490624c3e321c915885a91f3.tar.xz
linux-0cf41e5e9bafc185490624c3e321c915885a91f3.zip
block/psi: remove PSI annotations from direct IO
Direct IO does not operate on the current working set of pages managed by the kernel, so it should not be accounted as memory stall to PSI infrastructure. The block layer and iomap direct IO use bio_iov_iter_get_pages() to build bios, and they are the only users of it, so to avoid PSI tracking for them clear out BIO_WORKINGSET flag. Do same for dio_bio_submit() because fs/direct_io constructs bios by hand directly calling bio_add_page(). Reported-by: Christoph Hellwig <hch@infradead.org> Suggested-by: Christoph Hellwig <hch@infradead.org> Suggested-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/direct-io.c')
-rw-r--r--fs/direct-io.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 2660e744da2d..aa1083ecd623 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -426,6 +426,8 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio)
unsigned long flags;
bio->bi_private = dio;
+ /* don't account direct I/O as memory stall */
+ bio_clear_flag(bio, BIO_WORKINGSET);
spin_lock_irqsave(&dio->bio_lock, flags);
dio->refcount++;