summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2026-07-29 12:27:19 -0700
committerChristian Brauner <brauner@kernel.org>2026-07-31 12:28:49 +0200
commiteecfab484dc7b4156d4297b723da20bbc46e92b9 (patch)
treed09bd2b71d0dbe92c597f6fe252504d11f3d48fb
parent335d4b6201ac317d906e6a694f07de0792325fee (diff)
downloadlinux-eecfab484dc7b4156d4297b723da20bbc46e92b9.tar.gz
linux-eecfab484dc7b4156d4297b723da20bbc46e92b9.zip
iomap: use GFP_NOWAIT when application for iomap_dio_simple allocations
For non-blocking iocbs we should avoid blocking allocation where possible, so switch to a GFP_NOWAIT allocation here. Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Fengnan Chang <changfengnan@bytedance.com> Reviewed-by: Joanne Koong <joannelkoong@gmail.com> Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://patch.msgid.link/20260729192737.3190206-5-joannelkoong@gmail.com Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
-rw-r--r--fs/iomap/direct-io.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index 36c976cf0848..5c28124b9f02 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -986,6 +986,7 @@ static void iomap_dio_simple_end_io(struct bio *bio)
ssize_t __iomap_dio_read_simple(struct kiocb *iocb, struct iov_iter *iter,
struct iomap_iter *iomi)
{
+ gfp_t gfp = (iomi->flags & IOMAP_NOWAIT) ? GFP_NOWAIT : GFP_KERNEL;
struct iomap_dio_simple *sr;
unsigned int alignment;
struct bio *bio;
@@ -1015,7 +1016,11 @@ ssize_t __iomap_dio_read_simple(struct kiocb *iocb, struct iov_iter *iter,
bio = bio_alloc_bioset(iomi->iomap.bdev,
bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS),
- REQ_OP_READ, GFP_KERNEL, &iomap_dio_simple_pool);
+ REQ_OP_READ, gfp, &iomap_dio_simple_pool);
+ if (!bio) {
+ ret = -EAGAIN;
+ goto out_dio_end;
+ }
sr = container_of(bio, struct iomap_dio_simple, bio);
sr->iocb = iocb;
sr->dio_flags = 0;