diff options
author | Steve Dickson <steved@redhat.com> | 2008-01-19 07:59:26 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2008-01-19 07:59:26 -0500 |
commit | 2d77e3a27b7b211f303fcc3a813a044838dad970 (patch) | |
tree | b1e1c83cb0575b39f7170686a000b8d8c7223f70 | |
parent | 399cc3dad0cdfe8dca4a0ae9035a0554d7223eb2 (diff) | |
download | nfs-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.c | 11 |
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); } |