@@ -939,6 +939,34 @@ static ssize_t do_iter_read(struct file *file, struct iov_iter *iter,
939
939
return ret ;
940
940
}
941
941
942
+ ssize_t vfs_iocb_iter_read (struct file * file , struct kiocb * iocb ,
943
+ struct iov_iter * iter )
944
+ {
945
+ size_t tot_len ;
946
+ ssize_t ret = 0 ;
947
+
948
+ if (!file -> f_op -> read_iter )
949
+ return - EINVAL ;
950
+ if (!(file -> f_mode & FMODE_READ ))
951
+ return - EBADF ;
952
+ if (!(file -> f_mode & FMODE_CAN_READ ))
953
+ return - EINVAL ;
954
+
955
+ tot_len = iov_iter_count (iter );
956
+ if (!tot_len )
957
+ goto out ;
958
+ ret = rw_verify_area (READ , file , & iocb -> ki_pos , tot_len );
959
+ if (ret < 0 )
960
+ return ret ;
961
+
962
+ ret = call_read_iter (file , iocb , iter );
963
+ out :
964
+ if (ret >= 0 )
965
+ fsnotify_access (file );
966
+ return ret ;
967
+ }
968
+ EXPORT_SYMBOL (vfs_iocb_iter_read );
969
+
942
970
ssize_t vfs_iter_read (struct file * file , struct iov_iter * iter , loff_t * ppos ,
943
971
rwf_t flags )
944
972
{
@@ -975,6 +1003,34 @@ static ssize_t do_iter_write(struct file *file, struct iov_iter *iter,
975
1003
return ret ;
976
1004
}
977
1005
1006
+ ssize_t vfs_iocb_iter_write (struct file * file , struct kiocb * iocb ,
1007
+ struct iov_iter * iter )
1008
+ {
1009
+ size_t tot_len ;
1010
+ ssize_t ret = 0 ;
1011
+
1012
+ if (!file -> f_op -> write_iter )
1013
+ return - EINVAL ;
1014
+ if (!(file -> f_mode & FMODE_WRITE ))
1015
+ return - EBADF ;
1016
+ if (!(file -> f_mode & FMODE_CAN_WRITE ))
1017
+ return - EINVAL ;
1018
+
1019
+ tot_len = iov_iter_count (iter );
1020
+ if (!tot_len )
1021
+ return 0 ;
1022
+ ret = rw_verify_area (WRITE , file , & iocb -> ki_pos , tot_len );
1023
+ if (ret < 0 )
1024
+ return ret ;
1025
+
1026
+ ret = call_write_iter (file , iocb , iter );
1027
+ if (ret > 0 )
1028
+ fsnotify_modify (file );
1029
+
1030
+ return ret ;
1031
+ }
1032
+ EXPORT_SYMBOL (vfs_iocb_iter_write );
1033
+
978
1034
ssize_t vfs_iter_write (struct file * file , struct iov_iter * iter , loff_t * ppos ,
979
1035
rwf_t flags )
980
1036
{
0 commit comments