Lines Matching refs:rreq

24 	struct netfs_io_request *rreq;  in netfs_alloc_request()  local
30 rreq = mempool_alloc(mempool, GFP_KERNEL); in netfs_alloc_request()
31 if (rreq) in netfs_alloc_request()
36 memset(rreq, 0, kmem_cache_size(cache)); in netfs_alloc_request()
37 rreq->start = start; in netfs_alloc_request()
38 rreq->len = len; in netfs_alloc_request()
39 rreq->origin = origin; in netfs_alloc_request()
40 rreq->netfs_ops = ctx->ops; in netfs_alloc_request()
41 rreq->mapping = mapping; in netfs_alloc_request()
42 rreq->inode = inode; in netfs_alloc_request()
43 rreq->i_size = i_size_read(inode); in netfs_alloc_request()
44 rreq->debug_id = atomic_inc_return(&debug_ids); in netfs_alloc_request()
45 rreq->wsize = INT_MAX; in netfs_alloc_request()
46 rreq->io_streams[0].sreq_max_len = ULONG_MAX; in netfs_alloc_request()
47 rreq->io_streams[0].sreq_max_segs = 0; in netfs_alloc_request()
48 spin_lock_init(&rreq->lock); in netfs_alloc_request()
49 INIT_LIST_HEAD(&rreq->io_streams[0].subrequests); in netfs_alloc_request()
50 INIT_LIST_HEAD(&rreq->io_streams[1].subrequests); in netfs_alloc_request()
51 INIT_LIST_HEAD(&rreq->subrequests); in netfs_alloc_request()
52 refcount_set(&rreq->ref, 1); in netfs_alloc_request()
59 INIT_WORK(&rreq->work, netfs_read_termination_worker); in netfs_alloc_request()
61 INIT_WORK(&rreq->work, netfs_write_collection_worker); in netfs_alloc_request()
63 __set_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags); in netfs_alloc_request()
65 __set_bit(NETFS_RREQ_NONBLOCK, &rreq->flags); in netfs_alloc_request()
66 if (rreq->netfs_ops->init_request) { in netfs_alloc_request()
67 ret = rreq->netfs_ops->init_request(rreq, file); in netfs_alloc_request()
69 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool); in netfs_alloc_request()
75 trace_netfs_rreq_ref(rreq->debug_id, 1, netfs_rreq_trace_new); in netfs_alloc_request()
76 netfs_proc_add_rreq(rreq); in netfs_alloc_request()
78 return rreq; in netfs_alloc_request()
81 void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what) in netfs_get_request() argument
85 __refcount_inc(&rreq->ref, &r); in netfs_get_request()
86 trace_netfs_rreq_ref(rreq->debug_id, r + 1, what); in netfs_get_request()
89 void netfs_clear_subrequests(struct netfs_io_request *rreq, bool was_async) in netfs_clear_subrequests() argument
95 while (!list_empty(&rreq->subrequests)) { in netfs_clear_subrequests()
96 subreq = list_first_entry(&rreq->subrequests, in netfs_clear_subrequests()
103 for (s = 0; s < ARRAY_SIZE(rreq->io_streams); s++) { in netfs_clear_subrequests()
104 stream = &rreq->io_streams[s]; in netfs_clear_subrequests()
117 struct netfs_io_request *rreq = container_of(rcu, struct netfs_io_request, rcu); in netfs_free_request_rcu() local
119 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool); in netfs_free_request_rcu()
125 struct netfs_io_request *rreq = in netfs_free_request() local
127 struct netfs_inode *ictx = netfs_inode(rreq->inode); in netfs_free_request()
130 trace_netfs_rreq(rreq, netfs_rreq_trace_free); in netfs_free_request()
131 netfs_proc_del_rreq(rreq); in netfs_free_request()
132 netfs_clear_subrequests(rreq, false); in netfs_free_request()
133 if (rreq->netfs_ops->free_request) in netfs_free_request()
134 rreq->netfs_ops->free_request(rreq); in netfs_free_request()
135 if (rreq->cache_resources.ops) in netfs_free_request()
136 rreq->cache_resources.ops->end_operation(&rreq->cache_resources); in netfs_free_request()
137 if (rreq->direct_bv) { in netfs_free_request()
138 for (i = 0; i < rreq->direct_bv_count; i++) { in netfs_free_request()
139 if (rreq->direct_bv[i].bv_page) { in netfs_free_request()
140 if (rreq->direct_bv_unpin) in netfs_free_request()
141 unpin_user_page(rreq->direct_bv[i].bv_page); in netfs_free_request()
144 kvfree(rreq->direct_bv); in netfs_free_request()
146 netfs_clear_buffer(rreq); in netfs_free_request()
150 call_rcu(&rreq->rcu, netfs_free_request_rcu); in netfs_free_request()
153 void netfs_put_request(struct netfs_io_request *rreq, bool was_async, in netfs_put_request() argument
160 if (rreq) { in netfs_put_request()
161 debug_id = rreq->debug_id; in netfs_put_request()
162 dead = __refcount_dec_and_test(&rreq->ref, &r); in netfs_put_request()
166 rreq->work.func = netfs_free_request; in netfs_put_request()
167 if (!queue_work(system_unbound_wq, &rreq->work)) in netfs_put_request()
170 netfs_free_request(&rreq->work); in netfs_put_request()
179 struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq) in netfs_alloc_subrequest() argument
182 mempool_t *mempool = rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool; in netfs_alloc_subrequest()
186 subreq = mempool_alloc(rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool, in netfs_alloc_subrequest()
197 subreq->rreq = rreq; in netfs_alloc_subrequest()
198 subreq->debug_index = atomic_inc_return(&rreq->subreq_counter); in netfs_alloc_subrequest()
199 netfs_get_request(rreq, netfs_rreq_trace_get_subreq); in netfs_alloc_subrequest()
210 trace_netfs_sreq_ref(subreq->rreq->debug_id, subreq->debug_index, r + 1, in netfs_get_subrequest()
217 struct netfs_io_request *rreq = subreq->rreq; in netfs_free_subrequest() local
220 if (rreq->netfs_ops->free_subrequest) in netfs_free_subrequest()
221 rreq->netfs_ops->free_subrequest(subreq); in netfs_free_subrequest()
222 mempool_free(subreq, rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool); in netfs_free_subrequest()
224 netfs_put_request(rreq, was_async, netfs_rreq_trace_put_subreq); in netfs_free_subrequest()
231 unsigned int debug_id = subreq->rreq->debug_id; in netfs_put_subrequest()