Lines Matching defs:ia

418 	struct fuse_io_args ia;
562 void fuse_read_args_fill(struct fuse_io_args *ia, struct file *file, loff_t pos,
566 struct fuse_args *args = &ia->ap.args;
568 ia->read.in.fh = ff->fh;
569 ia->read.in.offset = pos;
570 ia->read.in.size = count;
571 ia->read.in.flags = file->f_flags;
575 args->in_args[0].size = sizeof(ia->read.in);
576 args->in_args[0].value = &ia->read.in;
667 struct fuse_io_args *ia;
669 ia = kzalloc(sizeof(*ia), GFP_KERNEL);
670 if (ia) {
671 ia->io = io;
672 ia->ap.folios = fuse_folios_alloc(nfolios, GFP_KERNEL,
673 &ia->ap.descs);
674 if (!ia->ap.folios) {
675 kfree(ia);
676 ia = NULL;
679 return ia;
682 static void fuse_io_free(struct fuse_io_args *ia)
684 kfree(ia->ap.folios);
685 kfree(ia);
691 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args);
692 struct fuse_io_priv *io = ia->io;
699 if (ia->write.out.size > ia->write.in.size) {
702 nres = ia->write.out.size;
703 if (ia->write.in.size != ia->write.out.size)
704 pos = ia->write.in.offset - io->offset +
705 ia->write.out.size;
711 if (ia->read.in.size != outsize)
712 pos = ia->read.in.offset - io->offset + outsize;
715 fuse_release_user_pages(&ia->ap, err ?: nres, io->should_dirty);
718 fuse_io_free(ia);
722 struct fuse_io_args *ia, size_t num_bytes)
725 struct fuse_io_priv *io = ia->io;
733 ia->ap.args.end = fuse_aio_complete_req;
734 ia->ap.args.may_block = io->should_dirty;
735 err = fuse_simple_background(fm, &ia->ap.args, GFP_KERNEL);
737 fuse_aio_complete_req(fm, &ia->ap.args, err);
742 static ssize_t fuse_send_read(struct fuse_io_args *ia, loff_t pos, size_t count,
745 struct file *file = ia->io->iocb->ki_filp;
749 fuse_read_args_fill(ia, file, pos, count, FUSE_READ);
751 ia->read.in.read_flags |= FUSE_READ_LOCKOWNER;
752 ia->read.in.lock_owner = fuse_lock_owner_id(fm->fc, owner);
755 if (ia->io->async)
756 return fuse_async_req_send(fm, ia, count);
758 return fuse_simple_request(fm, &ia->ap.args);
802 struct fuse_io_args ia = {
818 fuse_read_args_fill(&ia, file, pos, desc.length, FUSE_READ);
819 res = fuse_simple_request(fm, &ia.ap.args);
826 fuse_short_read(inode, attr_ver, res, &ia.ap);
864 struct fuse_io_args *ia = container_of(args, typeof(*ia), ap.args);
865 struct fuse_args_pages *ap = &ia->ap;
866 size_t count = ia->read.in.size;
880 fuse_short_read(inode, ia->read.attr_ver, num_read, ap);
889 if (ia->ff)
890 fuse_file_put(ia->ff, false);
892 fuse_io_free(ia);
895 static void fuse_send_readpages(struct fuse_io_args *ia, struct file *file,
900 struct fuse_args_pages *ap = &ia->ap;
916 fuse_read_args_fill(ia, file, pos, count, FUSE_READ);
917 ia->read.attr_ver = fuse_get_attr_version(fm->fc);
919 ia->ff = fuse_file_get(ff);
956 struct fuse_io_args *ia;
969 ia = fuse_io_alloc(NULL, cur_pages);
970 if (!ia)
972 ap = &ia->ap;
1003 fuse_send_readpages(ia, rac->file, pages << PAGE_SHIFT);
1033 static void fuse_write_args_fill(struct fuse_io_args *ia, struct fuse_file *ff,
1036 struct fuse_args *args = &ia->ap.args;
1038 ia->write.in.fh = ff->fh;
1039 ia->write.in.offset = pos;
1040 ia->write.in.size = count;
1047 args->in_args[0].size = sizeof(ia->write.in);
1048 args->in_args[0].value = &ia->write.in;
1051 args->out_args[0].size = sizeof(ia->write.out);
1052 args->out_args[0].value = &ia->write.out;
1067 static ssize_t fuse_send_write(struct fuse_io_args *ia, loff_t pos,
1070 struct kiocb *iocb = ia->io->iocb;
1074 struct fuse_write_in *inarg = &ia->write.in;
1077 fuse_write_args_fill(ia, ff, pos, count);
1084 if (ia->io->async)
1085 return fuse_async_req_send(fm, ia, count);
1087 err = fuse_simple_request(fm, &ia->ap.args);
1088 if (!err && ia->write.out.size > count)
1091 return err ?: ia->write.out.size;
1113 static ssize_t fuse_send_write_pages(struct fuse_io_args *ia,
1117 struct fuse_args_pages *ap = &ia->ap;
1128 fuse_write_args_fill(ia, ff, pos, count);
1129 ia->write.in.flags = fuse_write_flags(iocb);
1131 ia->write.in.write_flags |= FUSE_WRITE_KILL_SUIDGID;
1134 if (!err && ia->write.out.size > count)
1137 short_write = ia->write.out.size < count;
1139 count = ia->write.out.size;
1155 if (ia->write.folio_locked && (i == ap->num_folios - 1))
1163 static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia,
1168 struct fuse_args_pages *ap = &ia->ap;
1239 ia->write.folio_locked = true;
1273 struct fuse_io_args ia = {};
1274 struct fuse_args_pages *ap = &ia.ap;
1284 count = fuse_fill_write_pages(&ia, mapping, ii, pos, nr_pages);
1288 err = fuse_send_write_pages(&ia, iocb, inode,
1291 size_t num_written = ia.write.out.size;
1598 struct fuse_io_args *ia;
1603 ia = fuse_io_alloc(io, max_pages);
1604 if (!ia)
1610 fuse_io_free(ia);
1625 fuse_io_free(ia);
1636 err = fuse_get_user_pages(&ia->ap, iter, &nbytes, write,
1643 ia->write.in.write_flags |= FUSE_WRITE_KILL_SUIDGID;
1645 nres = fuse_send_write(ia, pos, nbytes, owner);
1647 nres = fuse_send_read(ia, pos, nbytes, owner);
1651 fuse_release_user_pages(&ia->ap, nres, io->should_dirty);
1652 fuse_io_free(ia);
1654 ia = NULL;
1671 ia = fuse_io_alloc(io, max_pages);
1672 if (!ia)
1676 if (ia)
1677 fuse_io_free(ia);
1810 struct fuse_args_pages *ap = &wpa->ia.ap;
1815 fuse_file_put(wpa->ia.ff, false);
1823 struct fuse_args_pages *ap = &wpa->ia.ap;
1850 struct fuse_args_pages *ap = &wpa->ia.ap;
1851 struct fuse_write_in *inarg = &wpa->ia.write.in;
1921 container_of(args, typeof(*wpa), ia.ap.args);
1984 ap = &wpa->ia.ap;
2014 struct fuse_args_pages *ap = &wpa->ia.ap;
2037 fuse_write_args_fill(&wpa->ia, ff, folio_pos(folio) + offset, 0);
2038 wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE;
2040 wpa->ia.ff = ff;
2042 ap = &wpa->ia.ap;
2064 struct fuse_args_pages *ap = &data->wpa->ia.ap;
2139 struct fuse_args_pages *ap = &wpa->ia.ap;
2163 fuse_file_get(wpa->ia.ff);
2165 ap = &wpa->ia.ap;
2188 WARN_ON(!data->wpa->ia.ap.num_folios);