goto out1;
 
        exp.ex_client = dom;
+       exp.cd = cd;
 
        /* expiry */
        err = -EINVAL;
        new->ex_fslocs.locations = NULL;
        new->ex_fslocs.locations_count = 0;
        new->ex_fslocs.migrated = 0;
+       new->cd = item->cd;
 }
 
 static void export_update(struct cache_head *cnew, struct cache_head *citem)
        struct cache_head *ch;
        int hash = svc_export_hash(exp);
 
-       ch = sunrpc_cache_lookup(&svc_export_cache, &exp->h,
-                                hash);
+       ch = sunrpc_cache_lookup(exp->cd, &exp->h, hash);
        if (ch)
                return container_of(ch, struct svc_export, h);
        else
        struct cache_head *ch;
        int hash = svc_export_hash(old);
 
-       ch = sunrpc_cache_update(&svc_export_cache, &new->h,
-                                &old->h,
-                                hash);
+       ch = sunrpc_cache_update(old->cd, &new->h, &old->h, hash);
        if (ch)
                return container_of(ch, struct svc_export, h);
        else
 
        key.ex_client = clp;
        key.ex_path = *path;
+       key.cd = &svc_export_cache;
 
        exp = svc_export_lookup(&key);
        if (exp == NULL)
 
        struct nfsd4_fs_locations ex_fslocs;
        int                     ex_nflavors;
        struct exp_flavor_info  ex_flavors[MAX_SECINFO_LIST];
+       struct cache_detail     *cd;
 };
 
 /* an "export key" (expkey) maps a filehandlefragement to an