> diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index 933f234d5bec..396ac0f91a43 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -309,6 +309,16 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length, > copied += n; > > nr_pages = iov_iter_npages(dio->submit.iter, BIO_MAX_PAGES); > + /* > + * The current dio needs to be split into multiple bios here. > + * iopoll for split bio will cause subtle trouble such as > + * hang when doing sync polling, while iopoll is initially > + * for small size, latency sensitive IO. Thus disable iopoll > + * if split needed. > + */ > + if (nr_pages) > + dio->iocb->ki_flags &= ~IOCB_HIPRI; I think this is confusing two things. One is that we don't handle polling well when there are multiple bios. For this I think we should only call bio_set_polled when we know there is a single bio. But it has nothing to do with a bio being split, as we can't know that at this level.