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);
62 struct nfs_page *req);
150 nfs_page_set_inode_ref(struct nfs_page *req, struct inode *inode)
152 if (!test_and_set_bit(PG_INODE_REF, &req->wb_flags)) {
153 kref_get(&req->wb_kref);
159 nfs_cancel_remove_inode(struct nfs_page *req, struct inode *inode)
163 if (!test_bit(PG_REMOVE, &req->wb_flags))
165 ret = nfs_page_group_lock(req);
168 if (test_and_clear_bit(PG_REMOVE, &req->wb_flags))
169 nfs_page_set_inode_ref(req, inode);
170 nfs_page_group_unlock(req);
193 struct nfs_page *req;
198 req = nfs_page_private_request(page);
199 if (req) {
200 WARN_ON_ONCE(req->wb_head != req);
201 kref_get(&req->wb_kref);
204 return req;
212 struct nfs_page *req = NULL;
217 req = nfs_page_search_commits_for_head_request_locked(nfsi,
219 if (req) {
220 WARN_ON_ONCE(req->wb_head != req);
221 kref_get(&req->wb_kref);
225 return req;
235 struct nfs_page *req;
237 req = nfs_page_find_private_request(page);
238 if (!req)
239 req = nfs_page_find_swap_request(page);
240 return req;
246 struct nfs_page *req, *head;
250 req = nfs_page_find_head_request(page);
251 if (!req)
252 return req;
253 head = nfs_page_group_lock_head(req);
254 if (head != req)
255 nfs_release_request(req);
337 struct nfs_page *req;
339 req = head;
341 if (page_offset >= req->wb_pgbase &&
342 page_offset < (req->wb_pgbase + req->wb_bytes))
343 return req;
345 req = req->wb_this_page;
346 } while (req != head);
358 static bool nfs_page_group_covers_page(struct nfs_page *req)
362 unsigned int len = nfs_page_length(req->wb_page);
364 nfs_page_group_lock(req);
367 tmp = nfs_page_group_search_locked(req->wb_head, pos);
373 nfs_page_group_unlock(req);
380 static void nfs_mark_uptodate(struct nfs_page *req)
382 if (PageUptodate(req->wb_page))
384 if (!nfs_page_group_covers_page(req))
386 SetPageUptodate(req->wb_page);
421 static void nfs_end_page_writeback(struct nfs_page *req)
423 struct inode *inode = page_file_mapping(req->wb_page)->host;
427 is_done = nfs_page_group_sync_on_bit(req, PG_WB_END);
428 nfs_unlock_request(req);
432 end_page_writeback(req->wb_page);
494 * nfs_join_page_group - destroy subrequests of the head req
550 * nfs_lock_and_join_requests - join all subreqs to the head req
594 static void nfs_write_error(struct nfs_page *req, int error)
596 trace_nfs_write_error(req, error);
597 nfs_mapping_set_error(req->wb_page, error);
598 nfs_inode_remove_request(req);
599 nfs_end_page_writeback(req);
600 nfs_release_request(req);
610 struct nfs_page *req;
613 req = nfs_lock_and_join_requests(page);
614 if (!req)
616 ret = PTR_ERR(req);
617 if (IS_ERR(req))
621 WARN_ON_ONCE(test_bit(PG_CLEAN, &req->wb_flags));
629 if (!nfs_pageio_add_request(pgio, req)) {
632 * Remove the problematic req upon fatal errors on the server
639 nfs_redirty_request(req);
647 nfs_write_error(req, ret);
740 static void nfs_inode_add_request(struct inode *inode, struct nfs_page *req)
742 struct address_space *mapping = page_file_mapping(req->wb_page);
745 WARN_ON_ONCE(req->wb_this_page != req);
748 nfs_lock_request(req);
758 if (likely(!PageSwapCache(req->wb_page))) {
759 set_bit(PG_MAPPED, &req->wb_flags);
760 SetPagePrivate(req->wb_page);
761 set_page_private(req->wb_page, (unsigned long)req);
769 WARN_ON(test_and_set_bit(PG_INODE_REF, &req->wb_flags));
770 kref_get(&req->wb_kref);
776 static void nfs_inode_remove_request(struct nfs_page *req)
778 struct address_space *mapping = page_file_mapping(req->wb_page);
783 if (nfs_page_group_sync_on_bit(req, PG_REMOVE)) {
784 head = req->wb_head;
795 if (test_and_clear_bit(PG_INODE_REF, &req->wb_flags)) {
796 nfs_release_request(req);
802 nfs_mark_request_dirty(struct nfs_page *req)
804 if (req->wb_page)
805 __set_page_dirty_nobuffers(req->wb_page);
842 * @req: pointer to a struct nfs_page
854 nfs_request_add_commit_list_locked(struct nfs_page *req, struct list_head *dst,
857 set_bit(PG_CLEAN, &req->wb_flags);
858 nfs_list_add_request(req, dst);
865 * @req: pointer to a struct nfs_page
876 nfs_request_add_commit_list(struct nfs_page *req, struct nfs_commit_info *cinfo)
879 nfs_request_add_commit_list_locked(req, &cinfo->mds->list, cinfo);
881 if (req->wb_page)
882 nfs_mark_page_unstable(req->wb_page, cinfo);
888 * @req: pointer to a nfs_page
898 nfs_request_remove_commit_list(struct nfs_page *req,
901 if (!test_and_clear_bit(PG_CLEAN, &(req)->wb_flags))
903 nfs_list_remove_request(req);
933 nfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
936 if (pnfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx))
938 nfs_request_add_commit_list(req, cinfo);
949 /* Called holding the request lock on @req */
951 struct nfs_page *req)
953 if (test_bit(PG_CLEAN, &req->wb_flags)) {
954 struct nfs_open_context *ctx = nfs_req_openctx(req);
958 if (!pnfs_clear_request_commit(req, cinfo)) {
959 nfs_request_remove_commit_list(req, cinfo);
962 nfs_clear_page_commit(req->wb_page);
987 struct nfs_page *req = nfs_list_entry(hdr->pages.next);
989 bytes += req->wb_bytes;
990 nfs_list_remove_request(req);
993 trace_nfs_comp_error(req, hdr->error);
994 nfs_mapping_set_error(req->wb_page, hdr->error);
999 req->wb_nio = 0;
1000 memcpy(&req->wb_verf, &hdr->verf.verifier, sizeof(req->wb_verf));
1001 nfs_mark_request_commit(req, hdr->lseg, &cinfo,
1006 nfs_inode_remove_request(req);
1008 nfs_end_page_writeback(req);
1009 nfs_release_request(req);
1027 struct nfs_page *req, *tmp;
1030 list_for_each_entry_safe(req, tmp, src, wb_list) {
1031 kref_get(&req->wb_kref);
1032 if (!nfs_lock_request(req)) {
1033 nfs_release_request(req);
1036 nfs_request_remove_commit_list(req, cinfo);
1037 clear_bit(PG_COMMIT_TO_DS, &req->wb_flags);
1038 nfs_list_add_request(req, dst);
1089 struct nfs_page *req;
1096 req = nfs_lock_and_join_requests(page);
1097 if (IS_ERR_OR_NULL(req))
1098 return req;
1100 rqend = req->wb_offset + req->wb_bytes;
1107 if (offset > rqend || end < req->wb_offset)
1111 if (offset < req->wb_offset) {
1112 req->wb_offset = offset;
1113 req->wb_pgbase = offset;
1116 req->wb_bytes = end - req->wb_offset;
1118 req->wb_bytes = rqend - req->wb_offset;
1119 req->wb_nio = 0;
1120 return req;
1127 nfs_mark_request_dirty(req);
1128 nfs_unlock_and_release_request(req);
1144 struct nfs_page *req;
1146 req = nfs_try_to_update_request(inode, page, offset, bytes);
1147 if (req != NULL)
1149 req = nfs_create_request(ctx, page, offset, bytes);
1150 if (IS_ERR(req))
1152 nfs_inode_add_request(inode, req);
1154 return req;
1160 struct nfs_page *req;
1162 req = nfs_setup_write_request(ctx, page, offset, count);
1163 if (IS_ERR(req))
1164 return PTR_ERR(req);
1167 nfs_mark_uptodate(req);
1168 nfs_mark_request_dirty(req);
1169 nfs_unlock_and_release_request(req);
1178 struct nfs_page *req;
1189 req = nfs_page_find_head_request(page);
1190 if (req == NULL)
1192 l_ctx = req->wb_lock_context;
1193 do_flush = req->wb_page != page ||
1194 !nfs_match_open_context(nfs_req_openctx(req), ctx);
1200 nfs_release_request(req);
1391 static void nfs_redirty_request(struct nfs_page *req)
1394 req->wb_nio++;
1395 nfs_mark_request_dirty(req);
1396 set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags);
1397 nfs_end_page_writeback(req);
1398 nfs_release_request(req);
1403 struct nfs_page *req;
1406 req = nfs_list_entry(head->next);
1407 nfs_list_remove_request(req);
1409 nfs_write_error(req, error);
1411 nfs_redirty_request(req);
1702 struct nfs_page *req;
1704 list_for_each_entry(req, head, wb_list)
1705 if (lwb < (req_offset(req) + req->wb_bytes))
1706 lwb = req_offset(req) + req->wb_bytes;
1760 struct nfs_page *req;
1763 req = nfs_list_entry(page_list->next);
1764 nfs_list_remove_request(req);
1765 nfs_mark_request_commit(req, lseg, cinfo, ds_commit_idx);
1767 nfs_clear_page_commit(req->wb_page);
1768 nfs_unlock_and_release_request(req);
1775 struct nfs_page *req)
1777 __set_page_dirty_nobuffers(req->wb_page);
1823 struct nfs_page *req;
1829 req = nfs_list_entry(data->pages.next);
1830 nfs_list_remove_request(req);
1831 if (req->wb_page)
1832 nfs_clear_page_commit(req->wb_page);
1835 nfs_req_openctx(req)->dentry->d_sb->s_id,
1836 (unsigned long long)NFS_FILEID(d_inode(nfs_req_openctx(req)->dentry)),
1837 req->wb_bytes,
1838 (long long)req_offset(req));
1840 if (req->wb_page) {
1841 trace_nfs_commit_error(req, status);
1842 nfs_mapping_set_error(req->wb_page, status);
1843 nfs_inode_remove_request(req);
1851 if (nfs_write_match_verf(verf, req)) {
1853 if (req->wb_page)
1854 nfs_inode_remove_request(req);
1860 nfs_mark_request_dirty(req);
1861 set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags);
1863 nfs_unlock_and_release_request(req);
2027 struct nfs_page *req;
2034 req = nfs_lock_and_join_requests(page);
2036 if (IS_ERR(req)) {
2037 ret = PTR_ERR(req);
2038 } else if (req) {
2043 nfs_inode_remove_request(req);
2044 nfs_unlock_and_release_request(req);