Lines Matching refs:rreq

26 	struct netfs_io_request *rreq;  in netfs_alloc_request()  local
32 rreq = mempool_alloc(mempool, GFP_KERNEL); in netfs_alloc_request()
33 if (rreq) in netfs_alloc_request()
38 memset(rreq, 0, kmem_cache_size(cache)); in netfs_alloc_request()
39 INIT_WORK(&rreq->cleanup_work, netfs_free_request); in netfs_alloc_request()
40 rreq->start = start; in netfs_alloc_request()
41 rreq->len = len; in netfs_alloc_request()
42 rreq->origin = origin; in netfs_alloc_request()
43 rreq->netfs_ops = ctx->ops; in netfs_alloc_request()
44 rreq->mapping = mapping; in netfs_alloc_request()
45 rreq->inode = inode; in netfs_alloc_request()
46 rreq->i_size = i_size_read(inode); in netfs_alloc_request()
47 rreq->debug_id = atomic_inc_return(&debug_ids); in netfs_alloc_request()
48 rreq->wsize = INT_MAX; in netfs_alloc_request()
49 rreq->io_streams[0].sreq_max_len = ULONG_MAX; in netfs_alloc_request()
50 rreq->io_streams[0].sreq_max_segs = 0; in netfs_alloc_request()
51 spin_lock_init(&rreq->lock); in netfs_alloc_request()
52 INIT_LIST_HEAD(&rreq->io_streams[0].subrequests); in netfs_alloc_request()
53 INIT_LIST_HEAD(&rreq->io_streams[1].subrequests); in netfs_alloc_request()
54 init_waitqueue_head(&rreq->waitq); in netfs_alloc_request()
55 refcount_set(&rreq->ref, 2); in netfs_alloc_request()
64 INIT_WORK(&rreq->work, netfs_read_collection_worker); in netfs_alloc_request()
65 rreq->io_streams[0].avail = true; in netfs_alloc_request()
67 INIT_WORK(&rreq->work, netfs_write_collection_worker); in netfs_alloc_request()
70 __set_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags); in netfs_alloc_request()
71 if (rreq->netfs_ops->init_request) { in netfs_alloc_request()
72 ret = rreq->netfs_ops->init_request(rreq, file); in netfs_alloc_request()
74 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool); in netfs_alloc_request()
80 trace_netfs_rreq_ref(rreq->debug_id, refcount_read(&rreq->ref), netfs_rreq_trace_new); in netfs_alloc_request()
81 netfs_proc_add_rreq(rreq); in netfs_alloc_request()
83 return rreq; in netfs_alloc_request()
86 void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what) in netfs_get_request() argument
90 __refcount_inc(&rreq->ref, &r); in netfs_get_request()
91 trace_netfs_rreq_ref(rreq->debug_id, r + 1, what); in netfs_get_request()
94 void netfs_clear_subrequests(struct netfs_io_request *rreq) in netfs_clear_subrequests() argument
100 for (s = 0; s < ARRAY_SIZE(rreq->io_streams); s++) { in netfs_clear_subrequests()
101 stream = &rreq->io_streams[s]; in netfs_clear_subrequests()
113 struct netfs_io_request *rreq = container_of(rcu, struct netfs_io_request, rcu); in netfs_free_request_rcu() local
115 mempool_free(rreq, rreq->netfs_ops->request_pool ?: &netfs_request_pool); in netfs_free_request_rcu()
121 struct netfs_io_request *rreq = in netfs_free_request() local
123 struct netfs_inode *ictx = netfs_inode(rreq->inode); in netfs_free_request()
126 trace_netfs_rreq(rreq, netfs_rreq_trace_free); in netfs_free_request()
131 cancel_work_sync(&rreq->work); in netfs_free_request()
133 netfs_proc_del_rreq(rreq); in netfs_free_request()
134 netfs_clear_subrequests(rreq); in netfs_free_request()
135 if (rreq->netfs_ops->free_request) in netfs_free_request()
136 rreq->netfs_ops->free_request(rreq); in netfs_free_request()
137 if (rreq->cache_resources.ops) in netfs_free_request()
138 rreq->cache_resources.ops->end_operation(&rreq->cache_resources); in netfs_free_request()
139 if (rreq->direct_bv) { in netfs_free_request()
140 for (i = 0; i < rreq->direct_bv_count; i++) { in netfs_free_request()
141 if (rreq->direct_bv[i].bv_page) { in netfs_free_request()
142 if (rreq->direct_bv_unpin) in netfs_free_request()
143 unpin_user_page(rreq->direct_bv[i].bv_page); in netfs_free_request()
146 kvfree(rreq->direct_bv); in netfs_free_request()
148 rolling_buffer_clear(&rreq->buffer); in netfs_free_request()
152 call_rcu(&rreq->rcu, netfs_free_request_rcu); in netfs_free_request()
155 void netfs_put_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what) in netfs_put_request() argument
161 if (rreq) { in netfs_put_request()
162 debug_id = rreq->debug_id; in netfs_put_request()
163 dead = __refcount_dec_and_test(&rreq->ref, &r); in netfs_put_request()
166 WARN_ON(!queue_work(system_unbound_wq, &rreq->cleanup_work)); in netfs_put_request()
173 struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq) in netfs_alloc_subrequest() argument
176 mempool_t *mempool = rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool; in netfs_alloc_subrequest()
180 subreq = mempool_alloc(rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool, in netfs_alloc_subrequest()
191 subreq->rreq = rreq; in netfs_alloc_subrequest()
192 subreq->debug_index = atomic_inc_return(&rreq->subreq_counter); in netfs_alloc_subrequest()
193 netfs_get_request(rreq, netfs_rreq_trace_get_subreq); in netfs_alloc_subrequest()
204 trace_netfs_sreq_ref(subreq->rreq->debug_id, subreq->debug_index, r + 1, in netfs_get_subrequest()
210 struct netfs_io_request *rreq = subreq->rreq; in netfs_free_subrequest() local
213 if (rreq->netfs_ops->free_subrequest) in netfs_free_subrequest()
214 rreq->netfs_ops->free_subrequest(subreq); in netfs_free_subrequest()
215 mempool_free(subreq, rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool); in netfs_free_subrequest()
217 netfs_put_request(rreq, netfs_rreq_trace_put_subreq); in netfs_free_subrequest()
224 unsigned int debug_id = subreq->rreq->debug_id; in netfs_put_subrequest()