diff options
author | Omar Sandoval <osandov@osandov.com> | 2015-03-16 07:33:52 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-11 22:29:45 -0400 |
commit | 6f67376318abea58589ebe6d69dffeabb6f6c26a (patch) | |
tree | 1d3e6b00735aed811dcaeee2ccf7fa65eebc406d /fs/ext4 | |
parent | a95cd6311512bd954e88684eb39373f7f4b0a984 (diff) |
direct_IO: use iov_iter_rw() instead of rw everywhere
The rw parameter to direct_IO is redundant with iov_iter->type, and
treated slightly differently just about everywhere it's used: some users
do rw & WRITE, and others do rw == WRITE where they should be doing a
bitwise check. Simplify this with the new iov_iter_rw() helper, which
always returns either READ or WRITE.
Signed-off-by: Omar Sandoval <osandov@osandov.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/ext4.h | 4 | ||||
-rw-r--r-- | fs/ext4/indirect.c | 10 | ||||
-rw-r--r-- | fs/ext4/inode.c | 20 |
3 files changed, 17 insertions, 17 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index f63c3d5805c4..2031c994024e 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -2152,8 +2152,8 @@ extern void ext4_da_update_reserve_space(struct inode *inode, | |||
2152 | /* indirect.c */ | 2152 | /* indirect.c */ |
2153 | extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, | 2153 | extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, |
2154 | struct ext4_map_blocks *map, int flags); | 2154 | struct ext4_map_blocks *map, int flags); |
2155 | extern ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, | 2155 | extern ssize_t ext4_ind_direct_IO(struct kiocb *iocb, struct iov_iter *iter, |
2156 | struct iov_iter *iter, loff_t offset); | 2156 | loff_t offset); |
2157 | extern int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock); | 2157 | extern int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock); |
2158 | extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks); | 2158 | extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks); |
2159 | extern void ext4_ind_truncate(handle_t *, struct inode *inode); | 2159 | extern void ext4_ind_truncate(handle_t *, struct inode *inode); |
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c index cd81d01da0b0..3580629e42d3 100644 --- a/fs/ext4/indirect.c +++ b/fs/ext4/indirect.c | |||
@@ -642,8 +642,8 @@ out: | |||
642 | * crashes then stale disk data _may_ be exposed inside the file. But current | 642 | * crashes then stale disk data _may_ be exposed inside the file. But current |
643 | * VFS code falls back into buffered path in that case so we are safe. | 643 | * VFS code falls back into buffered path in that case so we are safe. |
644 | */ | 644 | */ |
645 | ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, | 645 | ssize_t ext4_ind_direct_IO(struct kiocb *iocb, struct iov_iter *iter, |
646 | struct iov_iter *iter, loff_t offset) | 646 | loff_t offset) |
647 | { | 647 | { |
648 | struct file *file = iocb->ki_filp; | 648 | struct file *file = iocb->ki_filp; |
649 | struct inode *inode = file->f_mapping->host; | 649 | struct inode *inode = file->f_mapping->host; |
@@ -654,7 +654,7 @@ ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, | |||
654 | size_t count = iov_iter_count(iter); | 654 | size_t count = iov_iter_count(iter); |
655 | int retries = 0; | 655 | int retries = 0; |
656 | 656 | ||
657 | if (rw == WRITE) { | 657 | if (iov_iter_rw(iter) == WRITE) { |
658 | loff_t final_size = offset + count; | 658 | loff_t final_size = offset + count; |
659 | 659 | ||
660 | if (final_size > inode->i_size) { | 660 | if (final_size > inode->i_size) { |
@@ -676,7 +676,7 @@ ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, | |||
676 | } | 676 | } |
677 | 677 | ||
678 | retry: | 678 | retry: |
679 | if (rw == READ && ext4_should_dioread_nolock(inode)) { | 679 | if (iov_iter_rw(iter) == READ && ext4_should_dioread_nolock(inode)) { |
680 | /* | 680 | /* |
681 | * Nolock dioread optimization may be dynamically disabled | 681 | * Nolock dioread optimization may be dynamically disabled |
682 | * via ext4_inode_block_unlocked_dio(). Check inode's state | 682 | * via ext4_inode_block_unlocked_dio(). Check inode's state |
@@ -707,7 +707,7 @@ locked: | |||
707 | ret = blockdev_direct_IO(iocb, inode, iter, offset, | 707 | ret = blockdev_direct_IO(iocb, inode, iter, offset, |
708 | ext4_get_block); | 708 | ext4_get_block); |
709 | 709 | ||
710 | if (unlikely((rw & WRITE) && ret < 0)) { | 710 | if (unlikely(iov_iter_rw(iter) == WRITE && ret < 0)) { |
711 | loff_t isize = i_size_read(inode); | 711 | loff_t isize = i_size_read(inode); |
712 | loff_t end = offset + count; | 712 | loff_t end = offset + count; |
713 | 713 | ||
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 76b8cba5d041..cf6ba6536035 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -2952,8 +2952,8 @@ static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset, | |||
2952 | * if the machine crashes during the write. | 2952 | * if the machine crashes during the write. |
2953 | * | 2953 | * |
2954 | */ | 2954 | */ |
2955 | static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | 2955 | static ssize_t ext4_ext_direct_IO(struct kiocb *iocb, struct iov_iter *iter, |
2956 | struct iov_iter *iter, loff_t offset) | 2956 | loff_t offset) |
2957 | { | 2957 | { |
2958 | struct file *file = iocb->ki_filp; | 2958 | struct file *file = iocb->ki_filp; |
2959 | struct inode *inode = file->f_mapping->host; | 2959 | struct inode *inode = file->f_mapping->host; |
@@ -2966,8 +2966,8 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | |||
2966 | ext4_io_end_t *io_end = NULL; | 2966 | ext4_io_end_t *io_end = NULL; |
2967 | 2967 | ||
2968 | /* Use the old path for reads and writes beyond i_size. */ | 2968 | /* Use the old path for reads and writes beyond i_size. */ |
2969 | if (rw != WRITE || final_size > inode->i_size) | 2969 | if (iov_iter_rw(iter) != WRITE || final_size > inode->i_size) |
2970 | return ext4_ind_direct_IO(rw, iocb, iter, offset); | 2970 | return ext4_ind_direct_IO(iocb, iter, offset); |
2971 | 2971 | ||
2972 | BUG_ON(iocb->private == NULL); | 2972 | BUG_ON(iocb->private == NULL); |
2973 | 2973 | ||
@@ -2976,7 +2976,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | |||
2976 | * conversion. This also disallows race between truncate() and | 2976 | * conversion. This also disallows race between truncate() and |
2977 | * overwrite DIO as i_dio_count needs to be incremented under i_mutex. | 2977 | * overwrite DIO as i_dio_count needs to be incremented under i_mutex. |
2978 | */ | 2978 | */ |
2979 | if (rw == WRITE) | 2979 | if (iov_iter_rw(iter) == WRITE) |
2980 | atomic_inc(&inode->i_dio_count); | 2980 | atomic_inc(&inode->i_dio_count); |
2981 | 2981 | ||
2982 | /* If we do a overwrite dio, i_mutex locking can be released */ | 2982 | /* If we do a overwrite dio, i_mutex locking can be released */ |
@@ -3078,7 +3078,7 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | |||
3078 | } | 3078 | } |
3079 | 3079 | ||
3080 | retake_lock: | 3080 | retake_lock: |
3081 | if (rw == WRITE) | 3081 | if (iov_iter_rw(iter) == WRITE) |
3082 | inode_dio_done(inode); | 3082 | inode_dio_done(inode); |
3083 | /* take i_mutex locking again if we do a ovewrite dio */ | 3083 | /* take i_mutex locking again if we do a ovewrite dio */ |
3084 | if (overwrite) { | 3084 | if (overwrite) { |
@@ -3107,12 +3107,12 @@ static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, | |||
3107 | if (ext4_has_inline_data(inode)) | 3107 | if (ext4_has_inline_data(inode)) |
3108 | return 0; | 3108 | return 0; |
3109 | 3109 | ||
3110 | trace_ext4_direct_IO_enter(inode, offset, count, rw); | 3110 | trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter)); |
3111 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) | 3111 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) |
3112 | ret = ext4_ext_direct_IO(rw, iocb, iter, offset); | 3112 | ret = ext4_ext_direct_IO(iocb, iter, offset); |
3113 | else | 3113 | else |
3114 | ret = ext4_ind_direct_IO(rw, iocb, iter, offset); | 3114 | ret = ext4_ind_direct_IO(iocb, iter, offset); |
3115 | trace_ext4_direct_IO_exit(inode, offset, count, rw, ret); | 3115 | trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret); |
3116 | return ret; | 3116 | return ret; |
3117 | } | 3117 | } |
3118 | 3118 | ||