4set_root: force "fsid=0" for all exports of '/'
authorNeilBrown <neilb@suse.de>
Tue, 1 May 2012 19:24:39 +0000 (15:24 -0400)
committerSteve Dickson <steved@redhat.com>
Tue, 1 May 2012 19:29:59 +0000 (15:29 -0400)
When "fsid=0" is not explicitly given in /etc/exports,
v4set_root creates a pseudo (NFSEXP_V4ROOT) export for '/'
with fsid 0 so that an NFSv4 client can find the root.

However if '/' is explicitly exported to the client, then that
explicit export must be used, and it will not have fsid=0.
So we must impose fsid=0 on all exports of '/'.
Without this, if '/' is exported to a client, that client will
not be able to mount '/' with NFSv4.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mountd/v4root.c

index 81f813b..b4fdcce 100644 (file)
@@ -192,6 +192,13 @@ v4root_set()
                                 */
                                continue;
 
+                       if (strcmp(exp->m_export.e_path, "/") == 0 &&
+                           !(exp->m_export.e_flags & NFSEXP_FSID)) {
+                               /* Force '/' to be exported as fsid == 0*/
+                               exp->m_export.e_flags |= NFSEXP_FSID;
+                               exp->m_export.e_fsid = 0;
+                       }
+
                        v4root_add_parents(exp);
                        /* XXX: error handling! */
                }