]> git.ipfire.org Git - thirdparty/linux.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)
committerChristian Brauner <brauner@kernel.org>
Tue, 25 Nov 2025 09:22:19 +0000 (10:22 +0100)
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>
fs/iomap/direct-io.c

index 00ab58d55c548c5fffd3dfad495c04b570732953..38e6653fe3a63d559ef8b2bb1d3db4f51eb1f04d 100644 (file)
@@ -734,12 +734,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);