]> git.hungrycats.org Git - linux/commitdiff
Revert "Remove rw from {,__,do_}blockdev_direct_IO()"
authorZygo Blaxell <zblaxell@serenity.furryterror.org>
Mon, 4 May 2015 02:12:26 +0000 (22:12 -0400)
committerZygo Blaxell <zblaxell@serenity.furryterror.org>
Mon, 4 May 2015 02:12:26 +0000 (22:12 -0400)
This reverts commit 952c053cbbe8915ccf1029a69038e568da312d05.

20 files changed:
fs/affs/file.c
fs/block_dev.c
fs/btrfs/inode.c
fs/direct-io.c
fs/ext2/inode.c
fs/ext3/inode.c
fs/ext4/indirect.c
fs/ext4/inode.c
fs/f2fs/data.c
fs/fat/inode.c
fs/gfs2/aops.c
fs/hfs/inode.c
fs/hfsplus/inode.c
fs/jfs/inode.c
fs/nilfs2/inode.c
fs/ocfs2/aops.c
fs/reiserfs/inode.c
fs/udf/inode.c
fs/xfs/xfs_aops.c
include/linux/fs.h

index 17a1e87c3391e1f655e0bfd8a11eb532c1eac416..a91795e01a7ff0c0e85abf1bdf69f3d1d828b231 100644 (file)
@@ -405,7 +405,7 @@ affs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter,
                        return 0;
        }
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, affs_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, affs_get_block);
        if (ret < 0 && (rw & WRITE))
                affs_write_failed(mapping, offset + count);
        return ret;
index e3a3125aaf58b6389abbbc5135efbf044d63da7d..975266be67d319aa019a48e94cfda0a3ca8ce1e0 100644 (file)
@@ -153,8 +153,9 @@ blkdev_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter,
        struct file *file = iocb->ki_filp;
        struct inode *inode = file->f_mapping->host;
 
-       return __blockdev_direct_IO(iocb, inode, I_BDEV(inode), iter, offset,
-                                   blkdev_get_block, NULL, NULL, 0);
+       return __blockdev_direct_IO(rw, iocb, inode, I_BDEV(inode), iter,
+                                   offset, blkdev_get_block,
+                                   NULL, NULL, 0);
 }
 
 int __sync_blockdev(struct block_device *bdev, int wait)
index 97a707590b7c815681cf3e1d173bad61d253d313..2e021924fdd09b2afe366832fc40fc1f9fd6eb8a 100644 (file)
@@ -8309,10 +8309,10 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,
                wakeup = false;
        }
 
-       ret = __blockdev_direct_IO(iocb, inode,
-                                  BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev,
-                                  iter, offset, btrfs_get_blocks_direct, NULL,
-                                  btrfs_submit_direct, flags);
+       ret = __blockdev_direct_IO(rw, iocb, inode,
+                       BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev,
+                       iter, offset, btrfs_get_blocks_direct, NULL,
+                       btrfs_submit_direct, flags);
        if (rw & WRITE) {
                current->journal_info = NULL;
                if (ret < 0 && ret != -EIOCBQUEUED)
index 02a87d9b9f6c06dc3357571949f2cd6f0e8f769f..e181b6b2e297fb5d3bd03a07efe382f0dd204972 100644 (file)
@@ -1094,10 +1094,10 @@ static inline int drop_refcount(struct dio *dio)
  * for the whole file.
  */
 static inline ssize_t
-do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
-                     struct block_device *bdev, struct iov_iter *iter,
-                     loff_t offset, get_block_t get_block, dio_iodone_t end_io,
-                     dio_submit_t submit_io, int flags)
+do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
+       struct block_device *bdev, struct iov_iter *iter, loff_t offset, 
+       get_block_t get_block, dio_iodone_t end_io,
+       dio_submit_t submit_io, int flags)
 {
        unsigned i_blkbits = ACCESS_ONCE(inode->i_blkbits);
        unsigned blkbits = i_blkbits;
@@ -1111,6 +1111,9 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
        struct blk_plug plug;
        unsigned long align = offset | iov_iter_alignment(iter);
 
+       if (rw & WRITE)
+               rw = WRITE_ODIRECT;
+
        /*
         * Avoid references to bdev if not absolutely needed to give
         * the early prefetch in the caller enough time.
@@ -1125,7 +1128,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
        }
 
        /* watch out for a 0 len io from a tricksy fs */
-       if (iov_iter_rw(iter) == READ && !iov_iter_count(iter))
+       if (rw == READ && !iov_iter_count(iter))
                return 0;
 
        dio = kmem_cache_alloc(dio_cache, GFP_KERNEL);
@@ -1141,7 +1144,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
 
        dio->flags = flags;
        if (dio->flags & DIO_LOCKING) {
-               if (iov_iter_rw(iter) == READ) {
+               if (rw == READ) {
                        struct address_space *mapping =
                                        iocb->ki_filp->f_mapping;
 
@@ -1167,19 +1170,19 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
        if (is_sync_kiocb(iocb))
                dio->is_async = false;
        else if (!(dio->flags & DIO_ASYNC_EXTEND) &&
-                iov_iter_rw(iter) == WRITE && end > i_size_read(inode))
+            (rw & WRITE) && end > i_size_read(inode))
                dio->is_async = false;
        else
                dio->is_async = true;
 
        dio->inode = inode;
-       dio->rw = iov_iter_rw(iter) == WRITE ? WRITE_ODIRECT : READ;
+       dio->rw = rw;
 
        /*
         * For AIO O_(D)SYNC writes we need to defer completions to a workqueue
         * so that we can call ->fsync.
         */
-       if (dio->is_async && iov_iter_rw(iter) == WRITE &&
+       if (dio->is_async && (rw & WRITE) &&
            ((iocb->ki_filp->f_flags & O_DSYNC) ||
             IS_SYNC(iocb->ki_filp->f_mapping->host))) {
                retval = dio_set_defer_completion(dio);
@@ -1272,7 +1275,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
         * we can let i_mutex go now that its achieved its purpose
         * of protecting us from looking up uninitialized blocks.
         */
-       if (iov_iter_rw(iter) == READ && (dio->flags & DIO_LOCKING))
+       if (rw == READ && (dio->flags & DIO_LOCKING))
                mutex_unlock(&dio->inode->i_mutex);
 
        /*
@@ -1284,7 +1287,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
         */
        BUG_ON(retval == -EIOCBQUEUED);
        if (dio->is_async && retval == 0 && dio->result &&
-           (iov_iter_rw(iter) == READ || dio->result == count))
+           (rw == READ || dio->result == count))
                retval = -EIOCBQUEUED;
        else
                dio_await_completion(dio);
@@ -1298,11 +1301,11 @@ out:
        return retval;
 }
 
-ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
-                            struct block_device *bdev, struct iov_iter *iter,
-                            loff_t offset, get_block_t get_block,
-                            dio_iodone_t end_io, dio_submit_t submit_io,
-                            int flags)
+ssize_t
+__blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
+       struct block_device *bdev, struct iov_iter *iter, loff_t offset,
+       get_block_t get_block, dio_iodone_t end_io,
+       dio_submit_t submit_io, int flags)
 {
        /*
         * The block device state is needed in the end to finally
@@ -1316,8 +1319,8 @@ ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
        prefetch(bdev->bd_queue);
        prefetch((char *)bdev->bd_queue + SMP_CACHE_BYTES);
 
-       return do_blockdev_direct_IO(iocb, inode, bdev, iter, offset, get_block,
-                                    end_io, submit_io, flags);
+       return do_blockdev_direct_IO(rw, iocb, inode, bdev, iter, offset,
+                                    get_block, end_io, submit_io, flags);
 }
 
 EXPORT_SYMBOL(__blockdev_direct_IO);
index 00979a611d39bfb44528f7ac7f4dbdc28665f50e..6434bc00012517a30ace1cb97f2160b0c48eea3a 100644 (file)
@@ -864,7 +864,7 @@ ext2_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter,
                ret = dax_do_io(rw, iocb, inode, iter, offset, ext2_get_block,
                                NULL, DIO_LOCKING);
        else
-               ret = blockdev_direct_IO(iocb, inode, iter, offset,
+               ret = blockdev_direct_IO(rw, iocb, inode, iter, offset,
                                         ext2_get_block);
        if (ret < 0 && (rw & WRITE))
                ext2_write_failed(mapping, offset + count);
index 28bba7d8f66a7fc202fffd3992c9210eac86a0b6..2c6ccc49ba279cacf77fe6609fe44a50b970898c 100644 (file)
@@ -1856,7 +1856,7 @@ static ssize_t ext3_direct_IO(int rw, struct kiocb *iocb,
        }
 
 retry:
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, ext3_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, ext3_get_block);
        /*
         * In case of error extending write may have instantiated a few
         * blocks outside i_size. Trim these off again.
index 57135a799679346d332f16e3da2a65b76de4a7a4..45fe924f82bce2ff76e3e74b45ec1833729433ea 100644 (file)
@@ -693,10 +693,9 @@ retry:
                        ret = dax_do_io(rw, iocb, inode, iter, offset,
                                        ext4_get_block, NULL, 0);
                else
-                       ret = __blockdev_direct_IO(iocb, inode,
-                                                  inode->i_sb->s_bdev, iter,
-                                                  offset, ext4_get_block, NULL,
-                                                  NULL, 0);
+                       ret = __blockdev_direct_IO(rw, iocb, inode,
+                                       inode->i_sb->s_bdev, iter, offset,
+                                       ext4_get_block, NULL, NULL, 0);
                inode_dio_done(inode);
        } else {
 locked:
@@ -704,8 +703,8 @@ locked:
                        ret = dax_do_io(rw, iocb, inode, iter, offset,
                                        ext4_get_block, NULL, DIO_LOCKING);
                else
-                       ret = blockdev_direct_IO(iocb, inode, iter, offset,
-                                                ext4_get_block);
+                       ret = blockdev_direct_IO(rw, iocb, inode, iter,
+                                       offset, ext4_get_block);
 
                if (unlikely((rw & WRITE) && ret < 0)) {
                        loff_t isize = i_size_read(inode);
index 81f8f107a883e4fcad4ffd24d2ee105c89da95c5..5cb9a212b86f3efd69ca604df07dc20b901dabb1 100644 (file)
@@ -3038,7 +3038,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb,
                ret = dax_do_io(rw, iocb, inode, iter, offset, get_block_func,
                                ext4_end_io_dio, dio_flags);
        else
-               ret = __blockdev_direct_IO(iocb, inode,
+               ret = __blockdev_direct_IO(rw, iocb, inode,
                                           inode->i_sb->s_bdev, iter, offset,
                                           get_block_func,
                                           ext4_end_io_dio, NULL, dio_flags);
index d2addce9a9d889d63745a895c953c729e9a44a2a..985ed023a750170b924455ea23e2684c50baeba4 100644 (file)
@@ -1159,7 +1159,7 @@ static ssize_t f2fs_direct_IO(int rw, struct kiocb *iocb,
        if (rw & WRITE)
                __allocate_data_blocks(inode, offset, count);
 
-       err = blockdev_direct_IO(iocb, inode, iter, offset, get_data_block);
+       err = blockdev_direct_IO(rw, iocb, inode, iter, offset, get_data_block);
        if (err < 0 && (rw & WRITE))
                f2fs_write_failed(mapping, offset + count);
 
index a969a34af70c0bffba91c142680e64c0362305f4..497c7c5263c7ca3962c385605fbbb558d351f759 100644 (file)
@@ -275,7 +275,7 @@ static ssize_t fat_direct_IO(int rw, struct kiocb *iocb,
         * FAT need to use the DIO_LOCKING for avoiding the race
         * condition of fat_get_block() and ->truncate().
         */
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, fat_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, fat_get_block);
        if (ret < 0 && (rw & WRITE))
                fat_write_failed(mapping, offset + count);
 
index fc691f22f7d78acd314c8644c26f34a5e86d3d97..4ad4f94edebe25cc8afa3fa7c4ec35913cb00642 100644 (file)
@@ -1095,8 +1095,9 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb,
                        truncate_inode_pages_range(mapping, lstart, end);
        }
 
-       rv = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
-                                 offset, gfs2_get_block_direct, NULL, NULL, 0);
+       rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev,
+                                 iter, offset,
+                                 gfs2_get_block_direct, NULL, NULL, 0);
 out:
        gfs2_glock_dq(&gh);
        gfs2_holder_uninit(&gh);
index d367253fd8772d80ec39f0cdaf625547dce6ea31..d0929bc817826e012cc829bb0f021832eea24379 100644 (file)
@@ -133,7 +133,7 @@ static ssize_t hfs_direct_IO(int rw, struct kiocb *iocb,
        size_t count = iov_iter_count(iter);
        ssize_t ret;
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, hfs_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, hfs_get_block);
 
        /*
         * In case of error extending write may have instantiated a few
index a7ec37db038c948d876f97c94f3d4939adcfde40..0cf786f2d046f9fbae9b110a2a2d212c008fb3aa 100644 (file)
@@ -131,7 +131,8 @@ static ssize_t hfsplus_direct_IO(int rw, struct kiocb *iocb,
        size_t count = iov_iter_count(iter);
        ssize_t ret;
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, hfsplus_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 
+                                hfsplus_get_block);
 
        /*
         * In case of error extending write may have instantiated a few
index 88271ac5aefe5895483605fd2557e1be61c69df8..bd3df1ca3c9b7f955571c056f86f98e97beda7b9 100644 (file)
@@ -339,7 +339,7 @@ static ssize_t jfs_direct_IO(int rw, struct kiocb *iocb,
        size_t count = iov_iter_count(iter);
        ssize_t ret;
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, jfs_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, jfs_get_block);
 
        /*
         * In case of error extending write may have instantiated a few
index 76587c3fb4381068615c72eb14428d54c1aedc14..8b5969538f39229cede14416a067d2e056c1a677 100644 (file)
@@ -318,7 +318,8 @@ nilfs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter,
                return 0;
 
        /* Needs synchronization with the cleaner */
-       size = blockdev_direct_IO(iocb, inode, iter, offset, nilfs_get_block);
+       size = blockdev_direct_IO(rw, iocb, inode, iter, offset,
+                                 nilfs_get_block);
 
        /*
         * In case of error extending write may have instantiated a few
index 162a2a87bc18ecaad53b1727e814c07235d3252d..44db1808cdb598df6b91548410b3634480c06c31 100644 (file)
@@ -737,9 +737,10 @@ static ssize_t ocfs2_direct_IO_write(struct kiocb *iocb,
                di_bh = NULL;
        }
 
-       written = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
-                                      offset, ocfs2_direct_IO_get_blocks,
-                                      ocfs2_dio_end_io, NULL, 0);
+       written = __blockdev_direct_IO(WRITE, iocb, inode, inode->i_sb->s_bdev,
+                       iter, offset,
+                       ocfs2_direct_IO_get_blocks,
+                       ocfs2_dio_end_io, NULL, 0);
        if (unlikely(written < 0)) {
                loff_t i_size = i_size_read(inode);
 
@@ -842,10 +843,11 @@ static ssize_t ocfs2_direct_IO(int rw,
                return 0;
 
        if (rw == READ)
-               return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
-                                           iter, offset,
-                                           ocfs2_direct_IO_get_blocks,
-                                           ocfs2_dio_end_io, NULL, 0);
+               return __blockdev_direct_IO(rw, iocb, inode,
+                                   inode->i_sb->s_bdev,
+                                   iter, offset,
+                                   ocfs2_direct_IO_get_blocks,
+                                   ocfs2_dio_end_io, NULL, 0);
        else
                return ocfs2_direct_IO_write(iocb, iter, offset);
 }
index 254e8002f5ff610cfccb5527e40831aeb143d2cd..e72401e1f9956238064c91805279233a721bffe1 100644 (file)
@@ -3286,7 +3286,7 @@ static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb,
        size_t count = iov_iter_count(iter);
        ssize_t ret;
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset,
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset,
                                 reiserfs_get_blocks_direct_io);
 
        /*
index bcb0082f71fd53ef99c32e849e10867c0bc702e2..a445d599098d7ad1ccace2a81a86a0bc563af391 100644 (file)
@@ -225,7 +225,7 @@ static ssize_t udf_direct_IO(int rw, struct kiocb *iocb,
        size_t count = iov_iter_count(iter);
        ssize_t ret;
 
-       ret = blockdev_direct_IO(iocb, inode, iter, offset, udf_get_block);
+       ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, udf_get_block);
        if (unlikely(ret < 0 && (rw & WRITE)))
                udf_write_failed(mapping, offset + count);
        return ret;
index fdb1353753b7615f88b60f336f3c33cb42bd928d..3a9b7a1b8704be66439ea797dd2183c035a929e5 100644 (file)
@@ -1505,13 +1505,14 @@ xfs_vm_direct_IO(
        struct block_device     *bdev = xfs_find_bdev_for_inode(inode);
 
        if (rw & WRITE) {
-               return __blockdev_direct_IO(iocb, inode, bdev, iter, offset,
-                                           xfs_get_blocks_direct,
+               return __blockdev_direct_IO(rw, iocb, inode, bdev, iter,
+                                           offset, xfs_get_blocks_direct,
                                            xfs_end_io_direct_write, NULL,
                                            DIO_ASYNC_EXTEND);
        }
-       return __blockdev_direct_IO(iocb, inode, bdev, iter, offset,
-                                   xfs_get_blocks_direct, NULL, NULL, 0);
+       return __blockdev_direct_IO(rw, iocb, inode, bdev, iter,
+                                   offset, xfs_get_blocks_direct,
+                                   NULL, NULL, 0);
 }
 
 /*
index e435b11e0410654c4f4302f659f94804b8d6094c..52cc4492cb3a1bcb979124b097fefdcfbc89e390 100644 (file)
@@ -2617,18 +2617,16 @@ enum {
 
 void dio_end_io(struct bio *bio, int error);
 
-ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
-                            struct block_device *bdev, struct iov_iter *iter,
-                            loff_t offset, get_block_t get_block,
-                            dio_iodone_t end_io, dio_submit_t submit_io,
-                            int flags);
-
-static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
-                                        struct inode *inode,
-                                        struct iov_iter *iter, loff_t offset,
-                                        get_block_t get_block)
-{
-       return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
+ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
+       struct block_device *bdev, struct iov_iter *iter, loff_t offset,
+       get_block_t get_block, dio_iodone_t end_io,
+       dio_submit_t submit_io, int flags);
+
+static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
+               struct inode *inode, struct iov_iter *iter, loff_t offset,
+               get_block_t get_block)
+{
+       return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iter,
                                    offset, get_block, NULL, NULL,
                                    DIO_LOCKING | DIO_SKIP_HOLES);
 }