]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iomap: allocate s_dio_done_wq for async reads as well
authorChristoph Hellwig <hch@lst.de>
Mon, 24 Nov 2025 14:00:13 +0000 (15:00 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Dec 2025 13:03:17 +0000 (14:03 +0100)
[ Upstream commit 7fd8720dff2d9c70cf5a1a13b7513af01952ec02 ]

Since commit 222f2c7c6d14 ("iomap: always run error completions in user
context"), read error completions are deferred to s_dio_done_wq.  This
means the workqueue also needs to be allocated for async reads.

Fixes: 222f2c7c6d14 ("iomap: always run error completions in user context")
Reported-by: syzbot+a2b9a4ed0d61b1efb3f5@syzkaller.appspotmail.com
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20251124140013.902853-1-hch@lst.de
Tested-by: syzbot+a2b9a4ed0d61b1efb3f5@syzkaller.appspotmail.com
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/iomap/direct-io.c

index 143160042552b345fdbbfb33aca3591b473770cc..6317e4cd42517d6156fc7392fae528e89932872a 100644 (file)
@@ -728,12 +728,12 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
                        }
                        goto out_free_dio;
                }
+       }
 
-               if (!wait_for_completion && !inode->i_sb->s_dio_done_wq) {
-                       ret = sb_init_dio_done_wq(inode->i_sb);
-                       if (ret < 0)
-                               goto out_free_dio;
-               }
+       if (!wait_for_completion && !inode->i_sb->s_dio_done_wq) {
+               ret = sb_init_dio_done_wq(inode->i_sb);
+               if (ret < 0)
+                       goto out_free_dio;
        }
 
        inode_dio_begin(inode);