Lots of lines > 80 chars, and various indentation errors, I'm not going to point them out invdividually. > ssize_t btrfs_dio_iomap_read(struct kiocb *iocb, struct iov_iter *to) > @@ -437,7 +536,58 @@ ssize_t btrfs_dio_iomap_read(struct kiocb *iocb, struct iov_iter *to) > struct inode *inode = file_inode(iocb->ki_filp); > ssize_t ret; > inode_lock_shared(inode); > - ret = iomap_dio_rw(iocb, to, &btrfs_dio_iomap_ops, NULL); > + ret = iomap_dio_rw(iocb, to, &btrfs_dio_iomap_ops, &btrfs_dops); So the read did not previously need the submit callback, but it does now? That seems a little odd. > inode_unlock_shared(inode); > return ret; > } > + > +ssize_t btrfs_dio_iomap_write(struct kiocb *iocb, struct iov_iter *from) Why not just brfs_dio_write? > + written = iomap_dio_rw(iocb, from, &btrfs_dio_iomap_ops, &btrfs_dops); > + if (written < count) { > + ssize_t done = (written < 0) ? 0 : written; > + btrfs_delalloc_release_space(inode, data_reserved, pos, count - done, > + true); Line > 80 characters. > +out: > + if (written > 0 && iocb->ki_pos > i_size_read(inode)) > + i_size_write(inode, iocb->ki_pos); Odd indentation. > + return written ? written : err; But not: if (!written) return err; if (iocb->ki_pos > i_size_read(inode)) i_size_write(inode, iocb->ki_pos); return written;