summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2008-01-19 07:59:26 -0500
committerSteve Dickson <steved@redhat.com>2008-01-19 07:59:26 -0500
commit2d77e3a27b7b211f303fcc3a813a044838dad970 (patch)
treeb1e1c83cb0575b39f7170686a000b8d8c7223f70
parent399cc3dad0cdfe8dca4a0ae9035a0554d7223eb2 (diff)
downloadnfs-utils-2d77e3a27b7b211f303fcc3a813a044838dad970.tar.gz
nfs-utils-2d77e3a27b7b211f303fcc3a813a044838dad970.tar.xz
nfs-utils-2d77e3a27b7b211f303fcc3a813a044838dad970.zip
Fix bug when both crossmnt and fsid are set.
When exported a filesystems with option inherited (by the crossmnt option) from a higherlevel filesystem, ignore filesystem specific options like FSID and explicit UUID. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mountd/cache.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index 02454ac..4aead6c 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -571,20 +571,25 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex
qword_print(f, path);
qword_printint(f, time(0)+30*60);
if (exp) {
- qword_printint(f, exp->e_flags);
+ int different_fs = strcmp(path, exp->e_path) != 0;
+
+ if (different_fs)
+ qword_printint(f, exp->e_flags & ~NFSEXP_FSID);
+ else
+ qword_printint(f, exp->e_flags);
qword_printint(f, exp->e_anonuid);
qword_printint(f, exp->e_anongid);
qword_printint(f, exp->e_fsid);
write_fsloc(f, exp, path);
write_secinfo(f, exp);
#if USE_BLKID
- if (exp->e_uuid == NULL) {
+ if (exp->e_uuid == NULL || different_fs) {
char u[16];
if (get_uuid(path, NULL, 16, u)) {
qword_print(f, "uuid");
qword_printhex(f, u, 16);
}
- } else if (exp->e_uuid) {
+ } else {
qword_print(f, "uuid");
qword_printhex(f, exp->e_uuid, 16);
}