Lines Matching refs:hdr
55 struct nfs_pgio_header *hdr, in nfs_pgheader_init() argument
56 void (*release)(struct nfs_pgio_header *hdr)) in nfs_pgheader_init() argument
61 hdr->req = nfs_list_entry(mirror->pg_list.next); in nfs_pgheader_init()
62 hdr->inode = desc->pg_inode; in nfs_pgheader_init()
63 hdr->cred = hdr->req->wb_context->cred; in nfs_pgheader_init()
64 hdr->io_start = req_offset(hdr->req); in nfs_pgheader_init()
65 hdr->good_bytes = mirror->pg_count; in nfs_pgheader_init()
66 hdr->dreq = desc->pg_dreq; in nfs_pgheader_init()
67 hdr->layout_private = desc->pg_layout_private; in nfs_pgheader_init()
68 hdr->release = release; in nfs_pgheader_init()
69 hdr->completion_ops = desc->pg_completion_ops; in nfs_pgheader_init()
70 if (hdr->completion_ops->init_hdr) in nfs_pgheader_init()
71 hdr->completion_ops->init_hdr(hdr); in nfs_pgheader_init()
73 hdr->pgio_mirror_idx = desc->pg_mirror_idx; in nfs_pgheader_init()
77 void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos) in nfs_set_pgio_error() argument
79 spin_lock(&hdr->lock); in nfs_set_pgio_error()
80 if (!test_and_set_bit(NFS_IOHDR_ERROR, &hdr->flags) in nfs_set_pgio_error()
81 || pos < hdr->io_start + hdr->good_bytes) { in nfs_set_pgio_error()
82 clear_bit(NFS_IOHDR_EOF, &hdr->flags); in nfs_set_pgio_error()
83 hdr->good_bytes = pos - hdr->io_start; in nfs_set_pgio_error()
84 hdr->error = error; in nfs_set_pgio_error()
86 spin_unlock(&hdr->lock); in nfs_set_pgio_error()
520 struct nfs_pgio_header *hdr = ops->rw_alloc_header(); in nfs_pgio_header_alloc() local
522 if (hdr) { in nfs_pgio_header_alloc()
523 INIT_LIST_HEAD(&hdr->pages); in nfs_pgio_header_alloc()
524 spin_lock_init(&hdr->lock); in nfs_pgio_header_alloc()
525 hdr->rw_ops = ops; in nfs_pgio_header_alloc()
527 return hdr; in nfs_pgio_header_alloc()
539 static void nfs_pgio_data_destroy(struct nfs_pgio_header *hdr) in nfs_pgio_data_destroy() argument
541 if (hdr->args.context) in nfs_pgio_data_destroy()
542 put_nfs_open_context(hdr->args.context); in nfs_pgio_data_destroy()
543 if (hdr->page_array.pagevec != hdr->page_array.page_array) in nfs_pgio_data_destroy()
544 kfree(hdr->page_array.pagevec); in nfs_pgio_data_destroy()
551 void nfs_pgio_header_free(struct nfs_pgio_header *hdr) in nfs_pgio_header_free() argument
553 nfs_pgio_data_destroy(hdr); in nfs_pgio_header_free()
554 hdr->rw_ops->rw_free_header(hdr); in nfs_pgio_header_free()
566 static void nfs_pgio_rpcsetup(struct nfs_pgio_header *hdr, in nfs_pgio_rpcsetup() argument
570 struct nfs_page *req = hdr->req; in nfs_pgio_rpcsetup()
575 hdr->args.fh = NFS_FH(hdr->inode); in nfs_pgio_rpcsetup()
576 hdr->args.offset = req_offset(req) + offset; in nfs_pgio_rpcsetup()
578 hdr->mds_offset = hdr->args.offset; in nfs_pgio_rpcsetup()
579 hdr->args.pgbase = req->wb_pgbase + offset; in nfs_pgio_rpcsetup()
580 hdr->args.pages = hdr->page_array.pagevec; in nfs_pgio_rpcsetup()
581 hdr->args.count = count; in nfs_pgio_rpcsetup()
582 hdr->args.context = get_nfs_open_context(req->wb_context); in nfs_pgio_rpcsetup()
583 hdr->args.lock_context = req->wb_lock_context; in nfs_pgio_rpcsetup()
584 hdr->args.stable = NFS_UNSTABLE; in nfs_pgio_rpcsetup()
592 hdr->args.stable = NFS_FILE_SYNC; in nfs_pgio_rpcsetup()
595 hdr->res.fattr = &hdr->fattr; in nfs_pgio_rpcsetup()
596 hdr->res.count = 0; in nfs_pgio_rpcsetup()
597 hdr->res.eof = 0; in nfs_pgio_rpcsetup()
598 hdr->res.verf = &hdr->verf; in nfs_pgio_rpcsetup()
599 nfs_fattr_init(&hdr->fattr); in nfs_pgio_rpcsetup()
609 struct nfs_pgio_header *hdr = calldata; in nfs_pgio_prepare() local
611 err = NFS_PROTO(hdr->inode)->pgio_rpc_prepare(task, hdr); in nfs_pgio_prepare()
616 int nfs_initiate_pgio(struct rpc_clnt *clnt, struct nfs_pgio_header *hdr, in nfs_initiate_pgio() argument
622 .rpc_argp = &hdr->args, in nfs_initiate_pgio()
623 .rpc_resp = &hdr->res, in nfs_initiate_pgio()
628 .task = &hdr->task, in nfs_initiate_pgio()
631 .callback_data = hdr, in nfs_initiate_pgio()
637 hdr->rw_ops->rw_initiate(hdr, &msg, rpc_ops, &task_setup_data, how); in nfs_initiate_pgio()
641 hdr->inode->i_sb->s_id, in nfs_initiate_pgio()
642 (unsigned long long)NFS_FILEID(hdr->inode), in nfs_initiate_pgio()
643 hdr->args.count, in nfs_initiate_pgio()
644 (unsigned long long)hdr->args.offset); in nfs_initiate_pgio()
668 struct nfs_pgio_header *hdr) in nfs_pgio_error() argument
673 set_bit(NFS_IOHDR_REDO, &hdr->flags); in nfs_pgio_error()
674 hdr->completion_ops->completion(hdr); in nfs_pgio_error()
690 struct nfs_pgio_header *hdr = calldata; in nfs_pgio_release() local
691 hdr->completion_ops->completion(hdr); in nfs_pgio_release()
766 struct nfs_pgio_header *hdr = calldata; in nfs_pgio_result() local
767 struct inode *inode = hdr->inode; in nfs_pgio_result()
772 if (hdr->rw_ops->rw_done(task, hdr, inode) != 0) in nfs_pgio_result()
775 nfs_set_pgio_error(hdr, task->tk_status, hdr->args.offset); in nfs_pgio_result()
777 hdr->rw_ops->rw_result(task, hdr); in nfs_pgio_result()
789 struct nfs_pgio_header *hdr) in nfs_generic_pgio() argument
801 if (!nfs_pgarray_set(&hdr->page_array, pagecount)) in nfs_generic_pgio()
802 return nfs_pgio_error(desc, hdr); in nfs_generic_pgio()
805 pages = hdr->page_array.pagevec; in nfs_generic_pgio()
811 nfs_list_add_request(req, &hdr->pages); in nfs_generic_pgio()
821 return nfs_pgio_error(desc, hdr); in nfs_generic_pgio()
828 nfs_pgio_rpcsetup(hdr, mirror->pg_count, 0, desc->pg_ioflags, &cinfo); in nfs_generic_pgio()
837 struct nfs_pgio_header *hdr; in nfs_generic_pg_pgios() local
842 hdr = nfs_pgio_header_alloc(desc->pg_rw_ops); in nfs_generic_pg_pgios()
843 if (!hdr) { in nfs_generic_pg_pgios()
849 nfs_pgheader_init(desc, hdr, nfs_pgio_header_free); in nfs_generic_pg_pgios()
850 ret = nfs_generic_pgio(desc, hdr); in nfs_generic_pg_pgios()
852 ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode), in nfs_generic_pg_pgios()
853 hdr, in nfs_generic_pg_pgios()
854 hdr->cred, in nfs_generic_pg_pgios()
855 NFS_PROTO(hdr->inode), in nfs_generic_pg_pgios()
1213 struct nfs_pgio_header *hdr) in nfs_pageio_resend() argument
1217 desc->pg_dreq = hdr->dreq; in nfs_pageio_resend()
1218 while (!list_empty(&hdr->pages)) { in nfs_pageio_resend()
1219 struct nfs_page *req = nfs_list_entry(hdr->pages.next); in nfs_pageio_resend()
1227 list_move(&failed, &hdr->pages); in nfs_pageio_resend()