return gssexp;
 }
 
+/**
+ * rqst_exp_find - Find an svc_export in the context of a rqst or similar
+ * @reqp:      The handle to be used to suspend the request if a cache-upcall is needed
+ *             If NULL, missing in-cache information will result in failure.
+ * @net:       The network namespace in which the request exists
+ * @cl:                default auth_domain to use for looking up the export
+ * @gsscl:     an alternate auth_domain defined using deprecated gss/krb5 format.
+ * @fsid_type: The type of fsid to look for
+ * @fsidv:     The actual fsid to look up in the context of either client.
+ *
+ * Perform a lookup for @cl/@fsidv in the given @net for an export.  If
+ * none found and @gsscl specified, repeat the lookup.
+ *
+ * Returns an export, or an error pointer.
+ */
 struct svc_export *
-rqst_exp_find(struct svc_rqst *rqstp, int fsid_type, u32 *fsidv)
+rqst_exp_find(struct cache_req *reqp, struct net *net,
+             struct auth_domain *cl, struct auth_domain *gsscl,
+             int fsid_type, u32 *fsidv)
 {
+       struct nfsd_net *nn = net_generic(net, nfsd_net_id);
        struct svc_export *gssexp, *exp = ERR_PTR(-ENOENT);
-       struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
        struct cache_detail *cd = nn->svc_export_cache;
 
-       if (rqstp->rq_client == NULL)
+       if (!cl)
                goto gss;
 
        /* First try the auth_unix client: */
-       exp = exp_find(cd, rqstp->rq_client, fsid_type,
-                      fsidv, &rqstp->rq_chandle);
+       exp = exp_find(cd, cl, fsid_type, fsidv, reqp);
        if (PTR_ERR(exp) == -ENOENT)
                goto gss;
        if (IS_ERR(exp))
                return exp;
 gss:
        /* Otherwise, try falling back on gss client */
-       if (rqstp->rq_gssclient == NULL)
+       if (!gsscl)
                return exp;
-       gssexp = exp_find(cd, rqstp->rq_gssclient, fsid_type, fsidv,
-                                               &rqstp->rq_chandle);
+       gssexp = exp_find(cd, gsscl, fsid_type, fsidv, reqp);
        if (PTR_ERR(gssexp) == -ENOENT)
                return exp;
        if (!IS_ERR(exp))
 
        mk_fsid(FSID_NUM, fsidv, 0, 0, 0, NULL);
 
-       return rqst_exp_find(rqstp, FSID_NUM, fsidv);
+       return rqst_exp_find(&rqstp->rq_chandle, SVC_NET(rqstp),
+                            rqstp->rq_client, rqstp->rq_gssclient,
+                            FSID_NUM, fsidv);
 }
 
 /*