···303303 struct rpc_cred *newcred = NULL;304304 rpc_authflavor_t flavor;305305306306+ if (sp4_mode == NFS_SP4_MACH_CRED_CLEANUP ||307307+ sp4_mode == NFS_SP4_MACH_CRED_PNFS_CLEANUP) {308308+ /* Using machine creds for cleanup operations309309+ * is only relevent if the client credentials310310+ * might expire. So don't bother for311311+ * RPC_AUTH_UNIX. If file was only exported to312312+ * sec=sys, the PUTFH would fail anyway.313313+ */314314+ if ((*clntp)->cl_auth->au_flavor == RPC_AUTH_UNIX)315315+ return false;316316+ }306317 if (test_bit(sp4_mode, &clp->cl_sp4_flags)) {307318 spin_lock(&clp->cl_lock);308319 if (clp->cl_machine_cred != NULL)
+40-37
fs/nfs/pagelist.c
···682682 const struct nfs_pgio_completion_ops *compl_ops,683683 const struct nfs_rw_ops *rw_ops,684684 size_t bsize,685685- int io_flags,686686- gfp_t gfp_flags)685685+ int io_flags)687686{688688- struct nfs_pgio_mirror *new;689689- int i;690690-691687 desc->pg_moreio = 0;692688 desc->pg_inode = inode;693689 desc->pg_ops = pg_ops;···699703 desc->pg_mirror_count = 1;700704 desc->pg_mirror_idx = 0;701705702702- if (pg_ops->pg_get_mirror_count) {703703- /* until we have a request, we don't have an lseg and no704704- * idea how many mirrors there will be */705705- new = kcalloc(NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX,706706- sizeof(struct nfs_pgio_mirror), gfp_flags);707707- desc->pg_mirrors_dynamic = new;708708- desc->pg_mirrors = new;709709-710710- for (i = 0; i < NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX; i++)711711- nfs_pageio_mirror_init(&desc->pg_mirrors[i], bsize);712712- } else {713713- desc->pg_mirrors_dynamic = NULL;714714- desc->pg_mirrors = desc->pg_mirrors_static;715715- nfs_pageio_mirror_init(&desc->pg_mirrors[0], bsize);716716- }706706+ desc->pg_mirrors_dynamic = NULL;707707+ desc->pg_mirrors = desc->pg_mirrors_static;708708+ nfs_pageio_mirror_init(&desc->pg_mirrors[0], bsize);717709}718718-EXPORT_SYMBOL_GPL(nfs_pageio_init);719710720711/**721712 * nfs_pgio_result - Basic pageio error handling···819836 return ret;820837}821838839839+static struct nfs_pgio_mirror *840840+nfs_pageio_alloc_mirrors(struct nfs_pageio_descriptor *desc,841841+ unsigned int mirror_count)842842+{843843+ struct nfs_pgio_mirror *ret;844844+ unsigned int i;845845+846846+ kfree(desc->pg_mirrors_dynamic);847847+ desc->pg_mirrors_dynamic = NULL;848848+ if (mirror_count == 1)849849+ return desc->pg_mirrors_static;850850+ ret = kmalloc_array(mirror_count, sizeof(*ret), GFP_NOFS);851851+ if (ret != NULL) {852852+ for (i = 0; i < mirror_count; i++)853853+ nfs_pageio_mirror_init(&ret[i], desc->pg_bsize);854854+ desc->pg_mirrors_dynamic = ret;855855+ }856856+ return ret;857857+}858858+822859/*823860 * nfs_pageio_setup_mirroring - determine if mirroring is to be used824861 * by calling the pg_get_mirror_count op825862 */826826-static int nfs_pageio_setup_mirroring(struct nfs_pageio_descriptor *pgio,863863+static void nfs_pageio_setup_mirroring(struct nfs_pageio_descriptor *pgio,827864 struct nfs_page *req)828865{829829- int mirror_count = 1;866866+ unsigned int mirror_count = 1;830867831831- if (!pgio->pg_ops->pg_get_mirror_count)832832- return 0;868868+ if (pgio->pg_ops->pg_get_mirror_count)869869+ mirror_count = pgio->pg_ops->pg_get_mirror_count(pgio, req);870870+ if (mirror_count == pgio->pg_mirror_count || pgio->pg_error < 0)871871+ return;833872834834- mirror_count = pgio->pg_ops->pg_get_mirror_count(pgio, req);873873+ if (!mirror_count || mirror_count > NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX) {874874+ pgio->pg_error = -EINVAL;875875+ return;876876+ }835877836836- if (pgio->pg_error < 0)837837- return pgio->pg_error;838838-839839- if (!mirror_count || mirror_count > NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX)840840- return -EINVAL;841841-842842- if (WARN_ON_ONCE(!pgio->pg_mirrors_dynamic))843843- return -EINVAL;844844-878878+ pgio->pg_mirrors = nfs_pageio_alloc_mirrors(pgio, mirror_count);879879+ if (pgio->pg_mirrors == NULL) {880880+ pgio->pg_error = -ENOMEM;881881+ pgio->pg_mirrors = pgio->pg_mirrors_static;882882+ mirror_count = 1;883883+ }845884 pgio->pg_mirror_count = mirror_count;846846-847847- return 0;848885}849886850887/*
···16911691 rpc_authflavor_t *server_authlist, unsigned int count)16921692{16931693 rpc_authflavor_t flavor = RPC_AUTH_MAXFLAVOR;16941694+ bool found_auth_null = false;16941695 unsigned int i;16951695- int use_auth_null = false;1696169616971697 /*16981698 * If the sec= mount option is used, the specified flavor or AUTH_NULL···17011701 * AUTH_NULL has a special meaning when it's in the server list - it17021702 * means that the server will ignore the rpc creds, so any flavor17031703 * can be used but still use the sec= that was specified.17041704+ *17051705+ * Note also that the MNT procedure in MNTv1 does not return a list17061706+ * of supported security flavors. In this case, nfs_mount() fabricates17071707+ * a security flavor list containing just AUTH_NULL.17041708 */17051709 for (i = 0; i < count; i++) {17061710 flavor = server_authlist[i];···17131709 goto out;1714171017151711 if (flavor == RPC_AUTH_NULL)17161716- use_auth_null = true;17121712+ found_auth_null = true;17171713 }1718171417191719- if (use_auth_null) {17201720- flavor = RPC_AUTH_NULL;17151715+ if (found_auth_null) {17161716+ flavor = args->auth_info.flavors[0];17211717 goto out;17221718 }17231719
···125125 const struct nfs_pgio_completion_ops *compl_ops,126126 const struct nfs_rw_ops *rw_ops,127127 size_t bsize,128128- int how,129129- gfp_t gfp_flags);128128+ int how);130129extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *,131130 struct nfs_page *);132131extern int nfs_pageio_resend(struct nfs_pageio_descriptor *,
+8
net/sunrpc/clnt.c
···19031903 task->tk_status = 0;19041904 switch (status) {19051905 case -ECONNREFUSED:19061906+ /* A positive refusal suggests a rebind is needed. */19071907+ if (RPC_IS_SOFTCONN(task))19081908+ break;19091909+ if (clnt->cl_autobind) {19101910+ rpc_force_rebind(clnt);19111911+ task->tk_action = call_bind;19121912+ return;19131913+ }19061914 case -ECONNRESET:19071915 case -ECONNABORTED:19081916 case -ENETUNREACH: