Lines Matching refs:desc
34 nfs_pgio_current_mirror(struct nfs_pageio_descriptor *desc) in nfs_pgio_current_mirror() argument
36 return nfs_pgio_has_mirroring(desc) ? in nfs_pgio_current_mirror()
37 &desc->pg_mirrors[desc->pg_mirror_idx] : in nfs_pgio_current_mirror()
38 &desc->pg_mirrors[0]; in nfs_pgio_current_mirror()
42 void nfs_pgheader_init(struct nfs_pageio_descriptor *desc, in nfs_pgheader_init() argument
46 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_pgheader_init()
50 hdr->inode = desc->pg_inode; in nfs_pgheader_init()
54 hdr->io_completion = desc->pg_io_completion; in nfs_pgheader_init()
55 hdr->dreq = desc->pg_dreq; in nfs_pgheader_init()
57 hdr->completion_ops = desc->pg_completion_ops; in nfs_pgheader_init()
61 hdr->pgio_mirror_idx = desc->pg_mirror_idx; in nfs_pgheader_init()
492 size_t nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, in nfs_generic_pg_test() argument
495 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_generic_pg_test()
700 void nfs_pageio_init(struct nfs_pageio_descriptor *desc, in nfs_pageio_init() argument
708 desc->pg_moreio = 0; in nfs_pageio_init()
709 desc->pg_inode = inode; in nfs_pageio_init()
710 desc->pg_ops = pg_ops; in nfs_pageio_init()
711 desc->pg_completion_ops = compl_ops; in nfs_pageio_init()
712 desc->pg_rw_ops = rw_ops; in nfs_pageio_init()
713 desc->pg_ioflags = io_flags; in nfs_pageio_init()
714 desc->pg_error = 0; in nfs_pageio_init()
715 desc->pg_lseg = NULL; in nfs_pageio_init()
716 desc->pg_io_completion = NULL; in nfs_pageio_init()
717 desc->pg_dreq = NULL; in nfs_pageio_init()
718 desc->pg_bsize = bsize; in nfs_pageio_init()
720 desc->pg_mirror_count = 1; in nfs_pageio_init()
721 desc->pg_mirror_idx = 0; in nfs_pageio_init()
723 desc->pg_mirrors_dynamic = NULL; in nfs_pageio_init()
724 desc->pg_mirrors = desc->pg_mirrors_static; in nfs_pageio_init()
725 nfs_pageio_mirror_init(&desc->pg_mirrors[0], bsize); in nfs_pageio_init()
726 desc->pg_maxretrans = 0; in nfs_pageio_init()
758 int nfs_generic_pgio(struct nfs_pageio_descriptor *desc, in nfs_generic_pgio() argument
761 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_generic_pgio()
782 desc->pg_error = -ENOMEM; in nfs_generic_pgio()
783 return desc->pg_error; in nfs_generic_pgio()
787 nfs_init_cinfo(&cinfo, desc->pg_inode, desc->pg_dreq); in nfs_generic_pgio()
804 desc->pg_error = -EINVAL; in nfs_generic_pgio()
805 return desc->pg_error; in nfs_generic_pgio()
808 if ((desc->pg_ioflags & FLUSH_COND_STABLE) && in nfs_generic_pgio()
809 (desc->pg_moreio || nfs_reqs_to_commit(&cinfo))) in nfs_generic_pgio()
810 desc->pg_ioflags &= ~FLUSH_COND_STABLE; in nfs_generic_pgio()
813 nfs_pgio_rpcsetup(hdr, mirror->pg_count, desc->pg_ioflags, &cinfo); in nfs_generic_pgio()
814 desc->pg_rpc_callops = &nfs_pgio_common_ops; in nfs_generic_pgio()
819 static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc) in nfs_generic_pg_pgios() argument
824 hdr = nfs_pgio_header_alloc(desc->pg_rw_ops); in nfs_generic_pg_pgios()
826 desc->pg_error = -ENOMEM; in nfs_generic_pg_pgios()
827 return desc->pg_error; in nfs_generic_pg_pgios()
829 nfs_pgheader_init(desc, hdr, nfs_pgio_header_free); in nfs_generic_pg_pgios()
830 ret = nfs_generic_pgio(desc, hdr); in nfs_generic_pg_pgios()
836 desc->pg_rpc_callops, in nfs_generic_pg_pgios()
837 desc->pg_ioflags, 0); in nfs_generic_pg_pgios()
842 nfs_pageio_alloc_mirrors(struct nfs_pageio_descriptor *desc, in nfs_pageio_alloc_mirrors() argument
848 kfree(desc->pg_mirrors_dynamic); in nfs_pageio_alloc_mirrors()
849 desc->pg_mirrors_dynamic = NULL; in nfs_pageio_alloc_mirrors()
851 return desc->pg_mirrors_static; in nfs_pageio_alloc_mirrors()
855 nfs_pageio_mirror_init(&ret[i], desc->pg_bsize); in nfs_pageio_alloc_mirrors()
856 desc->pg_mirrors_dynamic = ret; in nfs_pageio_alloc_mirrors()
968 static int nfs_pageio_do_add_request(struct nfs_pageio_descriptor *desc, in nfs_pageio_do_add_request() argument
971 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_pageio_do_add_request()
978 if (desc->pg_ops->pg_init) in nfs_pageio_do_add_request()
979 desc->pg_ops->pg_init(desc, req); in nfs_pageio_do_add_request()
980 if (desc->pg_error < 0) in nfs_pageio_do_add_request()
985 if (desc->pg_maxretrans && req->wb_nio > desc->pg_maxretrans) { in nfs_pageio_do_add_request()
986 if (NFS_SERVER(desc->pg_inode)->flags & NFS_MOUNT_SOFTERR) in nfs_pageio_do_add_request()
987 desc->pg_error = -ETIMEDOUT; in nfs_pageio_do_add_request()
989 desc->pg_error = -EIO; in nfs_pageio_do_add_request()
993 if (!nfs_can_coalesce_requests(prev, req, desc)) in nfs_pageio_do_add_request()
1003 static void nfs_pageio_doio(struct nfs_pageio_descriptor *desc) in nfs_pageio_doio() argument
1005 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_pageio_doio()
1009 int error = desc->pg_ops->pg_doio(desc); in nfs_pageio_doio()
1011 desc->pg_error = error; in nfs_pageio_doio()
1022 nfs_pageio_cleanup_request(struct nfs_pageio_descriptor *desc, in nfs_pageio_cleanup_request() argument
1028 desc->pg_completion_ops->error_cleanup(&head, desc->pg_error); in nfs_pageio_cleanup_request()
1042 static int __nfs_pageio_add_request(struct nfs_pageio_descriptor *desc, in __nfs_pageio_add_request() argument
1045 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in __nfs_pageio_add_request()
1059 if (!nfs_pageio_do_add_request(desc, subreq)) { in __nfs_pageio_add_request()
1066 desc->pg_moreio = 1; in __nfs_pageio_add_request()
1067 nfs_pageio_doio(desc); in __nfs_pageio_add_request()
1068 if (desc->pg_error < 0 || mirror->pg_recoalesce) in __nfs_pageio_add_request()
1095 desc->pg_error = PTR_ERR(subreq); in __nfs_pageio_add_request()
1100 nfs_pageio_cleanup_request(desc, subreq); in __nfs_pageio_add_request()
1104 static int nfs_do_recoalesce(struct nfs_pageio_descriptor *desc) in nfs_do_recoalesce() argument
1106 struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); in nfs_do_recoalesce()
1120 if (__nfs_pageio_add_request(desc, req)) in nfs_do_recoalesce()
1122 if (desc->pg_error < 0) { in nfs_do_recoalesce()
1133 static int nfs_pageio_add_request_mirror(struct nfs_pageio_descriptor *desc, in nfs_pageio_add_request_mirror() argument
1139 ret = __nfs_pageio_add_request(desc, req); in nfs_pageio_add_request_mirror()
1142 if (desc->pg_error < 0) in nfs_pageio_add_request_mirror()
1144 ret = nfs_do_recoalesce(desc); in nfs_pageio_add_request_mirror()
1150 static void nfs_pageio_error_cleanup(struct nfs_pageio_descriptor *desc) in nfs_pageio_error_cleanup() argument
1155 if (!desc->pg_error) in nfs_pageio_error_cleanup()
1158 for (midx = 0; midx < desc->pg_mirror_count; midx++) { in nfs_pageio_error_cleanup()
1159 mirror = &desc->pg_mirrors[midx]; in nfs_pageio_error_cleanup()
1160 desc->pg_completion_ops->error_cleanup(&mirror->pg_list, in nfs_pageio_error_cleanup()
1161 desc->pg_error); in nfs_pageio_error_cleanup()
1165 int nfs_pageio_add_request(struct nfs_pageio_descriptor *desc, in nfs_pageio_add_request() argument
1176 nfs_pageio_setup_mirroring(desc, req); in nfs_pageio_add_request()
1177 if (desc->pg_error < 0) in nfs_pageio_add_request()
1180 for (midx = 0; midx < desc->pg_mirror_count; midx++) { in nfs_pageio_add_request()
1195 desc->pg_error = PTR_ERR(dupreq); in nfs_pageio_add_request()
1201 if (nfs_pgio_has_mirroring(desc)) in nfs_pageio_add_request()
1202 desc->pg_mirror_idx = midx; in nfs_pageio_add_request()
1203 if (!nfs_pageio_add_request_mirror(desc, dupreq)) in nfs_pageio_add_request()
1211 nfs_pageio_cleanup_request(desc, dupreq); in nfs_pageio_add_request()
1213 nfs_pageio_error_cleanup(desc); in nfs_pageio_add_request()
1223 static void nfs_pageio_complete_mirror(struct nfs_pageio_descriptor *desc, in nfs_pageio_complete_mirror() argument
1226 struct nfs_pgio_mirror *mirror = &desc->pg_mirrors[mirror_idx]; in nfs_pageio_complete_mirror()
1227 u32 restore_idx = desc->pg_mirror_idx; in nfs_pageio_complete_mirror()
1229 if (nfs_pgio_has_mirroring(desc)) in nfs_pageio_complete_mirror()
1230 desc->pg_mirror_idx = mirror_idx; in nfs_pageio_complete_mirror()
1232 nfs_pageio_doio(desc); in nfs_pageio_complete_mirror()
1233 if (desc->pg_error < 0 || !mirror->pg_recoalesce) in nfs_pageio_complete_mirror()
1235 if (!nfs_do_recoalesce(desc)) in nfs_pageio_complete_mirror()
1238 desc->pg_mirror_idx = restore_idx; in nfs_pageio_complete_mirror()
1251 int nfs_pageio_resend(struct nfs_pageio_descriptor *desc, in nfs_pageio_resend() argument
1256 desc->pg_io_completion = hdr->io_completion; in nfs_pageio_resend()
1257 desc->pg_dreq = hdr->dreq; in nfs_pageio_resend()
1262 if (!nfs_pageio_add_request(desc, req)) in nfs_pageio_resend()
1265 nfs_pageio_complete(desc); in nfs_pageio_resend()
1267 int err = desc->pg_error < 0 ? desc->pg_error : -EIO; in nfs_pageio_resend()
1280 void nfs_pageio_complete(struct nfs_pageio_descriptor *desc) in nfs_pageio_complete() argument
1284 for (midx = 0; midx < desc->pg_mirror_count; midx++) in nfs_pageio_complete()
1285 nfs_pageio_complete_mirror(desc, midx); in nfs_pageio_complete()
1287 if (desc->pg_error < 0) in nfs_pageio_complete()
1288 nfs_pageio_error_cleanup(desc); in nfs_pageio_complete()
1289 if (desc->pg_ops->pg_cleanup) in nfs_pageio_complete()
1290 desc->pg_ops->pg_cleanup(desc); in nfs_pageio_complete()
1291 nfs_pageio_cleanup_mirroring(desc); in nfs_pageio_complete()
1305 void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *desc, pgoff_t index) in nfs_pageio_cond_complete() argument
1311 for (midx = 0; midx < desc->pg_mirror_count; midx++) { in nfs_pageio_cond_complete()
1312 mirror = &desc->pg_mirrors[midx]; in nfs_pageio_cond_complete()
1316 nfs_pageio_complete(desc); in nfs_pageio_cond_complete()