Hide Forgot
+++ This bug was initially created as a clone of Bug #1007626 +++ Description of problem: when start nfs server, we should verify the export entries: -when I export an directory in tmpfs without fsid= specified, -I can export successfuly, * but can not mount it from client. --the server log indicate: "Cannot export $dir, possibly unsupported filesystem or fsid= required" -We think that, exportfs should verify the export entries, if invalid then tell user that's invalid, cannot export Version-Release number of selected component (if applicable): all version in RHEL5.9 5.10 6.x 7.0 How reproducible: 100% Steps to Reproduce: 0. backup your /etc/exports 1. echo "/dev/shm *(ro)" >/etc/exports 2. service nfs restart 3. exportfs or showmount -e Actual results: service nfs restart ok exportfs output: /dev/shm <world> Expected results: service nfs restart should output error/warn: and should not export success, exportfs no output Additional info:
Debug, and review the code of exportfs, find that: this is a bug of exportfs(also about kernel): static int test_export(char *path, int with_fsid) { char buf[1024]; int fd, n; sprintf(buf, "-test-client- %s 3 %d -1 -1 0\n", path, with_fsid ? NFSEXP_FSID : 0); fd = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY); if (fd < 0) return 0; n = write(fd, buf, strlen(buf)); close(fd); if (n < 0) return 0; return 1; } 1. if the path is an tmpfs(no uuid), and with_fsid==0, this function test_export still return 1 (write success). that's wrong. 2. and another problem: validate_export() just generate log and return void. We think that validate_export() should return an int value to indicate whether the path can export. And in export_all(), should not export the path if invalid; static void export_all(int verbose) { nfs_export *exp; int i; for (i = 0; i < MCL_MAXTYPES; i++) { for (exp = exportlist[i].p_head; exp; exp = exp->m_next) { if (verbose) printf("exporting %s:%s\n", exp->m_client->m_hostname, exp->m_export.e_path); exp->m_xtabent = 1; exp->m_mayexport = 1; exp->m_changed = 1; exp->m_warned = 0; validate_export(exp); } } } static void <<<- should return int value to indicate whether the path can export validate_export(nfs_export *exp) {
#BEGIN --- exportfs.c 2013-06-06 15:12:58.881567360 +0800 +++ exportfs.c.new 2013-09-14 14:50:56.719877598 +0800 @@ -475,6 +475,9 @@ validate_export(nfs_export *exp) xlog(L_ERROR, "%s does not support NFS export", path); return; + } else { + xlog(L_ERROR, "Assert: test_export() %s fail", path); + return; } } #END this patch could avoid the test_export work fail.
This request was not resolved in time for the current release. Red Hat invites you to ask your support representative to propose this request, if still desired, for consideration in the next release of Red Hat Enterprise Linux.
(In reply to Yin.JianHong from comment #0) > +++ This bug was initially created as a clone of Bug #1007626 +++ > > This was closed as WONTFIX so I'm going to do wit this one.