Lines Matching refs:rreq

24 	struct netfs_io_request *rreq;
34 rreq = mempool_alloc(mempool, GFP_KERNEL);
35 if (rreq)
40 memset(rreq, 0, kmem_cache_size(cache));
41 rreq->start = start;
42 rreq->len = len;
43 rreq->upper_len = len;
44 rreq->origin = origin;
45 rreq->netfs_ops = ctx->ops;
46 rreq->mapping = mapping;
47 rreq->inode = inode;
48 rreq->i_size = i_size_read(inode);
49 rreq->debug_id = atomic_inc_return(&debug_ids);
50 rreq->wsize = INT_MAX;
51 spin_lock_init(&rreq->lock);
52 INIT_LIST_HEAD(&rreq->io_streams[0].subrequests);
53 INIT_LIST_HEAD(&rreq->io_streams[1].subrequests);
54 INIT_LIST_HEAD(&rreq->subrequests);
55 INIT_WORK(&rreq->work, NULL);
56 refcount_set(&rreq->ref, 1);
58 __set_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags);
60 __set_bit(NETFS_RREQ_WRITE_TO_CACHE, &rreq->flags);
63 __set_bit(NETFS_RREQ_USE_PGPRIV2, &rreq->flags);
66 __set_bit(NETFS_RREQ_NONBLOCK, &rreq->flags);
67 if (rreq->netfs_ops->init_request) {
68 ret = rreq->netfs_ops->init_request(rreq, file);
70 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool);
75 trace_netfs_rreq_ref(rreq->debug_id, 1, netfs_rreq_trace_new);
76 netfs_proc_add_rreq(rreq);
78 return rreq;
81 void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what)
85 __refcount_inc(&rreq->ref, &r);
86 trace_netfs_rreq_ref(rreq->debug_id, r + 1, what);
89 void netfs_clear_subrequests(struct netfs_io_request *rreq, bool was_async)
95 while (!list_empty(&rreq->subrequests)) {
96 subreq = list_first_entry(&rreq->subrequests,
103 for (s = 0; s < ARRAY_SIZE(rreq->io_streams); s++) {
104 stream = &rreq->io_streams[s];
117 struct netfs_io_request *rreq = container_of(rcu, struct netfs_io_request, rcu);
119 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool);
125 struct netfs_io_request *rreq =
129 trace_netfs_rreq(rreq, netfs_rreq_trace_free);
130 netfs_proc_del_rreq(rreq);
131 netfs_clear_subrequests(rreq, false);
132 if (rreq->netfs_ops->free_request)
133 rreq->netfs_ops->free_request(rreq);
134 if (rreq->cache_resources.ops)
135 rreq->cache_resources.ops->end_operation(&rreq->cache_resources);
136 if (rreq->direct_bv) {
137 for (i = 0; i < rreq->direct_bv_count; i++) {
138 if (rreq->direct_bv[i].bv_page) {
139 if (rreq->direct_bv_unpin)
140 unpin_user_page(rreq->direct_bv[i].bv_page);
143 kvfree(rreq->direct_bv);
145 call_rcu(&rreq->rcu, netfs_free_request_rcu);
148 void netfs_put_request(struct netfs_io_request *rreq, bool was_async,
155 if (rreq) {
156 debug_id = rreq->debug_id;
157 dead = __refcount_dec_and_test(&rreq->ref, &r);
161 rreq->work.func = netfs_free_request;
162 if (!queue_work(system_unbound_wq, &rreq->work))
165 netfs_free_request(&rreq->work);
174 struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq)
177 mempool_t *mempool = rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool;
181 subreq = mempool_alloc(rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool,
192 subreq->rreq = rreq;
193 subreq->debug_index = atomic_inc_return(&rreq->subreq_counter);
194 netfs_get_request(rreq, netfs_rreq_trace_get_subreq);
205 trace_netfs_sreq_ref(subreq->rreq->debug_id, subreq->debug_index, r + 1,
212 struct netfs_io_request *rreq = subreq->rreq;
215 if (rreq->netfs_ops->free_subrequest)
216 rreq->netfs_ops->free_subrequest(subreq);
217 mempool_free(subreq, rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool);
219 netfs_put_request(rreq, was_async, netfs_rreq_trace_put_subreq);
226 unsigned int debug_id = subreq->rreq->debug_id;