Lines Matching refs:ia
359 struct fuse_io_args ia; member
375 curr_index = wpa->ia.write.in.offset >> PAGE_SHIFT; in fuse_find_writeback()
376 if (idx_from < curr_index + wpa->ia.ap.num_pages && in fuse_find_writeback()
551 void fuse_read_args_fill(struct fuse_io_args *ia, struct file *file, loff_t pos, in fuse_read_args_fill() argument
555 struct fuse_args *args = &ia->ap.args; in fuse_read_args_fill()
557 ia->read.in.fh = ff->fh; in fuse_read_args_fill()
558 ia->read.in.offset = pos; in fuse_read_args_fill()
559 ia->read.in.size = count; in fuse_read_args_fill()
560 ia->read.in.flags = file->f_flags; in fuse_read_args_fill()
564 args->in_args[0].size = sizeof(ia->read.in); in fuse_read_args_fill()
565 args->in_args[0].value = &ia->read.in; in fuse_read_args_fill()
652 struct fuse_io_args *ia; in fuse_io_alloc() local
654 ia = kzalloc(sizeof(*ia), GFP_KERNEL); in fuse_io_alloc()
655 if (ia) { in fuse_io_alloc()
656 ia->io = io; in fuse_io_alloc()
657 ia->ap.pages = fuse_pages_alloc(npages, GFP_KERNEL, in fuse_io_alloc()
658 &ia->ap.descs); in fuse_io_alloc()
659 if (!ia->ap.pages) { in fuse_io_alloc()
660 kfree(ia); in fuse_io_alloc()
661 ia = NULL; in fuse_io_alloc()
664 return ia; in fuse_io_alloc()
667 static void fuse_io_free(struct fuse_io_args *ia) in fuse_io_free() argument
669 kfree(ia->ap.pages); in fuse_io_free()
670 kfree(ia); in fuse_io_free()
676 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args); in fuse_aio_complete_req() local
677 struct fuse_io_priv *io = ia->io; in fuse_aio_complete_req()
680 fuse_release_user_pages(&ia->ap, io->should_dirty); in fuse_aio_complete_req()
685 if (ia->write.out.size > ia->write.in.size) { in fuse_aio_complete_req()
687 } else if (ia->write.in.size != ia->write.out.size) { in fuse_aio_complete_req()
688 pos = ia->write.in.offset - io->offset + in fuse_aio_complete_req()
689 ia->write.out.size; in fuse_aio_complete_req()
694 if (ia->read.in.size != outsize) in fuse_aio_complete_req()
695 pos = ia->read.in.offset - io->offset + outsize; in fuse_aio_complete_req()
699 fuse_io_free(ia); in fuse_aio_complete_req()
703 struct fuse_io_args *ia, size_t num_bytes) in fuse_async_req_send() argument
706 struct fuse_io_priv *io = ia->io; in fuse_async_req_send()
714 ia->ap.args.end = fuse_aio_complete_req; in fuse_async_req_send()
715 err = fuse_simple_background(fc, &ia->ap.args, GFP_KERNEL); in fuse_async_req_send()
720 static ssize_t fuse_send_read(struct fuse_io_args *ia, loff_t pos, size_t count, in fuse_send_read() argument
723 struct file *file = ia->io->iocb->ki_filp; in fuse_send_read()
727 fuse_read_args_fill(ia, file, pos, count, FUSE_READ); in fuse_send_read()
729 ia->read.in.read_flags |= FUSE_READ_LOCKOWNER; in fuse_send_read()
730 ia->read.in.lock_owner = fuse_lock_owner_id(fc, owner); in fuse_send_read()
733 if (ia->io->async) in fuse_send_read()
734 return fuse_async_req_send(fc, ia, count); in fuse_send_read()
736 return fuse_simple_request(fc, &ia->ap.args); in fuse_send_read()
785 struct fuse_io_args ia = { in fuse_do_readpage() local
804 fuse_read_args_fill(&ia, file, pos, desc.length, FUSE_READ); in fuse_do_readpage()
805 res = fuse_simple_request(fc, &ia.ap.args); in fuse_do_readpage()
812 fuse_short_read(inode, attr_ver, res, &ia.ap); in fuse_do_readpage()
839 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args); in fuse_readpages_end() local
840 struct fuse_args_pages *ap = &ia->ap; in fuse_readpages_end()
841 size_t count = ia->read.in.size; in fuse_readpages_end()
855 fuse_short_read(inode, ia->read.attr_ver, num_read, ap); in fuse_readpages_end()
870 if (ia->ff) in fuse_readpages_end()
871 fuse_file_put(ia->ff, false, false); in fuse_readpages_end()
873 fuse_io_free(ia); in fuse_readpages_end()
876 static void fuse_send_readpages(struct fuse_io_args *ia, struct file *file) in fuse_send_readpages() argument
880 struct fuse_args_pages *ap = &ia->ap; in fuse_send_readpages()
888 fuse_read_args_fill(ia, file, pos, count, FUSE_READ); in fuse_send_readpages()
889 ia->read.attr_ver = fuse_get_attr_version(fc); in fuse_send_readpages()
891 ia->ff = fuse_file_get(ff); in fuse_send_readpages()
903 struct fuse_io_args *ia; member
913 struct fuse_io_args *ia = data->ia; in fuse_readpages_fill() local
914 struct fuse_args_pages *ap = &ia->ap; in fuse_readpages_fill()
926 fuse_send_readpages(ia, data->file); in fuse_readpages_fill()
927 data->ia = ia = fuse_io_alloc(NULL, data->max_pages); in fuse_readpages_fill()
928 if (!ia) { in fuse_readpages_fill()
932 ap = &ia->ap; in fuse_readpages_fill()
937 fuse_io_free(ia); in fuse_readpages_fill()
966 data.ia = fuse_io_alloc(NULL, data.max_pages); in fuse_readpages()
968 if (!data.ia) in fuse_readpages()
973 if (data.ia->ap.num_pages) in fuse_readpages()
974 fuse_send_readpages(data.ia, file); in fuse_readpages()
976 fuse_io_free(data.ia); in fuse_readpages()
1003 static void fuse_write_args_fill(struct fuse_io_args *ia, struct fuse_file *ff, in fuse_write_args_fill() argument
1006 struct fuse_args *args = &ia->ap.args; in fuse_write_args_fill()
1008 ia->write.in.fh = ff->fh; in fuse_write_args_fill()
1009 ia->write.in.offset = pos; in fuse_write_args_fill()
1010 ia->write.in.size = count; in fuse_write_args_fill()
1017 args->in_args[0].size = sizeof(ia->write.in); in fuse_write_args_fill()
1018 args->in_args[0].value = &ia->write.in; in fuse_write_args_fill()
1021 args->out_args[0].size = sizeof(ia->write.out); in fuse_write_args_fill()
1022 args->out_args[0].value = &ia->write.out; in fuse_write_args_fill()
1037 static ssize_t fuse_send_write(struct fuse_io_args *ia, loff_t pos, in fuse_send_write() argument
1040 struct kiocb *iocb = ia->io->iocb; in fuse_send_write()
1044 struct fuse_write_in *inarg = &ia->write.in; in fuse_send_write()
1047 fuse_write_args_fill(ia, ff, pos, count); in fuse_send_write()
1054 if (ia->io->async) in fuse_send_write()
1055 return fuse_async_req_send(fc, ia, count); in fuse_send_write()
1057 err = fuse_simple_request(fc, &ia->ap.args); in fuse_send_write()
1058 if (!err && ia->write.out.size > count) in fuse_send_write()
1061 return err ?: ia->write.out.size; in fuse_send_write()
1081 static ssize_t fuse_send_write_pages(struct fuse_io_args *ia, in fuse_send_write_pages() argument
1085 struct fuse_args_pages *ap = &ia->ap; in fuse_send_write_pages()
1095 fuse_write_args_fill(ia, ff, pos, count); in fuse_send_write_pages()
1096 ia->write.in.flags = fuse_write_flags(iocb); in fuse_send_write_pages()
1101 count = ia->write.out.size; in fuse_send_write_pages()
1210 struct fuse_io_args ia = {}; in fuse_perform_write() local
1211 struct fuse_args_pages *ap = &ia.ap; in fuse_perform_write()
1225 err = fuse_send_write_pages(&ia, iocb, inode, in fuse_perform_write()
1228 size_t num_written = ia.write.out.size; in fuse_perform_write()
1419 struct fuse_io_args *ia; in fuse_direct_io() local
1423 ia = fuse_io_alloc(io, max_pages); in fuse_direct_io()
1424 if (!ia) in fuse_direct_io()
1427 ia->io = io; in fuse_direct_io()
1442 err = fuse_get_user_pages(&ia->ap, iter, &nbytes, write, in fuse_direct_io()
1449 ia->write.in.write_flags |= FUSE_WRITE_KILL_PRIV; in fuse_direct_io()
1451 nres = fuse_send_write(ia, pos, nbytes, owner); in fuse_direct_io()
1453 nres = fuse_send_read(ia, pos, nbytes, owner); in fuse_direct_io()
1457 fuse_release_user_pages(&ia->ap, io->should_dirty); in fuse_direct_io()
1458 fuse_io_free(ia); in fuse_direct_io()
1460 ia = NULL; in fuse_direct_io()
1474 ia = fuse_io_alloc(io, max_pages); in fuse_direct_io()
1475 if (!ia) in fuse_direct_io()
1479 if (ia) in fuse_direct_io()
1480 fuse_io_free(ia); in fuse_direct_io()
1574 struct fuse_args_pages *ap = &wpa->ia.ap; in fuse_writepage_free()
1580 if (wpa->ia.ff) in fuse_writepage_free()
1581 fuse_file_put(wpa->ia.ff, false, false); in fuse_writepage_free()
1590 struct fuse_args_pages *ap = &wpa->ia.ap; in fuse_writepage_finish()
1613 struct fuse_write_in *inarg = &wpa->ia.write.in; in fuse_send_writepage()
1614 struct fuse_args *args = &wpa->ia.ap.args; in fuse_send_writepage()
1615 __u64 data_size = wpa->ia.ap.num_pages * PAGE_SIZE; in fuse_send_writepage()
1688 container_of(args, typeof(*wpa), ia.ap.args); in fuse_writepage_end()
1696 struct fuse_write_in *inarg = &wpa->ia.write.in; in fuse_writepage_end()
1701 next->ia.ff = fuse_file_get(wpa->ia.ff); in fuse_writepage_end()
1781 ap = &wpa->ia.ap; in fuse_writepage_args_alloc()
1809 ap = &wpa->ia.ap; in fuse_writepage_locked()
1816 wpa->ia.ff = fuse_write_file_get(fc, fi); in fuse_writepage_locked()
1817 if (!wpa->ia.ff) in fuse_writepage_locked()
1820 fuse_write_args_fill(&wpa->ia, wpa->ia.ff, page_offset(page), 0); in fuse_writepage_locked()
1823 wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE; in fuse_writepage_locked()
1889 struct fuse_args_pages *ap = &data->wpa->ia.ap; in fuse_pages_realloc()
1918 int num_pages = wpa->ia.ap.num_pages; in fuse_writepages_send()
1921 wpa->ia.ff = fuse_file_get(data->ff); in fuse_writepages_send()
1944 struct fuse_args_pages *new_ap = &new_wpa->ia.ap; in fuse_writepage_in_flight()
1962 curr_index = tmp->ia.write.in.offset >> PAGE_SHIFT; in fuse_writepage_in_flight()
1964 WARN_ON(tmp->ia.ap.num_pages != 1); in fuse_writepage_in_flight()
1965 swap(tmp->ia.ap.pages[0], new_ap->pages[0]); in fuse_writepage_in_flight()
1994 struct fuse_args_pages *ap = &wpa->ia.ap; in fuse_writepages_fill()
2057 ap = &wpa->ia.ap; in fuse_writepages_fill()
2058 fuse_write_args_fill(&wpa->ia, data->ff, page_offset(page), 0); in fuse_writepages_fill()
2059 wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE; in fuse_writepages_fill()
2130 WARN_ON(!data.wpa->ia.ap.num_pages); in fuse_writepages()