Lines Matching defs:wreq

15 static void netfs_unbuffered_write_done(struct netfs_io_request *wreq)
17 struct netfs_inode *ictx = netfs_inode(wreq->inode);
19 _enter("R=%x", wreq->debug_id);
22 trace_netfs_rreq(wreq, netfs_rreq_trace_write_done);
24 if (wreq->transferred)
25 netfs_update_i_size(ictx, &ictx->inode, wreq->start, wreq->transferred);
27 if (wreq->origin == NETFS_DIO_WRITE &&
28 wreq->mapping->nrpages) {
35 pgoff_t first = wreq->start >> PAGE_SHIFT;
36 pgoff_t last = (wreq->start + wreq->transferred - 1) >> PAGE_SHIFT;
38 invalidate_inode_pages2_range(wreq->mapping, first, last);
41 if (wreq->origin == NETFS_DIO_WRITE)
42 inode_dio_end(wreq->inode);
45 netfs_wake_rreq_flag(wreq, NETFS_RREQ_IN_PROGRESS, netfs_rreq_trace_wake_ip);
48 if (wreq->iocb) {
49 size_t written = umin(wreq->transferred, wreq->len);
51 wreq->iocb->ki_pos += written;
52 if (wreq->iocb->ki_complete) {
53 trace_netfs_rreq(wreq, netfs_rreq_trace_ki_complete);
54 wreq->iocb->ki_complete(wreq->iocb, written ?: wreq->error);
56 wreq->iocb = VFS_PTR_POISON;
59 netfs_clear_subrequests(wreq);
65 static void netfs_unbuffered_write_collect(struct netfs_io_request *wreq,
69 trace_netfs_collect_sreq(wreq, subreq);
71 spin_lock(&wreq->lock);
73 spin_unlock(&wreq->lock);
75 wreq->transferred += subreq->transferred;
76 iov_iter_advance(&wreq->buffer.iter, subreq->transferred);
79 wreq->collected_to = stream->collected_to;
82 trace_netfs_collect_stream(wreq, stream);
83 trace_netfs_collect_state(wreq, wreq->collected_to, 0);
94 static int netfs_unbuffered_write(struct netfs_io_request *wreq)
97 struct netfs_io_stream *stream = &wreq->io_streams[0];
100 _enter("%llx", wreq->len);
102 if (wreq->origin == NETFS_DIO_WRITE)
103 inode_dio_begin(wreq->inode);
105 stream->collected_to = wreq->start;
111 netfs_prepare_write(wreq, stream, wreq->start + wreq->transferred);
114 wreq->error = -ENOMEM;
124 wreq->error = subreq->error;
128 iov_iter_truncate(&subreq->io_iter, wreq->len - wreq->transferred);
131 wreq->debug_id);
134 wreq->error = -EIO;
148 netfs_wait_for_in_progress_stream(wreq, stream);
153 wreq->error = subreq->error;
160 netfs_unbuffered_write_collect(wreq, stream, subreq);
162 if (wreq->transferred >= wreq->len)
164 if (!wreq->iocb && signal_pending(current)) {
165 ret = wreq->transferred ? -EINTR : -ERESTARTSYS;
166 trace_netfs_rreq(wreq, netfs_rreq_trace_intr);
179 iov_iter_advance(&wreq->buffer.iter, subreq->transferred);
180 wreq->transferred += subreq->transferred;
184 wreq->netfs_ops->retry_request)
185 wreq->netfs_ops->retry_request(wreq, stream);
191 subreq->io_iter = wreq->buffer.iter;
192 subreq->start = wreq->start + wreq->transferred;
193 subreq->len = wreq->len - wreq->transferred;
207 netfs_unbuffered_write_done(wreq);
214 struct netfs_io_request *wreq = container_of(work, struct netfs_io_request, work);
216 netfs_unbuffered_write(wreq);
217 netfs_put_request(wreq, netfs_rreq_trace_put_complete);
227 struct netfs_io_request *wreq;
244 wreq = netfs_create_write_req(iocb->ki_filp->f_mapping, iocb->ki_filp, start,
247 if (IS_ERR(wreq))
248 return PTR_ERR(wreq);
250 wreq->io_streams[0].avail = true;
251 trace_netfs_write(wreq, (iocb->ki_flags & IOCB_DIRECT ?
265 n = netfs_extract_user_iter(iter, len, &wreq->buffer.iter, 0);
270 wreq->direct_bv = (struct bio_vec *)wreq->buffer.iter.bvec;
271 wreq->direct_bv_count = n;
272 wreq->direct_bv_unpin = iov_iter_extract_will_pin(iter);
279 wreq->buffer.iter = *iter;
282 wreq->len = iov_iter_count(&wreq->buffer.iter);
285 __set_bit(NETFS_RREQ_USE_IO_ITER, &wreq->flags);
291 __set_bit(NETFS_RREQ_UPLOAD_TO_SERVER, &wreq->flags);
294 INIT_WORK(&wreq->work, netfs_unbuffered_write_async);
295 wreq->iocb = iocb;
296 queue_work(system_dfl_wq, &wreq->work);
299 ret = netfs_unbuffered_write(wreq);
300 if (wreq->transferred) {
301 iocb->ki_pos += wreq->transferred;
302 ret = wreq->transferred;
303 } else if (wreq->error) {
304 ret = wreq->error;
307 netfs_put_request(wreq, netfs_rreq_trace_put_complete);
310 netfs_put_request(wreq, netfs_rreq_trace_put_return);
314 netfs_put_failed_request(wreq);