Lines Matching defs:ia

417 	struct fuse_io_args ia;
438 curr_index = wpa->ia.write.in.offset >> PAGE_SHIFT;
439 if (idx_from >= curr_index + wpa->ia.ap.num_pages)
628 void fuse_read_args_fill(struct fuse_io_args *ia, struct file *file, loff_t pos,
632 struct fuse_args *args = &ia->ap.args;
634 ia->read.in.fh = ff->fh;
635 ia->read.in.offset = pos;
636 ia->read.in.size = count;
637 ia->read.in.flags = file->f_flags;
641 args->in_args[0].size = sizeof(ia->read.in);
642 args->in_args[0].value = &ia->read.in;
730 struct fuse_io_args *ia;
732 ia = kzalloc(sizeof(*ia), GFP_KERNEL);
733 if (ia) {
734 ia->io = io;
735 ia->ap.pages = fuse_pages_alloc(npages, GFP_KERNEL,
736 &ia->ap.descs);
737 if (!ia->ap.pages) {
738 kfree(ia);
739 ia = NULL;
742 return ia;
745 static void fuse_io_free(struct fuse_io_args *ia)
747 kfree(ia->ap.pages);
748 kfree(ia);
754 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args);
755 struct fuse_io_priv *io = ia->io;
758 fuse_release_user_pages(&ia->ap, io->should_dirty);
763 if (ia->write.out.size > ia->write.in.size) {
765 } else if (ia->write.in.size != ia->write.out.size) {
766 pos = ia->write.in.offset - io->offset +
767 ia->write.out.size;
772 if (ia->read.in.size != outsize)
773 pos = ia->read.in.offset - io->offset + outsize;
777 fuse_io_free(ia);
781 struct fuse_io_args *ia, size_t num_bytes)
784 struct fuse_io_priv *io = ia->io;
792 ia->ap.args.end = fuse_aio_complete_req;
793 ia->ap.args.may_block = io->should_dirty;
794 err = fuse_simple_background(fm, &ia->ap.args, GFP_KERNEL);
796 fuse_aio_complete_req(fm, &ia->ap.args, err);
801 static ssize_t fuse_send_read(struct fuse_io_args *ia, loff_t pos, size_t count,
804 struct file *file = ia->io->iocb->ki_filp;
808 fuse_read_args_fill(ia, file, pos, count, FUSE_READ);
810 ia->read.in.read_flags |= FUSE_READ_LOCKOWNER;
811 ia->read.in.lock_owner = fuse_lock_owner_id(fm->fc, owner);
814 if (ia->io->async)
815 return fuse_async_req_send(fm, ia, count);
817 return fuse_simple_request(fm, &ia->ap.args);
857 struct fuse_io_args ia = {
880 fuse_read_args_fill(&ia, file, pos, desc.length, FUSE_READ);
881 res = fuse_simple_request(fm, &ia.ap.args);
888 fuse_short_read(inode, attr_ver, res, &ia.ap);
916 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args);
917 struct fuse_args_pages *ap = &ia->ap;
918 size_t count = ia->read.in.size;
932 fuse_short_read(inode, ia->read.attr_ver, num_read, ap);
947 if (ia->ff)
948 fuse_file_put(ia->ff, false);
950 fuse_io_free(ia);
953 static void fuse_send_readpages(struct fuse_io_args *ia, struct file *file)
957 struct fuse_args_pages *ap = &ia->ap;
974 fuse_read_args_fill(ia, file, pos, count, FUSE_READ);
975 ia->read.attr_ver = fuse_get_attr_version(fm->fc);
977 ia->ff = fuse_file_get(ff);
1002 struct fuse_io_args *ia;
1018 ia = fuse_io_alloc(NULL, nr_pages);
1019 if (!ia)
1021 ap = &ia->ap;
1029 fuse_send_readpages(ia, rac->file);
1054 static void fuse_write_args_fill(struct fuse_io_args *ia, struct fuse_file *ff,
1057 struct fuse_args *args = &ia->ap.args;
1059 ia->write.in.fh = ff->fh;
1060 ia->write.in.offset = pos;
1061 ia->write.in.size = count;
1068 args->in_args[0].size = sizeof(ia->write.in);
1069 args->in_args[0].value = &ia->write.in;
1072 args->out_args[0].size = sizeof(ia->write.out);
1073 args->out_args[0].value = &ia->write.out;
1088 static ssize_t fuse_send_write(struct fuse_io_args *ia, loff_t pos,
1091 struct kiocb *iocb = ia->io->iocb;
1095 struct fuse_write_in *inarg = &ia->write.in;
1098 fuse_write_args_fill(ia, ff, pos, count);
1105 if (ia->io->async)
1106 return fuse_async_req_send(fm, ia, count);
1108 err = fuse_simple_request(fm, &ia->ap.args);
1109 if (!err && ia->write.out.size > count)
1112 return err ?: ia->write.out.size;
1134 static ssize_t fuse_send_write_pages(struct fuse_io_args *ia,
1138 struct fuse_args_pages *ap = &ia->ap;
1149 fuse_write_args_fill(ia, ff, pos, count);
1150 ia->write.in.flags = fuse_write_flags(iocb);
1152 ia->write.in.write_flags |= FUSE_WRITE_KILL_SUIDGID;
1155 if (!err && ia->write.out.size > count)
1158 short_write = ia->write.out.size < count;
1160 count = ia->write.out.size;
1176 if (ia->write.page_locked && (i == ap->num_pages - 1))
1184 static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia,
1189 struct fuse_args_pages *ap = &ia->ap;
1247 ia->write.page_locked = true;
1282 struct fuse_io_args ia = {};
1283 struct fuse_args_pages *ap = &ia.ap;
1293 count = fuse_fill_write_pages(&ia, mapping, ii, pos, nr_pages);
1297 err = fuse_send_write_pages(&ia, iocb, inode,
1300 size_t num_written = ia.write.out.size;
1549 struct fuse_io_args *ia;
1554 ia = fuse_io_alloc(io, max_pages);
1555 if (!ia)
1561 fuse_io_free(ia);
1576 fuse_io_free(ia);
1587 err = fuse_get_user_pages(&ia->ap, iter, &nbytes, write,
1594 ia->write.in.write_flags |= FUSE_WRITE_KILL_SUIDGID;
1596 nres = fuse_send_write(ia, pos, nbytes, owner);
1598 nres = fuse_send_read(ia, pos, nbytes, owner);
1602 fuse_release_user_pages(&ia->ap, io->should_dirty);
1603 fuse_io_free(ia);
1605 ia = NULL;
1622 ia = fuse_io_alloc(io, max_pages);
1623 if (!ia)
1627 if (ia)
1628 fuse_io_free(ia);
1760 struct fuse_args_pages *ap = &wpa->ia.ap;
1769 if (wpa->ia.ff)
1770 fuse_file_put(wpa->ia.ff, false);
1779 struct fuse_args_pages *ap = &wpa->ia.ap;
1801 struct fuse_write_in *inarg = &wpa->ia.write.in;
1802 struct fuse_args *args = &wpa->ia.ap.args;
1803 __u64 data_size = wpa->ia.ap.num_pages * PAGE_SIZE;
1876 pgoff_t idx_from = wpa->ia.write.in.offset >> PAGE_SHIFT;
1877 pgoff_t idx_to = idx_from + wpa->ia.ap.num_pages - 1;
1881 WARN_ON(!wpa->ia.ap.num_pages);
1890 curr_index = curr->ia.write.in.offset >> PAGE_SHIFT;
1892 if (idx_from >= curr_index + curr->ia.ap.num_pages)
1914 container_of(args, typeof(*wpa), ia.ap.args);
1932 struct fuse_write_in *inarg = &wpa->ia.write.in;
1937 next->ia.ff = fuse_file_get(wpa->ia.ff);
2024 ap = &wpa->ia.ap;
2066 ap = &wpa->ia.ap;
2073 wpa->ia.ff = fuse_write_file_get(fi);
2074 if (!wpa->ia.ff)
2078 fuse_write_args_fill(&wpa->ia, wpa->ia.ff, folio_pos(folio), 0);
2081 wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE;
2124 struct fuse_args_pages *ap = &data->wpa->ia.ap;
2153 int num_pages = wpa->ia.ap.num_pages;
2156 wpa->ia.ff = fuse_file_get(data->ff);
2179 struct fuse_args_pages *new_ap = &new_wpa->ia.ap;
2195 curr_index = tmp->ia.write.in.offset >> PAGE_SHIFT;
2197 WARN_ON(tmp->ia.ap.num_pages != 1);
2198 swap(tmp->ia.ap.pages[0], new_ap->pages[0]);
2261 struct fuse_args_pages *ap = &wpa->ia.ap;
2309 ap = &wpa->ia.ap;
2310 fuse_write_args_fill(&wpa->ia, data->ff, folio_pos(folio), 0);
2311 wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE;
2378 WARN_ON(!data.wpa->ia.ap.num_pages);