Lines Matching defs:iocb

702 static int zonefs_file_write_dio_end_io(struct kiocb *iocb, ssize_t size,
705 struct inode *inode = file_inode(iocb->ki_filp);
722 if (i_size_read(inode) < iocb->ki_pos + size) {
723 zonefs_update_stats(inode, iocb->ki_pos + size);
724 zonefs_i_size_write(inode, iocb->ki_pos + size);
736 static ssize_t zonefs_file_dio_append(struct kiocb *iocb, struct iov_iter *from)
738 struct inode *inode = file_inode(iocb->ki_filp);
761 bio->bi_write_hint = iocb->ki_hint;
762 bio->bi_ioprio = iocb->ki_ioprio;
764 if (iocb->ki_flags & IOCB_DSYNC)
774 if (iocb->ki_flags & IOCB_HIPRI)
775 bio_set_polled(bio, iocb);
797 zonefs_file_write_dio_end_io(iocb, size, ret, 0);
804 iocb->ki_pos += size;
840 static ssize_t zonefs_write_checks(struct kiocb *iocb, struct iov_iter *from)
842 struct file *file = iocb->ki_filp;
853 if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT))
856 if (iocb->ki_flags & IOCB_APPEND) {
860 iocb->ki_pos = zi->i_wpoffset;
864 count = zonefs_write_check_limits(file, iocb->ki_pos,
883 static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from)
885 struct inode *inode = file_inode(iocb->ki_filp);
888 bool sync = is_sync_kiocb(iocb);
898 (iocb->ki_flags & IOCB_NOWAIT))
901 if (iocb->ki_flags & IOCB_NOWAIT) {
908 count = zonefs_write_checks(iocb, from);
914 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
922 if (iocb->ki_pos != zi->i_wpoffset) {
932 ret = zonefs_file_dio_append(iocb, from);
934 ret = iomap_dio_rw(iocb, from, &zonefs_write_iomap_ops,
951 static ssize_t zonefs_file_buffered_write(struct kiocb *iocb,
954 struct inode *inode = file_inode(iocb->ki_filp);
965 if (iocb->ki_flags & IOCB_NOWAIT) {
972 ret = zonefs_write_checks(iocb, from);
976 ret = iomap_file_buffered_write(iocb, from, &zonefs_write_iomap_ops);
978 iocb->ki_pos += ret;
985 ret = generic_write_sync(iocb, ret);
990 static ssize_t zonefs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
992 struct inode *inode = file_inode(iocb->ki_filp);
1001 if (iocb->ki_pos >= ZONEFS_I(inode)->i_max_size)
1004 if (iocb->ki_flags & IOCB_DIRECT) {
1005 ssize_t ret = zonefs_file_dio_write(iocb, from);
1010 return zonefs_file_buffered_write(iocb, from);
1013 static int zonefs_file_read_dio_end_io(struct kiocb *iocb, ssize_t size,
1017 zonefs_io_error(file_inode(iocb->ki_filp), false);
1028 static ssize_t zonefs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
1030 struct inode *inode = file_inode(iocb->ki_filp);
1040 if (iocb->ki_pos >= zi->i_max_size)
1043 if (iocb->ki_flags & IOCB_NOWAIT) {
1053 if (iocb->ki_pos >= isize) {
1058 iov_iter_truncate(to, isize - iocb->ki_pos);
1061 if (iocb->ki_flags & IOCB_DIRECT) {
1064 if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
1068 file_accessed(iocb->ki_filp);
1069 ret = iomap_dio_rw(iocb, to, &zonefs_read_iomap_ops,
1070 &zonefs_read_dio_ops, is_sync_kiocb(iocb));
1072 ret = generic_file_read_iter(iocb, to);