Lines Matching refs:io_data

739 	struct ffs_io_data *io_data = req->context;  in ffs_epfile_io_complete()  local
742 io_data->status = req->status; in ffs_epfile_io_complete()
744 io_data->status = req->actual; in ffs_epfile_io_complete()
746 complete(&io_data->done); in ffs_epfile_io_complete()
829 static inline void *ffs_alloc_buffer(struct ffs_io_data *io_data, in ffs_alloc_buffer() argument
832 if (io_data->use_sg) in ffs_alloc_buffer()
833 return ffs_build_sg_list(&io_data->sgt, data_len); in ffs_alloc_buffer()
838 static inline void ffs_free_buffer(struct ffs_io_data *io_data) in ffs_free_buffer() argument
840 if (!io_data->buf) in ffs_free_buffer()
843 if (io_data->use_sg) { in ffs_free_buffer()
844 sg_free_table(&io_data->sgt); in ffs_free_buffer()
845 vfree(io_data->buf); in ffs_free_buffer()
847 kfree(io_data->buf); in ffs_free_buffer()
853 struct ffs_io_data *io_data = container_of(work, struct ffs_io_data, in ffs_user_copy_worker() local
855 int ret = io_data->status; in ffs_user_copy_worker()
856 bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD; in ffs_user_copy_worker()
859 if (io_data->read && ret > 0) { in ffs_user_copy_worker()
860 kthread_use_mm(io_data->mm); in ffs_user_copy_worker()
861 ret = ffs_copy_to_iter(io_data->buf, ret, &io_data->data); in ffs_user_copy_worker()
862 kthread_unuse_mm(io_data->mm); in ffs_user_copy_worker()
865 io_data->kiocb->ki_complete(io_data->kiocb, ret); in ffs_user_copy_worker()
867 if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd) in ffs_user_copy_worker()
868 eventfd_signal(io_data->ffs->ffs_eventfd); in ffs_user_copy_worker()
870 spin_lock_irqsave(&io_data->ffs->eps_lock, flags); in ffs_user_copy_worker()
871 usb_ep_free_request(io_data->ep, io_data->req); in ffs_user_copy_worker()
872 io_data->req = NULL; in ffs_user_copy_worker()
873 spin_unlock_irqrestore(&io_data->ffs->eps_lock, flags); in ffs_user_copy_worker()
875 if (io_data->read) in ffs_user_copy_worker()
876 kfree(io_data->to_free); in ffs_user_copy_worker()
877 ffs_free_buffer(io_data); in ffs_user_copy_worker()
878 kfree(io_data); in ffs_user_copy_worker()
884 struct ffs_io_data *io_data = req->context; in ffs_epfile_async_io_complete() local
885 struct ffs_data *ffs = io_data->ffs; in ffs_epfile_async_io_complete()
887 io_data->status = req->status ? req->status : req->actual; in ffs_epfile_async_io_complete()
889 INIT_WORK(&io_data->work, ffs_user_copy_worker); in ffs_epfile_async_io_complete()
890 queue_work(ffs->io_completion_wq, &io_data->work); in ffs_epfile_async_io_complete()
996 static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) in ffs_epfile_io() argument
1014 halt = (!io_data->read == !epfile->in); in ffs_epfile_io()
1034 if (!io_data->aio && io_data->read) { in ffs_epfile_io()
1035 ret = __ffs_epfile_read_buffered(epfile, &io_data->data); in ffs_epfile_io()
1053 data_len = iov_iter_count(&io_data->data); in ffs_epfile_io()
1058 if (io_data->read) in ffs_epfile_io()
1061 io_data->use_sg = gadget->sg_supported && data_len > PAGE_SIZE; in ffs_epfile_io()
1064 data = ffs_alloc_buffer(io_data, data_len); in ffs_epfile_io()
1069 if (!io_data->read && in ffs_epfile_io()
1070 !copy_from_iter_full(data, data_len, &io_data->data)) { in ffs_epfile_io()
1099 } else if (!io_data->aio) { in ffs_epfile_io()
1103 if (io_data->use_sg) { in ffs_epfile_io()
1105 req->sg = io_data->sgt.sgl; in ffs_epfile_io()
1106 req->num_sgs = io_data->sgt.nents; in ffs_epfile_io()
1113 io_data->buf = data; in ffs_epfile_io()
1115 init_completion(&io_data->done); in ffs_epfile_io()
1116 req->context = io_data; in ffs_epfile_io()
1125 if (wait_for_completion_interruptible(&io_data->done)) { in ffs_epfile_io()
1139 wait_for_completion(&io_data->done); in ffs_epfile_io()
1140 interrupted = io_data->status < 0; in ffs_epfile_io()
1145 else if (io_data->read && io_data->status > 0) in ffs_epfile_io()
1146 ret = __ffs_epfile_read_data(epfile, data, io_data->status, in ffs_epfile_io()
1147 &io_data->data); in ffs_epfile_io()
1149 ret = io_data->status; in ffs_epfile_io()
1154 if (io_data->use_sg) { in ffs_epfile_io()
1156 req->sg = io_data->sgt.sgl; in ffs_epfile_io()
1157 req->num_sgs = io_data->sgt.nents; in ffs_epfile_io()
1164 io_data->buf = data; in ffs_epfile_io()
1165 io_data->ep = ep->ep; in ffs_epfile_io()
1166 io_data->req = req; in ffs_epfile_io()
1167 io_data->ffs = epfile->ffs; in ffs_epfile_io()
1169 req->context = io_data; in ffs_epfile_io()
1174 io_data->req = NULL; in ffs_epfile_io()
1193 ffs_free_buffer(io_data); in ffs_epfile_io()
1213 struct ffs_io_data *io_data = kiocb->private; in ffs_aio_cancel() local
1220 if (io_data && io_data->ep && io_data->req) in ffs_aio_cancel()
1221 value = usb_ep_dequeue(io_data->ep, io_data->req); in ffs_aio_cancel()
1232 struct ffs_io_data io_data, *p = &io_data; in ffs_epfile_write_iter() local
1236 p = kzalloc(sizeof(io_data), GFP_KERNEL); in ffs_epfile_write_iter()
1267 struct ffs_io_data io_data, *p = &io_data; in ffs_epfile_read_iter() local
1271 p = kzalloc(sizeof(io_data), GFP_KERNEL); in ffs_epfile_read_iter()