Lines Matching refs:req
55 static void nfs_redirty_request(struct nfs_page *req);
60 static void nfs_inode_remove_request(struct nfs_page *req);
61 static void nfs_clear_request_commit(struct nfs_page *req);
171 struct nfs_page *req; in nfs_page_find_private_request() local
176 req = nfs_page_private_request(page); in nfs_page_find_private_request()
177 if (req) { in nfs_page_find_private_request()
178 WARN_ON_ONCE(req->wb_head != req); in nfs_page_find_private_request()
179 kref_get(&req->wb_kref); in nfs_page_find_private_request()
182 return req; in nfs_page_find_private_request()
190 struct nfs_page *req = NULL; in nfs_page_find_swap_request() local
195 req = nfs_page_search_commits_for_head_request_locked(nfsi, in nfs_page_find_swap_request()
197 if (req) { in nfs_page_find_swap_request()
198 WARN_ON_ONCE(req->wb_head != req); in nfs_page_find_swap_request()
199 kref_get(&req->wb_kref); in nfs_page_find_swap_request()
203 return req; in nfs_page_find_swap_request()
213 struct nfs_page *req; in nfs_page_find_head_request() local
215 req = nfs_page_find_private_request(page); in nfs_page_find_head_request()
216 if (!req) in nfs_page_find_head_request()
217 req = nfs_page_find_swap_request(page); in nfs_page_find_head_request()
218 return req; in nfs_page_find_head_request()
271 struct nfs_page *req; in nfs_page_group_search_locked() local
273 req = head; in nfs_page_group_search_locked()
275 if (page_offset >= req->wb_pgbase && in nfs_page_group_search_locked()
276 page_offset < (req->wb_pgbase + req->wb_bytes)) in nfs_page_group_search_locked()
277 return req; in nfs_page_group_search_locked()
279 req = req->wb_this_page; in nfs_page_group_search_locked()
280 } while (req != head); in nfs_page_group_search_locked()
292 static bool nfs_page_group_covers_page(struct nfs_page *req) in nfs_page_group_covers_page() argument
296 unsigned int len = nfs_page_length(req->wb_page); in nfs_page_group_covers_page()
298 nfs_page_group_lock(req); in nfs_page_group_covers_page()
301 tmp = nfs_page_group_search_locked(req->wb_head, pos); in nfs_page_group_covers_page()
307 nfs_page_group_unlock(req); in nfs_page_group_covers_page()
314 static void nfs_mark_uptodate(struct nfs_page *req) in nfs_mark_uptodate() argument
316 if (PageUptodate(req->wb_page)) in nfs_mark_uptodate()
318 if (!nfs_page_group_covers_page(req)) in nfs_mark_uptodate()
320 SetPageUptodate(req->wb_page); in nfs_mark_uptodate()
355 static void nfs_end_page_writeback(struct nfs_page *req) in nfs_end_page_writeback() argument
357 struct inode *inode = page_file_mapping(req->wb_page)->host; in nfs_end_page_writeback()
361 is_done = nfs_page_group_sync_on_bit(req, PG_WB_END); in nfs_end_page_writeback()
362 nfs_unlock_request(req); in nfs_end_page_writeback()
366 end_page_writeback(req->wb_page); in nfs_end_page_writeback()
387 struct nfs_page *req) in nfs_unroll_locks() argument
392 for (tmp = head->wb_this_page ; tmp != req; tmp = tmp->wb_this_page) { in nfs_unroll_locks()
593 static void nfs_write_error(struct nfs_page *req, int error) in nfs_write_error() argument
595 nfs_set_pageerror(page_file_mapping(req->wb_page)); in nfs_write_error()
596 nfs_mapping_set_error(req->wb_page, error); in nfs_write_error()
597 nfs_inode_remove_request(req); in nfs_write_error()
598 nfs_end_page_writeback(req); in nfs_write_error()
599 nfs_release_request(req); in nfs_write_error()
609 struct nfs_page *req; in nfs_page_async_flush() local
612 req = nfs_lock_and_join_requests(page); in nfs_page_async_flush()
613 if (!req) in nfs_page_async_flush()
615 ret = PTR_ERR(req); in nfs_page_async_flush()
616 if (IS_ERR(req)) in nfs_page_async_flush()
620 WARN_ON_ONCE(test_bit(PG_CLEAN, &req->wb_flags)); in nfs_page_async_flush()
628 if (!nfs_pageio_add_request(pgio, req)) { in nfs_page_async_flush()
638 nfs_redirty_request(req); in nfs_page_async_flush()
646 nfs_write_error(req, ret); in nfs_page_async_flush()
746 static void nfs_inode_add_request(struct inode *inode, struct nfs_page *req) in nfs_inode_add_request() argument
748 struct address_space *mapping = page_file_mapping(req->wb_page); in nfs_inode_add_request()
751 WARN_ON_ONCE(req->wb_this_page != req); in nfs_inode_add_request()
754 nfs_lock_request(req); in nfs_inode_add_request()
764 if (likely(!PageSwapCache(req->wb_page))) { in nfs_inode_add_request()
765 set_bit(PG_MAPPED, &req->wb_flags); in nfs_inode_add_request()
766 SetPagePrivate(req->wb_page); in nfs_inode_add_request()
767 set_page_private(req->wb_page, (unsigned long)req); in nfs_inode_add_request()
775 WARN_ON(test_and_set_bit(PG_INODE_REF, &req->wb_flags)); in nfs_inode_add_request()
776 kref_get(&req->wb_kref); in nfs_inode_add_request()
782 static void nfs_inode_remove_request(struct nfs_page *req) in nfs_inode_remove_request() argument
784 struct address_space *mapping = page_file_mapping(req->wb_page); in nfs_inode_remove_request()
789 if (nfs_page_group_sync_on_bit(req, PG_REMOVE)) { in nfs_inode_remove_request()
790 head = req->wb_head; in nfs_inode_remove_request()
801 if (test_and_clear_bit(PG_INODE_REF, &req->wb_flags)) { in nfs_inode_remove_request()
802 nfs_release_request(req); in nfs_inode_remove_request()
808 nfs_mark_request_dirty(struct nfs_page *req) in nfs_mark_request_dirty() argument
810 if (req->wb_page) in nfs_mark_request_dirty()
811 __set_page_dirty_nobuffers(req->wb_page); in nfs_mark_request_dirty()
860 nfs_request_add_commit_list_locked(struct nfs_page *req, struct list_head *dst, in nfs_request_add_commit_list_locked() argument
863 set_bit(PG_CLEAN, &req->wb_flags); in nfs_request_add_commit_list_locked()
864 nfs_list_add_request(req, dst); in nfs_request_add_commit_list_locked()
882 nfs_request_add_commit_list(struct nfs_page *req, struct nfs_commit_info *cinfo) in nfs_request_add_commit_list() argument
885 nfs_request_add_commit_list_locked(req, &cinfo->mds->list, cinfo); in nfs_request_add_commit_list()
887 if (req->wb_page) in nfs_request_add_commit_list()
888 nfs_mark_page_unstable(req->wb_page, cinfo); in nfs_request_add_commit_list()
904 nfs_request_remove_commit_list(struct nfs_page *req, in nfs_request_remove_commit_list() argument
907 if (!test_and_clear_bit(PG_CLEAN, &(req)->wb_flags)) in nfs_request_remove_commit_list()
909 nfs_list_remove_request(req); in nfs_request_remove_commit_list()
939 nfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg, in nfs_mark_request_commit() argument
942 if (pnfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx)) in nfs_mark_request_commit()
944 nfs_request_add_commit_list(req, cinfo); in nfs_mark_request_commit()
957 nfs_clear_request_commit(struct nfs_page *req) in nfs_clear_request_commit() argument
959 if (test_bit(PG_CLEAN, &req->wb_flags)) { in nfs_clear_request_commit()
960 struct nfs_open_context *ctx = nfs_req_openctx(req); in nfs_clear_request_commit()
966 if (!pnfs_clear_request_commit(req, &cinfo)) { in nfs_clear_request_commit()
967 nfs_request_remove_commit_list(req, &cinfo); in nfs_clear_request_commit()
970 nfs_clear_page_commit(req->wb_page); in nfs_clear_request_commit()
995 struct nfs_page *req = nfs_list_entry(hdr->pages.next); in nfs_write_completion() local
997 bytes += req->wb_bytes; in nfs_write_completion()
998 nfs_list_remove_request(req); in nfs_write_completion()
1001 nfs_set_pageerror(page_file_mapping(req->wb_page)); in nfs_write_completion()
1002 nfs_mapping_set_error(req->wb_page, hdr->error); in nfs_write_completion()
1007 req->wb_nio = 0; in nfs_write_completion()
1008 memcpy(&req->wb_verf, &hdr->verf.verifier, sizeof(req->wb_verf)); in nfs_write_completion()
1009 nfs_mark_request_commit(req, hdr->lseg, &cinfo, in nfs_write_completion()
1014 nfs_inode_remove_request(req); in nfs_write_completion()
1016 nfs_end_page_writeback(req); in nfs_write_completion()
1017 nfs_release_request(req); in nfs_write_completion()
1035 struct nfs_page *req, *tmp; in nfs_scan_commit_list() local
1039 list_for_each_entry_safe(req, tmp, src, wb_list) { in nfs_scan_commit_list()
1040 kref_get(&req->wb_kref); in nfs_scan_commit_list()
1041 if (!nfs_lock_request(req)) { in nfs_scan_commit_list()
1046 nfs_release_request(req); in nfs_scan_commit_list()
1051 status = nfs_wait_on_request(req); in nfs_scan_commit_list()
1052 nfs_release_request(req); in nfs_scan_commit_list()
1058 nfs_request_remove_commit_list(req, cinfo); in nfs_scan_commit_list()
1059 clear_bit(PG_COMMIT_TO_DS, &req->wb_flags); in nfs_scan_commit_list()
1060 nfs_list_add_request(req, dst); in nfs_scan_commit_list()
1111 struct nfs_page *req; in nfs_try_to_update_request() local
1118 req = nfs_lock_and_join_requests(page); in nfs_try_to_update_request()
1119 if (IS_ERR_OR_NULL(req)) in nfs_try_to_update_request()
1120 return req; in nfs_try_to_update_request()
1122 rqend = req->wb_offset + req->wb_bytes; in nfs_try_to_update_request()
1129 if (offset > rqend || end < req->wb_offset) in nfs_try_to_update_request()
1133 if (offset < req->wb_offset) { in nfs_try_to_update_request()
1134 req->wb_offset = offset; in nfs_try_to_update_request()
1135 req->wb_pgbase = offset; in nfs_try_to_update_request()
1138 req->wb_bytes = end - req->wb_offset; in nfs_try_to_update_request()
1140 req->wb_bytes = rqend - req->wb_offset; in nfs_try_to_update_request()
1141 req->wb_nio = 0; in nfs_try_to_update_request()
1142 return req; in nfs_try_to_update_request()
1149 nfs_mark_request_dirty(req); in nfs_try_to_update_request()
1150 nfs_unlock_and_release_request(req); in nfs_try_to_update_request()
1166 struct nfs_page *req; in nfs_setup_write_request() local
1168 req = nfs_try_to_update_request(inode, page, offset, bytes); in nfs_setup_write_request()
1169 if (req != NULL) in nfs_setup_write_request()
1171 req = nfs_create_request(ctx, page, offset, bytes); in nfs_setup_write_request()
1172 if (IS_ERR(req)) in nfs_setup_write_request()
1174 nfs_inode_add_request(inode, req); in nfs_setup_write_request()
1176 return req; in nfs_setup_write_request()
1182 struct nfs_page *req; in nfs_writepage_setup() local
1184 req = nfs_setup_write_request(ctx, page, offset, count); in nfs_writepage_setup()
1185 if (IS_ERR(req)) in nfs_writepage_setup()
1186 return PTR_ERR(req); in nfs_writepage_setup()
1189 nfs_mark_uptodate(req); in nfs_writepage_setup()
1190 nfs_mark_request_dirty(req); in nfs_writepage_setup()
1191 nfs_unlock_and_release_request(req); in nfs_writepage_setup()
1200 struct nfs_page *req; in nfs_flush_incompatible() local
1211 req = nfs_page_find_head_request(page); in nfs_flush_incompatible()
1212 if (req == NULL) in nfs_flush_incompatible()
1214 l_ctx = req->wb_lock_context; in nfs_flush_incompatible()
1215 do_flush = req->wb_page != page || in nfs_flush_incompatible()
1216 !nfs_match_open_context(nfs_req_openctx(req), ctx); in nfs_flush_incompatible()
1222 nfs_release_request(req); in nfs_flush_incompatible()
1414 static void nfs_redirty_request(struct nfs_page *req) in nfs_redirty_request() argument
1417 req->wb_nio++; in nfs_redirty_request()
1418 nfs_mark_request_dirty(req); in nfs_redirty_request()
1419 set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags); in nfs_redirty_request()
1420 nfs_end_page_writeback(req); in nfs_redirty_request()
1421 nfs_release_request(req); in nfs_redirty_request()
1426 struct nfs_page *req; in nfs_async_write_error() local
1429 req = nfs_list_entry(head->next); in nfs_async_write_error()
1430 nfs_list_remove_request(req); in nfs_async_write_error()
1432 nfs_write_error(req, error); in nfs_async_write_error()
1434 nfs_redirty_request(req); in nfs_async_write_error()
1721 struct nfs_page *req; in nfs_get_lwb() local
1723 list_for_each_entry(req, head, wb_list) in nfs_get_lwb()
1724 if (lwb < (req_offset(req) + req->wb_bytes)) in nfs_get_lwb()
1725 lwb = req_offset(req) + req->wb_bytes; in nfs_get_lwb()
1773 struct nfs_page *req; in nfs_retry_commit() local
1776 req = nfs_list_entry(page_list->next); in nfs_retry_commit()
1777 nfs_list_remove_request(req); in nfs_retry_commit()
1778 nfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx); in nfs_retry_commit()
1780 nfs_clear_page_commit(req->wb_page); in nfs_retry_commit()
1781 nfs_unlock_and_release_request(req); in nfs_retry_commit()
1788 struct nfs_page *req) in nfs_commit_resched_write() argument
1790 __set_page_dirty_nobuffers(req->wb_page); in nfs_commit_resched_write()
1832 struct nfs_page *req; in nfs_commit_release_pages() local
1838 req = nfs_list_entry(data->pages.next); in nfs_commit_release_pages()
1839 nfs_list_remove_request(req); in nfs_commit_release_pages()
1840 if (req->wb_page) in nfs_commit_release_pages()
1841 nfs_clear_page_commit(req->wb_page); in nfs_commit_release_pages()
1844 nfs_req_openctx(req)->dentry->d_sb->s_id, in nfs_commit_release_pages()
1845 (unsigned long long)NFS_FILEID(d_inode(nfs_req_openctx(req)->dentry)), in nfs_commit_release_pages()
1846 req->wb_bytes, in nfs_commit_release_pages()
1847 (long long)req_offset(req)); in nfs_commit_release_pages()
1849 if (req->wb_page) { in nfs_commit_release_pages()
1850 nfs_mapping_set_error(req->wb_page, status); in nfs_commit_release_pages()
1851 nfs_inode_remove_request(req); in nfs_commit_release_pages()
1859 if (!nfs_write_verifier_cmp(&req->wb_verf, &data->verf.verifier)) { in nfs_commit_release_pages()
1861 if (req->wb_page) in nfs_commit_release_pages()
1862 nfs_inode_remove_request(req); in nfs_commit_release_pages()
1868 nfs_mark_request_dirty(req); in nfs_commit_release_pages()
1869 set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags); in nfs_commit_release_pages()
1871 nfs_unlock_and_release_request(req); in nfs_commit_release_pages()
2034 struct nfs_page *req; in nfs_wb_page_cancel() local
2041 req = nfs_lock_and_join_requests(page); in nfs_wb_page_cancel()
2043 if (IS_ERR(req)) { in nfs_wb_page_cancel()
2044 ret = PTR_ERR(req); in nfs_wb_page_cancel()
2045 } else if (req) { in nfs_wb_page_cancel()
2050 nfs_inode_remove_request(req); in nfs_wb_page_cancel()
2051 nfs_unlock_and_release_request(req); in nfs_wb_page_cancel()