Lines Matching refs:iocb
737 static int zonefs_file_write_dio_end_io(struct kiocb *iocb, ssize_t size, in zonefs_file_write_dio_end_io() argument
740 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_write_dio_end_io()
757 if (i_size_read(inode) < iocb->ki_pos + size) { in zonefs_file_write_dio_end_io()
758 zonefs_update_stats(inode, iocb->ki_pos + size); in zonefs_file_write_dio_end_io()
759 zonefs_i_size_write(inode, iocb->ki_pos + size); in zonefs_file_write_dio_end_io()
771 static ssize_t zonefs_file_dio_append(struct kiocb *iocb, struct iov_iter *from) in zonefs_file_dio_append() argument
773 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_dio_append()
792 bio->bi_ioprio = iocb->ki_ioprio; in zonefs_file_dio_append()
793 if (iocb_is_dsync(iocb)) in zonefs_file_dio_append()
803 if (iocb->ki_flags & IOCB_HIPRI) in zonefs_file_dio_append()
804 bio_set_polled(bio, iocb); in zonefs_file_dio_append()
808 zonefs_file_write_dio_end_io(iocb, size, ret, 0); in zonefs_file_dio_append()
816 iocb->ki_pos += size; in zonefs_file_dio_append()
852 static ssize_t zonefs_write_checks(struct kiocb *iocb, struct iov_iter *from) in zonefs_write_checks() argument
854 struct file *file = iocb->ki_filp; in zonefs_write_checks()
865 if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT)) in zonefs_write_checks()
868 if (iocb->ki_flags & IOCB_APPEND) { in zonefs_write_checks()
872 iocb->ki_pos = zi->i_wpoffset; in zonefs_write_checks()
876 count = zonefs_write_check_limits(file, iocb->ki_pos, in zonefs_write_checks()
895 static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from) in zonefs_file_dio_write() argument
897 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_dio_write()
900 bool sync = is_sync_kiocb(iocb); in zonefs_file_dio_write()
910 (iocb->ki_flags & IOCB_NOWAIT)) in zonefs_file_dio_write()
913 if (iocb->ki_flags & IOCB_NOWAIT) { in zonefs_file_dio_write()
920 count = zonefs_write_checks(iocb, from); in zonefs_file_dio_write()
926 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) { in zonefs_file_dio_write()
934 if (iocb->ki_pos != zi->i_wpoffset) { in zonefs_file_dio_write()
944 ret = zonefs_file_dio_append(iocb, from); in zonefs_file_dio_write()
946 ret = iomap_dio_rw(iocb, from, &zonefs_write_iomap_ops, in zonefs_file_dio_write()
970 static ssize_t zonefs_file_buffered_write(struct kiocb *iocb, in zonefs_file_buffered_write() argument
973 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_buffered_write()
984 if (iocb->ki_flags & IOCB_NOWAIT) { in zonefs_file_buffered_write()
991 ret = zonefs_write_checks(iocb, from); in zonefs_file_buffered_write()
995 ret = iomap_file_buffered_write(iocb, from, &zonefs_write_iomap_ops); in zonefs_file_buffered_write()
997 iocb->ki_pos += ret; in zonefs_file_buffered_write()
1004 ret = generic_write_sync(iocb, ret); in zonefs_file_buffered_write()
1009 static ssize_t zonefs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) in zonefs_file_write_iter() argument
1011 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_write_iter()
1020 if (iocb->ki_pos >= ZONEFS_I(inode)->i_max_size) in zonefs_file_write_iter()
1023 if (iocb->ki_flags & IOCB_DIRECT) { in zonefs_file_write_iter()
1024 ssize_t ret = zonefs_file_dio_write(iocb, from); in zonefs_file_write_iter()
1029 return zonefs_file_buffered_write(iocb, from); in zonefs_file_write_iter()
1032 static int zonefs_file_read_dio_end_io(struct kiocb *iocb, ssize_t size, in zonefs_file_read_dio_end_io() argument
1036 zonefs_io_error(file_inode(iocb->ki_filp), false); in zonefs_file_read_dio_end_io()
1047 static ssize_t zonefs_file_read_iter(struct kiocb *iocb, struct iov_iter *to) in zonefs_file_read_iter() argument
1049 struct inode *inode = file_inode(iocb->ki_filp); in zonefs_file_read_iter()
1059 if (iocb->ki_pos >= zi->i_max_size) in zonefs_file_read_iter()
1062 if (iocb->ki_flags & IOCB_NOWAIT) { in zonefs_file_read_iter()
1072 if (iocb->ki_pos >= isize) { in zonefs_file_read_iter()
1077 iov_iter_truncate(to, isize - iocb->ki_pos); in zonefs_file_read_iter()
1080 if (iocb->ki_flags & IOCB_DIRECT) { in zonefs_file_read_iter()
1083 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) { in zonefs_file_read_iter()
1087 file_accessed(iocb->ki_filp); in zonefs_file_read_iter()
1088 ret = iomap_dio_rw(iocb, to, &zonefs_read_iomap_ops, in zonefs_file_read_iter()
1091 ret = generic_file_read_iter(iocb, to); in zonefs_file_read_iter()