From cc8bfd64c1a8d754230809a56bf23bcadeabd63f Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Sun, 22 May 2022 19:37:33 -0600 Subject: [PATCH 2/4] Switch iter_is_iovec() checks for user memory with iter_is_user() Signed-off-by: Jens Axboe --- block/fops.c | 7 +++---- fs/direct-io.c | 2 +- fs/iomap/direct-io.c | 2 +- fs/nfs/direct.c | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/block/fops.c b/block/fops.c index b1f7c4111458..15788a36983a 100644 --- a/block/fops.c +++ b/block/fops.c @@ -77,8 +77,7 @@ static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb, if (iov_iter_rw(iter) == READ) { bio_init(&bio, bdev, vecs, nr_pages, REQ_OP_READ); - if (iter_is_iovec(iter)) - should_dirty = true; + should_dirty = iter_is_user(iter); } else { bio_init(&bio, bdev, vecs, nr_pages, dio_bio_write_op(iocb)); } @@ -217,7 +216,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, } dio->size = 0; - if (is_read && iter_is_iovec(iter)) + if (is_read && iter_is_user(iter)) dio->flags |= DIO_SHOULD_DIRTY; blk_start_plug(&plug); @@ -346,7 +345,7 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb, dio->size = bio->bi_iter.bi_size; if (is_read) { - if (iter_is_iovec(iter)) { + if (iter_is_user(iter)) { dio->flags |= DIO_SHOULD_DIRTY; bio_set_pages_dirty(bio); } diff --git a/fs/direct-io.c b/fs/direct-io.c index 56dc5a7ad119..5cfa53e0783f 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1246,7 +1246,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, spin_lock_init(&dio->bio_lock); dio->refcount = 1; - dio->should_dirty = iter_is_iovec(iter) && iov_iter_rw(iter) == READ; + dio->should_dirty = iter_is_user(iter) && iov_iter_rw(iter) == READ; sdio.iter = iter; sdio.final_block_in_request = end >> blkbits; diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 33b94e33189a..7d212bde101a 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -523,7 +523,7 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, iomi.flags |= IOMAP_NOWAIT; } - if (iter_is_iovec(iter)) + if (iter_is_user(iter)) dio->flags |= IOMAP_DIO_DIRTY; } else { iomi.flags |= IOMAP_WRITE; diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 11c566d8769f..b6125d5a25c6 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -481,7 +481,7 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter, if (!is_sync_kiocb(iocb)) dreq->iocb = iocb; - if (iter_is_iovec(iter)) + if (iter_is_user(iter)) dreq->flags = NFS_ODIRECT_SHOULD_DIRTY; if (!swap) -- 2.35.1