Why won't 8.2 umount -f?

Rick Macklem rmacklem at uoguelph.ca
Tue Feb 14 03:18:34 UTC 2012

Doug Barton wrote:
> On 02/13/2012 18:23, Rick Macklem wrote:
> > Doug Barton wrote:
> >> Is there some magic I'm missing to convince an 8.2 system to umount
> >> -f?
> >> I had an NFS server crash, so I'm trying to get the mounts updated.
> >> All
> >> of the 7.x systems happily did 'umount -f', but the 8.x systems
> >> (mostly
> >> 8.2-pN) are just hanging forever.
> >>
> >> Is this a bug, or is it something I'm missing?
> >>
> > Well, I didn't realize that a 7.n system would "umount -f" an NFS
> > mount when the server was down and there were dirty blocks that
> > needed to be written back, but I don't know.
> I'm doubtful that any of those systems had dirty blocks.
> > (I seem to recall that
> > someone encouraged me to MFC one of my changes related to this back
> > to stable/7, but I'm not sure if it mattered?)
> Please don't unless you can verify that it doesn't make this situation
> worse. :)
> > I have pretty well fixed the new client w.r.t. this except for the
> > case where you do a "umount <path>" and that gets hung. Once a non
> > "-f"
> > umount gets hung, there is nothing you can do, because the mount
> > point is
> > locked up, so a subsequent "umount -f" can't get as far as
> > nfs_umount().
> I'm aware of this issue, and I did 'umount -f' first. But I wonder if
> this isn't something that should be fixed because I think most users
> would expect that 'umount -> umount -f' would be the natural
> progression, similar to 'kill -> kill -9'.
I suspect that is "very difficult" to fix. The regular "umount /mnt" will
stuck somewhere inside vinvalbuf() trying to flush blocks back to the server
while holding a lock on the mount point. Although kib@ is the guy who
would most likely know, I don't think it would be easy to get it to come
out ok. For example, one approach might be to make all the sleeps interruptible
and then add code to gracefully handle an EINTR return from them and then
release locks as they return and..... well it's not something I would want
to tackle.

> > My guess is that the old (default for 8.n) client isn't fixed for
> > this. If you "grep MNTK_UNMOUNTF" in the sources, you'll see it
> > used some in the old/regular client, but not as much as the new one.
> >
> > You also need a fairly recent (can't remember if that is in 8.2)
> > version of umount.c, since the code had a "sync();" at the beginning
> > of it that would hang before even getting to the umount(2) syscall.
> >
> > Bottom line, I think the newnfs client (the default for 9.0) can
> > do this, but I'm doubtful the old/reguler one can. (I also wouldn't
> > be surprised if there is still a bug other than the above mentioned
> > one w.r.t. doing a "umount /mnt" and getting that hung before trying
> > "umount -f /mnt".
> Is the new client in 8-stable up to date relevant to 9.0, and/or is it
> considered safe to use in production?
> Thanks,
> Doug
> --
> It's always a long day; 86400 doesn't fit into a short.
> Breadth of IT experience, and depth of knowledge in the DNS.
> Yours for the right price. :) http://SupersetSolutions.com/

More information about the freebsd-stable mailing list