Lines Matching refs:exp
360 struct svc_export *exp = container_of(rcu_head, struct svc_export, in svc_export_release() local
363 nfsd4_fslocs_free(&exp->ex_fslocs); in svc_export_release()
364 export_stats_destroy(exp->ex_stats); in svc_export_release()
365 kfree(exp->ex_stats); in svc_export_release()
366 kfree(exp->ex_uuid); in svc_export_release()
367 kfree(exp); in svc_export_release()
372 struct svc_export *exp = container_of(ref, struct svc_export, h.ref); in svc_export_put() local
374 path_put(&exp->ex_path); in svc_export_put()
375 auth_domain_put(exp->ex_client); in svc_export_put()
376 call_rcu(&exp->ex_rcu, svc_export_release); in svc_export_put()
389 struct svc_export *exp = container_of(h, struct svc_export, h); in svc_export_request() local
392 qword_add(bpp, blen, exp->ex_client->name); in svc_export_request()
393 pth = d_path(&exp->ex_path, *bpp, *blen); in svc_export_request()
521 static int secinfo_parse(char **mesg, char *buf, struct svc_export *exp) in secinfo_parse() argument
528 if (exp->ex_nflavors) in secinfo_parse()
537 for (f = exp->ex_flavors; f < exp->ex_flavors + listsize; f++) { in secinfo_parse()
551 if (~NFSEXP_SECINFO_FLAGS & (f->flags ^ exp->ex_flags)) in secinfo_parse()
554 exp->ex_nflavors = listsize; in secinfo_parse()
562 secinfo_parse(char **mesg, char *buf, struct svc_export *exp) { return 0; } in secinfo_parse() argument
565 static int xprtsec_parse(char **mesg, char *buf, struct svc_export *exp) in xprtsec_parse() argument
576 exp->ex_xprtsec_modes = 0; in xprtsec_parse()
583 exp->ex_xprtsec_modes |= mode; in xprtsec_parse()
615 struct svc_export exp = {}, *expp; in svc_export_parse() local
641 err = kern_path(buf, 0, &exp.ex_path); in svc_export_parse()
645 exp.ex_client = dom; in svc_export_parse()
646 exp.cd = cd; in svc_export_parse()
647 exp.ex_devid_map = NULL; in svc_export_parse()
648 exp.ex_xprtsec_modes = NFSEXP_XPRTSEC_ALL; in svc_export_parse()
651 err = get_expiry(&mesg, &exp.h.expiry_time); in svc_export_parse()
659 set_bit(CACHE_NEGATIVE, &exp.h.flags); in svc_export_parse()
663 exp.ex_flags= an_int; in svc_export_parse()
669 exp.ex_anon_uid= make_kuid(current_user_ns(), an_int); in svc_export_parse()
675 exp.ex_anon_gid= make_kgid(current_user_ns(), an_int); in svc_export_parse()
681 exp.ex_fsid = an_int; in svc_export_parse()
685 err = fsloc_parse(&mesg, buf, &exp.ex_fslocs); in svc_export_parse()
687 err = nfsd_uuid_parse(&mesg, buf, &exp.ex_uuid); in svc_export_parse()
689 err = secinfo_parse(&mesg, buf, &exp); in svc_export_parse()
691 err = xprtsec_parse(&mesg, buf, &exp); in svc_export_parse()
702 err = check_export(&exp.ex_path, &exp.ex_flags, exp.ex_uuid); in svc_export_parse()
711 if (exp.h.expiry_time < seconds_since_boot()) in svc_export_parse()
721 if (!uid_valid(exp.ex_anon_uid)) in svc_export_parse()
723 if (!gid_valid(exp.ex_anon_gid)) in svc_export_parse()
727 nfsd4_setup_layout_type(&exp); in svc_export_parse()
730 expp = svc_export_lookup(&exp); in svc_export_parse()
735 expp = svc_export_update(&exp, expp); in svc_export_parse()
743 nfsd4_fslocs_free(&exp.ex_fslocs); in svc_export_parse()
744 kfree(exp.ex_uuid); in svc_export_parse()
746 path_put(&exp.ex_path); in svc_export_parse()
756 static void show_secinfo(struct seq_file *m, struct svc_export *exp);
772 struct svc_export *exp; in svc_export_show() local
782 exp = container_of(h, struct svc_export, h); in svc_export_show()
783 seq_path(m, &exp->ex_path, " \t\n\\"); in svc_export_show()
785 seq_escape(m, exp->ex_client->name, " \t\n\\"); in svc_export_show()
787 struct percpu_counter *counter = exp->ex_stats->counter; in svc_export_show()
789 seq_printf(m, "\t%lld\n", exp->ex_stats->start_time); in svc_export_show()
802 exp_flags(m, exp->ex_flags, exp->ex_fsid, in svc_export_show()
803 exp->ex_anon_uid, exp->ex_anon_gid, &exp->ex_fslocs); in svc_export_show()
804 if (exp->ex_uuid) { in svc_export_show()
810 seq_printf(m, "%02x", exp->ex_uuid[i]); in svc_export_show()
813 show_secinfo(m, exp); in svc_export_show()
909 svc_export_hash(struct svc_export *exp) in svc_export_hash() argument
913 hash = hash_ptr(exp->ex_client, EXPORT_HASHBITS); in svc_export_hash()
914 hash ^= hash_ptr(exp->ex_path.dentry, EXPORT_HASHBITS); in svc_export_hash()
915 hash ^= hash_ptr(exp->ex_path.mnt, EXPORT_HASHBITS); in svc_export_hash()
920 svc_export_lookup(struct svc_export *exp) in svc_export_lookup() argument
923 int hash = svc_export_hash(exp); in svc_export_lookup()
925 ch = sunrpc_cache_lookup_rcu(exp->cd, &exp->h, hash); in svc_export_lookup()
975 struct svc_export *exp, key; in exp_get_by_name() local
985 exp = svc_export_lookup(&key); in exp_get_by_name()
986 if (exp == NULL) in exp_get_by_name()
988 err = cache_check(cd, &exp->h, reqp); in exp_get_by_name()
993 return exp; in exp_get_by_name()
1003 struct svc_export *exp = exp_get_by_name(cd, clp, path, NULL); in exp_parent() local
1005 while (PTR_ERR(exp) == -ENOENT && !IS_ROOT(path->dentry)) { in exp_parent()
1009 exp = exp_get_by_name(cd, clp, path, NULL); in exp_parent()
1013 return exp; in exp_parent()
1027 struct svc_export *exp; in exp_rootfh() local
1046 exp = exp_parent(cd, clp, &path); in exp_rootfh()
1047 if (IS_ERR(exp)) { in exp_rootfh()
1048 err = PTR_ERR(exp); in exp_rootfh()
1056 if (fh_compose(&fh, exp, path.dentry, NULL)) in exp_rootfh()
1062 exp_put(exp); in exp_rootfh()
1072 struct svc_export *exp; in exp_find() local
1078 exp = exp_get_by_name(cd, clp, &ek->ek_path, reqp); in exp_find()
1081 if (IS_ERR(exp)) in exp_find()
1082 return ERR_CAST(exp); in exp_find()
1083 return exp; in exp_find()
1096 __be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp, in check_nfsd_access() argument
1099 struct exp_flavor_info *f, *end = exp->ex_flavors + exp->ex_nflavors; in check_nfsd_access()
1113 if (exp->ex_xprtsec_modes & NFSEXP_XPRTSEC_NONE) { in check_nfsd_access()
1117 if (exp->ex_xprtsec_modes & NFSEXP_XPRTSEC_TLS) { in check_nfsd_access()
1122 if (exp->ex_xprtsec_modes & NFSEXP_XPRTSEC_MTLS) { in check_nfsd_access()
1131 if (exp->ex_client == rqstp->rq_gssclient) in check_nfsd_access()
1134 for (f = exp->ex_flavors; f < end; f++) { in check_nfsd_access()
1139 if (exp->ex_nflavors == 0) { in check_nfsd_access()
1165 for (f = exp->ex_flavors; f < end; f++) { in check_nfsd_access()
1187 struct svc_export *gssexp, *exp = ERR_PTR(-ENOENT); in rqst_exp_get_by_name() local
1195 exp = exp_get_by_name(cd, rqstp->rq_client, path, &rqstp->rq_chandle); in rqst_exp_get_by_name()
1196 if (PTR_ERR(exp) == -ENOENT) in rqst_exp_get_by_name()
1198 if (IS_ERR(exp)) in rqst_exp_get_by_name()
1199 return exp; in rqst_exp_get_by_name()
1201 if (exp->ex_nflavors > 0) in rqst_exp_get_by_name()
1202 return exp; in rqst_exp_get_by_name()
1206 return exp; in rqst_exp_get_by_name()
1209 return exp; in rqst_exp_get_by_name()
1210 if (!IS_ERR(exp)) in rqst_exp_get_by_name()
1211 exp_put(exp); in rqst_exp_get_by_name()
1236 struct svc_export *gssexp, *exp = ERR_PTR(-ENOENT); in rqst_exp_find() local
1243 exp = exp_find(cd, cl, fsid_type, fsidv, reqp); in rqst_exp_find()
1244 if (PTR_ERR(exp) == -ENOENT) in rqst_exp_find()
1246 if (IS_ERR(exp)) in rqst_exp_find()
1247 return exp; in rqst_exp_find()
1249 if (exp->ex_nflavors > 0) in rqst_exp_find()
1250 return exp; in rqst_exp_find()
1254 return exp; in rqst_exp_find()
1257 return exp; in rqst_exp_find()
1258 if (!IS_ERR(exp)) in rqst_exp_find()
1259 exp_put(exp); in rqst_exp_find()
1267 struct svc_export *exp = rqst_exp_get_by_name(rqstp, path); in rqst_exp_parent() local
1269 while (PTR_ERR(exp) == -ENOENT && !IS_ROOT(path->dentry)) { in rqst_exp_parent()
1273 exp = rqst_exp_get_by_name(rqstp, path); in rqst_exp_parent()
1277 return exp; in rqst_exp_parent()
1299 struct svc_export *exp; in exp_pseudoroot() local
1302 exp = rqst_find_fsidzero_export(rqstp); in exp_pseudoroot()
1303 if (IS_ERR(exp)) in exp_pseudoroot()
1304 return nfserrno(PTR_ERR(exp)); in exp_pseudoroot()
1305 rv = fh_compose(fhp, exp, exp->ex_path.dentry, NULL); in exp_pseudoroot()
1306 exp_put(exp); in exp_pseudoroot()
1372 static void show_secinfo(struct seq_file *m, struct svc_export *exp) in show_secinfo() argument
1375 struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors; in show_secinfo()
1378 if (exp->ex_nflavors == 0) in show_secinfo()
1380 f = exp->ex_flavors; in show_secinfo()
1382 if (!secinfo_flags_equal(flags, exp->ex_flags)) in show_secinfo()
1424 struct svc_export *exp = container_of(cp, struct svc_export, h); in e_show() local
1437 if (cache_check_rcu(cd, &exp->h, NULL)) in e_show()