[klibc] [PATCH] Fix wrong NFS umount path

Benjamin Cama benjamin.cama at telecom-bretagne.eu
Fri Jun 22 03:17:01 PDT 2012


When mounting a NFS share and an error occurs for some reason, the NFS
share is not unmounted correctly: the local path is used instead of the
remote path in the umount_v[23]() call. This patch fixes this.

I found this while debugging some problems mounting the root file system
on NFS in a test system; I saw this in the logs (/mnt/duplicated is the
legitimate remote path):

        Jun 21 21:52:35 pangolin-test rpc.mountd[11155]: authenticated mount request from for /mnt/duplicated 
        Jun 21 21:52:35 pangolin-test rpc.mountd[11155]: refused unmount request from for /root (/): no export ent

I didn't understand why the hell it was trying to umount /root. You can
look at google for this and you'll find a lot of people wondering what
this is. I think that the big issue with this is that _a lot_ of
problems appearing _after_ not unmounting correctly the share the first
time are caused by this: I used to get mounting errors with “Stale NFS
file handle” that would never go away (NFS is so much a PITA for this
statefull behavior). You'll find a lot of people on the net trying to
reboot their NFS server and the like, in hope this errors goes away.

It was also quite misleading that the mount point for the root FS in the
initramfs is called /root. Anyway, a lot of these problems go away with
this patch.

BTW, this bug is more than 9 years old, since the inception of nfsmount!

Signed-off-by: Benjamin Cama <benjamin.cama at telecom-bretagne.eu>
 usr/kinit/nfsmount/mount.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/usr/kinit/nfsmount/mount.c b/usr/kinit/nfsmount/mount.c
index e3838f4..e0687a6 100644
--- a/usr/kinit/nfsmount/mount.c
+++ b/usr/kinit/nfsmount/mount.c
@@ -329,9 +329,9 @@ int nfs_mount(const char *pathname, const char *hostname,
 	if (mounted) {
 		if (data->flags & NFS_MOUNT_VER3)
-			umount_v3(path, clnt);
+			umount_v3(rem_path, clnt);
-			umount_v2(path, clnt);
+			umount_v2(rem_path, clnt);
 	ret = -1;
Benjamin Cama <benjamin.cama at telecom-bretagne.eu>

More information about the klibc mailing list