Lines Matching refs:req
49 hdr->req = nfs_list_entry(mirror->pg_list.next); in nfs_pgheader_init()
51 hdr->cred = nfs_req_openctx(hdr->req)->cred; in nfs_pgheader_init()
52 hdr->io_start = req_offset(hdr->req); in nfs_pgheader_init()
145 nfs_page_group_lock(struct nfs_page *req) in nfs_page_group_lock() argument
147 struct nfs_page *head = req->wb_head; in nfs_page_group_lock()
165 nfs_page_group_unlock(struct nfs_page *req) in nfs_page_group_unlock() argument
167 struct nfs_page *head = req->wb_head; in nfs_page_group_unlock()
185 nfs_page_group_sync_on_bit_locked(struct nfs_page *req, unsigned int bit) in nfs_page_group_sync_on_bit_locked() argument
187 struct nfs_page *head = req->wb_head; in nfs_page_group_sync_on_bit_locked()
191 WARN_ON_ONCE(test_and_set_bit(bit, &req->wb_flags)); in nfs_page_group_sync_on_bit_locked()
193 tmp = req->wb_this_page; in nfs_page_group_sync_on_bit_locked()
194 while (tmp != req) { in nfs_page_group_sync_on_bit_locked()
201 tmp = req; in nfs_page_group_sync_on_bit_locked()
205 } while (tmp != req); in nfs_page_group_sync_on_bit_locked()
216 bool nfs_page_group_sync_on_bit(struct nfs_page *req, unsigned int bit) in nfs_page_group_sync_on_bit() argument
220 nfs_page_group_lock(req); in nfs_page_group_sync_on_bit()
221 ret = nfs_page_group_sync_on_bit_locked(req, bit); in nfs_page_group_sync_on_bit()
222 nfs_page_group_unlock(req); in nfs_page_group_sync_on_bit()
234 nfs_page_group_init(struct nfs_page *req, struct nfs_page *prev) in nfs_page_group_init() argument
237 WARN_ON_ONCE(prev == req); in nfs_page_group_init()
241 req->wb_head = req; in nfs_page_group_init()
242 req->wb_this_page = req; in nfs_page_group_init()
247 req->wb_head = prev->wb_head; in nfs_page_group_init()
248 req->wb_this_page = prev->wb_this_page; in nfs_page_group_init()
249 prev->wb_this_page = req; in nfs_page_group_init()
253 kref_get(&req->wb_head->wb_kref); in nfs_page_group_init()
259 inode = page_file_mapping(req->wb_page)->host; in nfs_page_group_init()
260 set_bit(PG_INODE_REF, &req->wb_flags); in nfs_page_group_init()
261 kref_get(&req->wb_kref); in nfs_page_group_init()
277 struct nfs_page *req = container_of(kref, struct nfs_page, wb_kref); in nfs_page_group_destroy() local
278 struct nfs_page *head = req->wb_head; in nfs_page_group_destroy()
281 if (!nfs_page_group_sync_on_bit(req, PG_TEARDOWN)) in nfs_page_group_destroy()
284 tmp = req; in nfs_page_group_destroy()
292 } while (tmp != req); in nfs_page_group_destroy()
295 if (head != req) in nfs_page_group_destroy()
304 struct nfs_page *req; in __nfs_create_request() local
310 req = nfs_page_alloc(); in __nfs_create_request()
311 if (req == NULL) in __nfs_create_request()
314 req->wb_lock_context = l_ctx; in __nfs_create_request()
321 req->wb_page = page; in __nfs_create_request()
323 req->wb_index = page_index(page); in __nfs_create_request()
326 req->wb_offset = offset; in __nfs_create_request()
327 req->wb_pgbase = pgbase; in __nfs_create_request()
328 req->wb_bytes = count; in __nfs_create_request()
329 kref_init(&req->wb_kref); in __nfs_create_request()
330 req->wb_nio = 0; in __nfs_create_request()
331 return req; in __nfs_create_request()
362 nfs_create_subreq(struct nfs_page *req, struct nfs_page *last, in nfs_create_subreq() argument
368 ret = __nfs_create_request(req->wb_lock_context, req->wb_page, in nfs_create_subreq()
372 ret->wb_index = req->wb_index; in nfs_create_subreq()
374 ret->wb_nio = req->wb_nio; in nfs_create_subreq()
383 void nfs_unlock_request(struct nfs_page *req) in nfs_unlock_request() argument
385 if (!NFS_WBACK_BUSY(req)) { in nfs_unlock_request()
390 clear_bit(PG_BUSY, &req->wb_flags); in nfs_unlock_request()
392 if (!test_bit(PG_CONTENDED2, &req->wb_flags)) in nfs_unlock_request()
394 wake_up_bit(&req->wb_flags, PG_BUSY); in nfs_unlock_request()
401 void nfs_unlock_and_release_request(struct nfs_page *req) in nfs_unlock_and_release_request() argument
403 nfs_unlock_request(req); in nfs_unlock_and_release_request()
404 nfs_release_request(req); in nfs_unlock_and_release_request()
414 static void nfs_clear_request(struct nfs_page *req) in nfs_clear_request() argument
416 struct page *page = req->wb_page; in nfs_clear_request()
417 struct nfs_lock_context *l_ctx = req->wb_lock_context; in nfs_clear_request()
422 req->wb_page = NULL; in nfs_clear_request()
432 req->wb_lock_context = NULL; in nfs_clear_request()
442 void nfs_free_request(struct nfs_page *req) in nfs_free_request() argument
444 WARN_ON_ONCE(req->wb_this_page != req); in nfs_free_request()
447 WARN_ON_ONCE(test_bit(PG_TEARDOWN, &req->wb_flags)); in nfs_free_request()
448 WARN_ON_ONCE(test_bit(PG_UNLOCKPAGE, &req->wb_flags)); in nfs_free_request()
449 WARN_ON_ONCE(test_bit(PG_UPTODATE, &req->wb_flags)); in nfs_free_request()
450 WARN_ON_ONCE(test_bit(PG_WB_END, &req->wb_flags)); in nfs_free_request()
451 WARN_ON_ONCE(test_bit(PG_REMOVE, &req->wb_flags)); in nfs_free_request()
454 nfs_clear_request(req); in nfs_free_request()
455 nfs_page_free(req); in nfs_free_request()
458 void nfs_release_request(struct nfs_page *req) in nfs_release_request() argument
460 kref_put(&req->wb_kref, nfs_page_group_destroy); in nfs_release_request()
472 nfs_wait_on_request(struct nfs_page *req) in nfs_wait_on_request() argument
474 if (!test_bit(PG_BUSY, &req->wb_flags)) in nfs_wait_on_request()
476 set_bit(PG_CONTENDED2, &req->wb_flags); in nfs_wait_on_request()
478 return wait_on_bit_io(&req->wb_flags, PG_BUSY, in nfs_wait_on_request()
493 struct nfs_page *prev, struct nfs_page *req) in nfs_generic_pg_test() argument
508 if (((mirror->pg_count + req->wb_bytes) >> PAGE_SHIFT) * in nfs_generic_pg_test()
512 return min(mirror->pg_bsize - mirror->pg_count, (size_t)req->wb_bytes); in nfs_generic_pg_test()
566 struct nfs_page *req = hdr->req; in nfs_pgio_rpcsetup() local
572 hdr->args.offset = req_offset(req); in nfs_pgio_rpcsetup()
575 hdr->args.pgbase = req->wb_pgbase; in nfs_pgio_rpcsetup()
578 hdr->args.context = get_nfs_open_context(nfs_req_openctx(req)); in nfs_pgio_rpcsetup()
579 hdr->args.lock_context = req->wb_lock_context; in nfs_pgio_rpcsetup()
763 struct nfs_page *req; in nfs_generic_pgio() local
792 req = nfs_list_entry(head->next); in nfs_generic_pgio()
793 nfs_list_move_request(req, &hdr->pages); in nfs_generic_pgio()
795 if (!last_page || last_page != req->wb_page) { in nfs_generic_pgio()
799 *pages++ = last_page = req->wb_page; in nfs_generic_pgio()
866 struct nfs_page *req) in nfs_pageio_setup_mirroring() argument
871 mirror_count = pgio->pg_ops->pg_get_mirror_count(pgio, req); in nfs_pageio_setup_mirroring()
926 struct nfs_page *req, in nfs_can_coalesce_requests() argument
933 if (!nfs_match_open_context(nfs_req_openctx(req), nfs_req_openctx(prev))) in nfs_can_coalesce_requests()
935 flctx = d_inode(nfs_req_openctx(req)->dentry)->i_flctx; in nfs_can_coalesce_requests()
939 !nfs_match_lock_context(req->wb_lock_context, in nfs_can_coalesce_requests()
942 if (req_offset(req) != req_offset(prev) + prev->wb_bytes) in nfs_can_coalesce_requests()
944 if (req->wb_page == prev->wb_page) { in nfs_can_coalesce_requests()
945 if (req->wb_pgbase != prev->wb_pgbase + prev->wb_bytes) in nfs_can_coalesce_requests()
948 if (req->wb_pgbase != 0 || in nfs_can_coalesce_requests()
953 size = pgio->pg_ops->pg_test(pgio, prev, req); in nfs_can_coalesce_requests()
954 WARN_ON_ONCE(size > req->wb_bytes); in nfs_can_coalesce_requests()
955 if (size && size < req->wb_bytes) in nfs_can_coalesce_requests()
956 req->wb_bytes = size; in nfs_can_coalesce_requests()
969 struct nfs_page *req) in nfs_pageio_do_add_request() argument
979 desc->pg_ops->pg_init(desc, req); in nfs_pageio_do_add_request()
982 mirror->pg_base = req->wb_pgbase; in nfs_pageio_do_add_request()
985 if (desc->pg_maxretrans && req->wb_nio > desc->pg_maxretrans) { in nfs_pageio_do_add_request()
993 if (!nfs_can_coalesce_requests(prev, req, desc)) in nfs_pageio_do_add_request()
995 nfs_list_move_request(req, &mirror->pg_list); in nfs_pageio_do_add_request()
996 mirror->pg_count += req->wb_bytes; in nfs_pageio_do_add_request()
1023 struct nfs_page *req) in nfs_pageio_cleanup_request() argument
1027 nfs_list_move_request(req, &head); in nfs_pageio_cleanup_request()
1043 struct nfs_page *req) in __nfs_pageio_add_request() argument
1051 nfs_page_group_lock(req); in __nfs_pageio_add_request()
1053 subreq = req; in __nfs_pageio_add_request()
1065 nfs_page_group_unlock(req); in __nfs_pageio_add_request()
1071 nfs_page_group_lock(req); in __nfs_pageio_add_request()
1085 subreq = nfs_create_subreq(req, subreq, pgbase, in __nfs_pageio_add_request()
1092 nfs_page_group_unlock(req); in __nfs_pageio_add_request()
1096 nfs_page_group_unlock(req); in __nfs_pageio_add_request()
1099 if (req != subreq) in __nfs_pageio_add_request()
1117 struct nfs_page *req; in nfs_do_recoalesce() local
1119 req = list_first_entry(&head, struct nfs_page, wb_list); in nfs_do_recoalesce()
1120 if (__nfs_pageio_add_request(desc, req)) in nfs_do_recoalesce()
1134 struct nfs_page *req) in nfs_pageio_add_request_mirror() argument
1139 ret = __nfs_pageio_add_request(desc, req); in nfs_pageio_add_request_mirror()
1166 struct nfs_page *req) in nfs_pageio_add_request() argument
1172 pgbase = req->wb_pgbase; in nfs_pageio_add_request()
1173 offset = req->wb_offset; in nfs_pageio_add_request()
1174 bytes = req->wb_bytes; in nfs_pageio_add_request()
1176 nfs_pageio_setup_mirroring(desc, req); in nfs_pageio_add_request()
1182 nfs_page_group_lock(req); in nfs_pageio_add_request()
1185 for (lastreq = req->wb_head; in nfs_pageio_add_request()
1186 lastreq->wb_this_page != req->wb_head; in nfs_pageio_add_request()
1190 dupreq = nfs_create_subreq(req, lastreq, in nfs_pageio_add_request()
1193 nfs_page_group_unlock(req); in nfs_pageio_add_request()
1199 dupreq = req; in nfs_pageio_add_request()
1210 if (req != dupreq) in nfs_pageio_add_request()
1260 struct nfs_page *req = nfs_list_entry(pages.next); in nfs_pageio_resend() local
1262 if (!nfs_pageio_add_request(desc, req)) in nfs_pageio_resend()