From: Daniel McNeil <daniel@osdl.org>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: Andy <genanr@emsphone.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] retry force umount (was Re: NFS and umount -f)
Date: 23 Jun 2004 16:42:55 -0700 [thread overview]
Message-ID: <1088034175.2319.11.camel@ibm-c.pdx.osdl.net> (raw)
In-Reply-To: <1086710357.3896.11.camel@lade.trondhjem.org>
On Tue, 2004-06-08 at 08:59, Trond Myklebust wrote:
> På ty , 08/06/2004 klokka 11:54, skreiv Andy:
> > 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?
>
> 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
diff -urp linux-2.6.7.orig/fs/namespace.c linux-2.6.7/fs/namespace.c
--- linux-2.6.7.orig/fs/namespace.c 2004-06-22 16:41:15.000000000 -0700
+++ linux-2.6.7/fs/namespace.c 2004-06-23 16:28:12.986370695 -0700
@@ -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(¤t->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(¤t->namespace->sem);
next prev parent reply other threads:[~2004-06-23 23:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-08 15:54 NFS and umount -f Andy
2004-06-08 15:59 ` Trond Myklebust
2004-06-09 12:15 ` raven
2004-06-23 23:42 ` Daniel McNeil [this message]
2004-06-23 23:47 ` [PATCH] retry force umount (was Re: NFS and umount -f) viro
2004-06-24 0:22 ` Daniel McNeil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1088034175.2319.11.camel@ibm-c.pdx.osdl.net \
--to=daniel@osdl.org \
--cc=genanr@emsphone.com \
--cc=linux-kernel@vger.kernel.org \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®