Lines Matching refs:req
44 static void nfs_redirty_request(struct nfs_page *req);
116 struct nfs_page *req = NULL; in nfs_page_find_request_locked() local
119 req = (struct nfs_page *)page_private(page); in nfs_page_find_request_locked()
120 if (req != NULL) in nfs_page_find_request_locked()
121 kref_get(&req->wb_kref); in nfs_page_find_request_locked()
123 return req; in nfs_page_find_request_locked()
129 struct nfs_page *req = NULL; in nfs_page_find_request() local
132 req = nfs_page_find_request_locked(page); in nfs_page_find_request()
134 return req; in nfs_page_find_request()
230 struct nfs_page *req; in nfs_find_and_lock_request() local
235 req = nfs_page_find_request_locked(page); in nfs_find_and_lock_request()
236 if (req == NULL) in nfs_find_and_lock_request()
238 if (nfs_lock_request_dontget(req)) in nfs_find_and_lock_request()
247 ret = nfs_wait_on_request(req); in nfs_find_and_lock_request()
250 nfs_release_request(req); in nfs_find_and_lock_request()
256 return req; in nfs_find_and_lock_request()
266 struct nfs_page *req; in nfs_page_async_flush() local
269 req = nfs_find_and_lock_request(page, nonblock); in nfs_page_async_flush()
270 if (!req) in nfs_page_async_flush()
272 ret = PTR_ERR(req); in nfs_page_async_flush()
273 if (IS_ERR(req)) in nfs_page_async_flush()
278 BUG_ON(test_bit(PG_CLEAN, &req->wb_flags)); in nfs_page_async_flush()
280 if (!nfs_pageio_add_request(pgio, req)) { in nfs_page_async_flush()
281 nfs_redirty_request(req); in nfs_page_async_flush()
377 static void nfs_inode_add_request(struct inode *inode, struct nfs_page *req) in nfs_inode_add_request() argument
382 nfs_lock_request_dontget(req); in nfs_inode_add_request()
387 set_bit(PG_MAPPED, &req->wb_flags); in nfs_inode_add_request()
388 SetPagePrivate(req->wb_page); in nfs_inode_add_request()
389 set_page_private(req->wb_page, (unsigned long)req); in nfs_inode_add_request()
391 kref_get(&req->wb_kref); in nfs_inode_add_request()
398 static void nfs_inode_remove_request(struct nfs_page *req) in nfs_inode_remove_request() argument
400 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_inode_remove_request()
403 BUG_ON (!NFS_WBACK_BUSY(req)); in nfs_inode_remove_request()
406 set_page_private(req->wb_page, 0); in nfs_inode_remove_request()
407 ClearPagePrivate(req->wb_page); in nfs_inode_remove_request()
408 clear_bit(PG_MAPPED, &req->wb_flags); in nfs_inode_remove_request()
411 nfs_release_request(req); in nfs_inode_remove_request()
415 nfs_mark_request_dirty(struct nfs_page *req) in nfs_mark_request_dirty() argument
417 __set_page_dirty_nobuffers(req->wb_page); in nfs_mark_request_dirty()
434 nfs_request_add_commit_list(struct nfs_page *req, struct list_head *head) in nfs_request_add_commit_list() argument
436 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_request_add_commit_list()
438 set_bit(PG_CLEAN, &(req)->wb_flags); in nfs_request_add_commit_list()
440 nfs_list_add_request(req, head); in nfs_request_add_commit_list()
443 inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); in nfs_request_add_commit_list()
444 inc_bdi_stat(req->wb_page->mapping->backing_dev_info, BDI_RECLAIMABLE); in nfs_request_add_commit_list()
460 nfs_request_remove_commit_list(struct nfs_page *req) in nfs_request_remove_commit_list() argument
462 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_request_remove_commit_list()
464 if (!test_and_clear_bit(PG_CLEAN, &(req)->wb_flags)) in nfs_request_remove_commit_list()
466 nfs_list_remove_request(req); in nfs_request_remove_commit_list()
476 nfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg) in nfs_mark_request_commit() argument
478 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_mark_request_commit()
480 if (pnfs_mark_request_commit(req, lseg)) in nfs_mark_request_commit()
482 nfs_request_add_commit_list(req, &NFS_I(inode)->commit_list); in nfs_mark_request_commit()
493 nfs_clear_request_commit(struct nfs_page *req) in nfs_clear_request_commit() argument
495 if (test_bit(PG_CLEAN, &req->wb_flags)) { in nfs_clear_request_commit()
496 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_clear_request_commit()
498 if (!pnfs_clear_request_commit(req)) { in nfs_clear_request_commit()
500 nfs_request_remove_commit_list(req); in nfs_clear_request_commit()
503 nfs_clear_page_commit(req->wb_page); in nfs_clear_request_commit()
517 int nfs_reschedule_unstable_write(struct nfs_page *req, in nfs_reschedule_unstable_write() argument
520 if (test_and_clear_bit(PG_NEED_COMMIT, &req->wb_flags)) { in nfs_reschedule_unstable_write()
521 nfs_mark_request_commit(req, data->lseg); in nfs_reschedule_unstable_write()
524 if (test_and_clear_bit(PG_NEED_RESCHED, &req->wb_flags)) { in nfs_reschedule_unstable_write()
525 nfs_mark_request_dirty(req); in nfs_reschedule_unstable_write()
532 nfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg) in nfs_mark_request_commit() argument
537 nfs_clear_request_commit(struct nfs_page *req) in nfs_clear_request_commit() argument
548 int nfs_reschedule_unstable_write(struct nfs_page *req, in nfs_reschedule_unstable_write() argument
567 struct nfs_page *req, *tmp; in nfs_scan_commit_list() local
570 list_for_each_entry_safe(req, tmp, src, wb_list) { in nfs_scan_commit_list()
571 if (!nfs_lock_request(req)) in nfs_scan_commit_list()
574 list_safe_reset_next(req, tmp, wb_list); in nfs_scan_commit_list()
575 nfs_request_remove_commit_list(req); in nfs_scan_commit_list()
576 nfs_list_add_request(req, dst); in nfs_scan_commit_list()
635 struct nfs_page *req; in nfs_try_to_update_request() local
647 req = nfs_page_find_request_locked(page); in nfs_try_to_update_request()
648 if (req == NULL) in nfs_try_to_update_request()
651 rqend = req->wb_offset + req->wb_bytes; in nfs_try_to_update_request()
659 || end < req->wb_offset) in nfs_try_to_update_request()
662 if (nfs_lock_request_dontget(req)) in nfs_try_to_update_request()
667 error = nfs_wait_on_request(req); in nfs_try_to_update_request()
668 nfs_release_request(req); in nfs_try_to_update_request()
675 if (offset < req->wb_offset) { in nfs_try_to_update_request()
676 req->wb_offset = offset; in nfs_try_to_update_request()
677 req->wb_pgbase = offset; in nfs_try_to_update_request()
680 req->wb_bytes = end - req->wb_offset; in nfs_try_to_update_request()
682 req->wb_bytes = rqend - req->wb_offset; in nfs_try_to_update_request()
685 if (req) in nfs_try_to_update_request()
686 nfs_clear_request_commit(req); in nfs_try_to_update_request()
687 return req; in nfs_try_to_update_request()
690 nfs_release_request(req); in nfs_try_to_update_request()
707 struct nfs_page *req; in nfs_setup_write_request() local
709 req = nfs_try_to_update_request(inode, page, offset, bytes); in nfs_setup_write_request()
710 if (req != NULL) in nfs_setup_write_request()
712 req = nfs_create_request(ctx, inode, page, offset, bytes); in nfs_setup_write_request()
713 if (IS_ERR(req)) in nfs_setup_write_request()
715 nfs_inode_add_request(inode, req); in nfs_setup_write_request()
717 return req; in nfs_setup_write_request()
723 struct nfs_page *req; in nfs_writepage_setup() local
725 req = nfs_setup_write_request(ctx, page, offset, count); in nfs_writepage_setup()
726 if (IS_ERR(req)) in nfs_writepage_setup()
727 return PTR_ERR(req); in nfs_writepage_setup()
730 nfs_mark_uptodate(page, req->wb_pgbase, req->wb_bytes); in nfs_writepage_setup()
731 nfs_mark_request_dirty(req); in nfs_writepage_setup()
732 nfs_unlock_request(req); in nfs_writepage_setup()
739 struct nfs_page *req; in nfs_flush_incompatible() local
750 req = nfs_page_find_request(page); in nfs_flush_incompatible()
751 if (req == NULL) in nfs_flush_incompatible()
753 do_flush = req->wb_page != page || req->wb_context != ctx || in nfs_flush_incompatible()
754 req->wb_lock_context->lockowner != current->files || in nfs_flush_incompatible()
755 req->wb_lock_context->pid != current->tgid; in nfs_flush_incompatible()
756 nfs_release_request(req); in nfs_flush_incompatible()
818 static void nfs_writepage_release(struct nfs_page *req, in nfs_writepage_release() argument
821 struct page *page = req->wb_page; in nfs_writepage_release()
823 if (PageError(req->wb_page) || !nfs_reschedule_unstable_write(req, data)) in nfs_writepage_release()
824 nfs_inode_remove_request(req); in nfs_writepage_release()
825 nfs_unlock_request(req); in nfs_writepage_release()
895 static void nfs_write_rpcsetup(struct nfs_page *req, in nfs_write_rpcsetup() argument
900 struct inode *inode = req->wb_context->dentry->d_inode; in nfs_write_rpcsetup()
905 data->req = req; in nfs_write_rpcsetup()
906 data->inode = inode = req->wb_context->dentry->d_inode; in nfs_write_rpcsetup()
907 data->cred = req->wb_context->cred; in nfs_write_rpcsetup()
910 data->args.offset = req_offset(req) + offset; in nfs_write_rpcsetup()
913 data->args.pgbase = req->wb_pgbase + offset; in nfs_write_rpcsetup()
916 data->args.context = get_nfs_open_context(req->wb_context); in nfs_write_rpcsetup()
917 data->args.lock_context = req->wb_lock_context; in nfs_write_rpcsetup()
968 static void nfs_redirty_request(struct nfs_page *req) in nfs_redirty_request() argument
970 struct page *page = req->wb_page; in nfs_redirty_request()
972 nfs_mark_request_dirty(req); in nfs_redirty_request()
973 nfs_unlock_request(req); in nfs_redirty_request()
983 struct nfs_page *req = nfs_list_entry(desc->pg_list.next); in nfs_flush_multi() local
984 struct page *page = req->wb_page; in nfs_flush_multi()
991 nfs_list_remove_request(req); in nfs_flush_multi()
1008 nfs_write_rpcsetup(req, data, len, offset, desc->pg_ioflags); in nfs_flush_multi()
1014 atomic_set(&req->wb_complete, requests); in nfs_flush_multi()
1024 nfs_redirty_request(req); in nfs_flush_multi()
1038 struct nfs_page *req; in nfs_flush_one() local
1048 req = nfs_list_entry(head->next); in nfs_flush_one()
1049 nfs_list_remove_request(req); in nfs_flush_one()
1050 nfs_redirty_request(req); in nfs_flush_one()
1057 req = nfs_list_entry(head->next); in nfs_flush_one()
1058 nfs_list_remove_request(req); in nfs_flush_one()
1059 nfs_list_add_request(req, &data->pages); in nfs_flush_one()
1060 *pages++ = req->wb_page; in nfs_flush_one()
1062 req = nfs_list_entry(data->pages.next); in nfs_flush_one()
1069 nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags); in nfs_flush_one()
1130 data->req->wb_context->dentry->d_inode->i_sb->s_id, in nfs_writeback_done_partial()
1132 NFS_FILEID(data->req->wb_context->dentry->d_inode), in nfs_writeback_done_partial()
1133 data->req->wb_bytes, (long long)req_offset(data->req)); in nfs_writeback_done_partial()
1141 struct nfs_page *req = data->req; in nfs_writeback_release_partial() local
1142 struct page *page = req->wb_page; in nfs_writeback_release_partial()
1147 nfs_context_set_write_error(req->wb_context, status); in nfs_writeback_release_partial()
1156 if (test_bit(PG_NEED_RESCHED, &req->wb_flags)) { in nfs_writeback_release_partial()
1158 } else if (!test_and_set_bit(PG_NEED_COMMIT, &req->wb_flags)) { in nfs_writeback_release_partial()
1159 memcpy(&req->wb_verf, &data->verf, sizeof(req->wb_verf)); in nfs_writeback_release_partial()
1161 } else if (memcmp(&req->wb_verf, &data->verf, sizeof(req->wb_verf))) { in nfs_writeback_release_partial()
1162 set_bit(PG_NEED_RESCHED, &req->wb_flags); in nfs_writeback_release_partial()
1163 clear_bit(PG_NEED_COMMIT, &req->wb_flags); in nfs_writeback_release_partial()
1171 if (atomic_dec_and_test(&req->wb_complete)) in nfs_writeback_release_partial()
1172 nfs_writepage_release(req, data); in nfs_writeback_release_partial()
1209 struct nfs_page *req = nfs_list_entry(data->pages.next); in nfs_writeback_release_full() local
1210 struct page *page = req->wb_page; in nfs_writeback_release_full()
1212 nfs_list_remove_request(req); in nfs_writeback_release_full()
1216 req->wb_context->dentry->d_inode->i_sb->s_id, in nfs_writeback_release_full()
1217 (long long)NFS_FILEID(req->wb_context->dentry->d_inode), in nfs_writeback_release_full()
1218 req->wb_bytes, in nfs_writeback_release_full()
1219 (long long)req_offset(req)); in nfs_writeback_release_full()
1223 nfs_context_set_write_error(req->wb_context, status); in nfs_writeback_release_full()
1229 memcpy(&req->wb_verf, &data->verf, sizeof(req->wb_verf)); in nfs_writeback_release_full()
1230 nfs_mark_request_commit(req, data->lseg); in nfs_writeback_release_full()
1236 nfs_inode_remove_request(req); in nfs_writeback_release_full()
1238 nfs_unlock_request(req); in nfs_writeback_release_full()
1438 struct nfs_page *req; in nfs_retry_commit() local
1441 req = nfs_list_entry(page_list->next); in nfs_retry_commit()
1442 nfs_list_remove_request(req); in nfs_retry_commit()
1443 nfs_mark_request_commit(req, lseg); in nfs_retry_commit()
1444 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); in nfs_retry_commit()
1445 dec_bdi_stat(req->wb_page->mapping->backing_dev_info, in nfs_retry_commit()
1447 nfs_unlock_request(req); in nfs_retry_commit()
1490 struct nfs_page *req; in nfs_commit_release_pages() local
1494 req = nfs_list_entry(data->pages.next); in nfs_commit_release_pages()
1495 nfs_list_remove_request(req); in nfs_commit_release_pages()
1496 nfs_clear_page_commit(req->wb_page); in nfs_commit_release_pages()
1499 req->wb_context->dentry->d_sb->s_id, in nfs_commit_release_pages()
1500 (long long)NFS_FILEID(req->wb_context->dentry->d_inode), in nfs_commit_release_pages()
1501 req->wb_bytes, in nfs_commit_release_pages()
1502 (long long)req_offset(req)); in nfs_commit_release_pages()
1504 nfs_context_set_write_error(req->wb_context, status); in nfs_commit_release_pages()
1505 nfs_inode_remove_request(req); in nfs_commit_release_pages()
1512 if (!memcmp(req->wb_verf.verifier, data->verf.verifier, sizeof(data->verf.verifier))) { in nfs_commit_release_pages()
1514 nfs_inode_remove_request(req); in nfs_commit_release_pages()
1520 nfs_mark_request_dirty(req); in nfs_commit_release_pages()
1522 nfs_unlock_request(req); in nfs_commit_release_pages()
1659 struct nfs_page *req; in nfs_wb_page_cancel() local
1665 req = nfs_page_find_request(page); in nfs_wb_page_cancel()
1666 if (req == NULL) in nfs_wb_page_cancel()
1668 if (nfs_lock_request_dontget(req)) { in nfs_wb_page_cancel()
1669 nfs_clear_request_commit(req); in nfs_wb_page_cancel()
1670 nfs_inode_remove_request(req); in nfs_wb_page_cancel()
1676 nfs_unlock_request(req); in nfs_wb_page_cancel()
1679 ret = nfs_wait_on_request(req); in nfs_wb_page_cancel()
1680 nfs_release_request(req); in nfs_wb_page_cancel()