Skip to contentSkip to conversation

NFS and umount -f

PATCH In review Andy 5 participants 6 messages Jun 8, 2004 – Jun 24, 2004 VFS

lore
Share & tools
lore

Andy

author
#0 lore raw

Why does this NOT do what is should be doing, i.e. umount no matter what?

Sometimes I get

umount2 : Stale NFS file handle
umount : machine/path: Illegal seek

and it does not umount it.

What part of
-f "Force unmount (in case of unreachable NFS system)" (umount man page)

does linux not understand?

shouldn't umount -f umount no matter what?

Andy

#1 lore raw

På ty , 08/06/2004 klokka 11:54, skreiv Andy:

Quoted 7 lines

Why does this NOT do what is should be doing, i.e. umount no matter what?

Sometimes I get

umount2 : Stale NFS file handle
umount : machine/path: Illegal seek

Quoted 6 lines

and it does not umount it.

What part of
-f "Force unmount (in case of unreachable NFS system)" (umount man page)

does linux not understand?

Works for me...

#2 lore raw
Quoted 8 lines · Trond Myklebust

På ty , 08/06/2004 klokka 11:54, skreiv Andy:

Quoted 7 lines

Why does this NOT do what is should be doing, i.e. umount no matter what?

Sometimes I get

umount2 : Stale NFS file handle
umount : machine/path: Illegal seek

Quoted 8 lines
Quoted 6 lines

and it does not umount it.

What part of
-f "Force unmount (in case of unreachable NFS system)" (umount man page)

does linux not understand?

Works for me...

And doesn't always work unconditionaly on other OSes either.

So maybe that's life.

Ian

#3 lore raw

PATCH 1/1 retry force umount (was Re: NFS and umount -f)

In reply to Trond Myklebust
Quoted 8 lines · Trond Myklebust

På ty , 08/06/2004 klokka 11:54, skreiv Andy:

Quoted 7 lines

Why does this NOT do what is should be doing, i.e. umount no matter what?

Sometimes I get

umount2 : Stale NFS file handle
umount : machine/path: Illegal seek

Quoted 9 lines
Quoted 6 lines

and it does not umount it.

What part of
-f "Force unmount (in case of unreachable NFS system)" (umount man page)

does linux not understand?

Works for me...

This works for me on 2.6.7 as well. However, I would get EBUSY back if processes were hung doing nfs operations to the downed server. The processes would get unstuck and get EIO, but the umount would still fail. Doing a 2nd umount -f with no processes waiting for the server would succeed. This patch retries force umounts in the kernel an extra time after giving them time to wake up and get out of the kernel. It doesn't seem quite right to fail a bunch of nfs operations and leave the file system mounted.

Daniel

fs/namespace.c +16 -0
diff -urp linux-2.6.7.orig/fs/namespace.c linux-2.6.7/fs/namespace.c
@@ -363,6 +363,7 @@ static int do_umount(struct vfsmount *mn
 {
 	struct super_block * sb = mnt->mnt_sb;
 	int retval;
+	int force_retry_count = 1;
 
 	retval = security_sb_umount(mnt, flags);
 	if (retval)
@@ -376,8 +377,11 @@ static int do_umount(struct vfsmount *mn
 	 * might fail to complete on the first run through as other tasks
 	 * must return, and the like. Thats for the mount program to worry
 	 * about for the moment.
+	 * Retry FORCE umount to give processes a chance to wakeup
+	 * and get out of the file system.
 	 */
 
+retry_force_umount:
 	lock_kernel();
 	if( (flags&MNT_FORCE) && sb->s_op->umount_begin)
 		sb->s_op->umount_begin(sb);
@@ -427,6 +431,18 @@ static int do_umount(struct vfsmount *mn
 		retval = 0;
 	}
 	spin_unlock(&vfsmount_lock);
+
+	if (flags & MNT_FORCE && retval && force_retry_count-- > 0) {
+		up_write(&current->namespace->sem);
+		/*
+		 * give processes a chance to wakeup from force umount
+		 */
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(10);
+		goto retry_force_umount;
+		
+	}
+
 	if (retval)
 		security_sb_umount_busy(mnt);
 	up_write(&current->namespace->sem);
#4 lore raw

Re: [PATCH] retry force umount (was Re: NFS and umount -f)

Quoted 8 lines · Daniel McNeil

This works for me on 2.6.7 as well. However, I would get EBUSY back if processes were hung doing nfs operations to the downed server. The processes would get unstuck and get EIO, but the umount would still fail. Doing a 2nd umount -f with no processes waiting for the server would succeed. This patch retries force umounts in the kernel an extra time after giving them time to wake up and get out of the kernel. It doesn't seem quite right to fail a bunch of nfs operations and leave the file system mounted.

Is there any reason to do that in the kernel? What, umount(8) can't do the same?

#5 lore raw

Re: [PATCH] retry force umount (was Re: NFS and umount -f)

Quoted 10 lines · On Wed, 2004-06-23 at 16:47, [email protected] wrote:
Quoted 8 lines · Daniel McNeil

This works for me on 2.6.7 as well. However, I would get EBUSY back if processes were hung doing nfs operations to the downed server. The processes would get unstuck and get EIO, but the umount would still fail. Doing a 2nd umount -f with no processes waiting for the server would succeed. This patch retries force umounts in the kernel an extra time after giving them time to wake up and get out of the kernel. It doesn't seem quite right to fail a bunch of nfs operations and leave the file system mounted.

Quoted 2 lines

Is there any reason to do that in the kernel? What, umount(8) can't do the same?

One reason to do it in the kernel is for consistency at the syscall layer -- before the syscall it was mounted and after it is unmounted. The umount syscall can return after causing nfs operations to fail for processes waiting for a down server with the file system still mounted.

You're right though, having umount(8) retry the force umount from user-space might be good enough. Ideally, force umount should always succeed and retrying once inside the kernel doesn't guarantee that.

Daniel