On Mon, 1 Jul 2013 09:20:30 -0400 Jeff Layton <jlayton@xxxxxxxxxx> wrote: > Christopher reported a regression where he was unable to unmount a NFS > filesystem where the root had gone stale. The problem is that > d_revalidate handles the root of the filesystem differently from other > dentries, but d_weak_revalidate does not. We could simply fix this by > making d_weak_revalidate return success on IS_ROOT dentries, but there > are cases where we do want to revalidate the root of the fs. > > A umount is really a special case. We generally aren't interested in > anything but the dentry and vfsmount that's attached at that point. If > the inode turns out to be stale we just don't care since the intent is > to stop using it anyway. > > Try to handle this situation better by treating umount as a special > case in the lookup code. Have it resolve the parent using normal > means, and then do a lookup of the final dentry without revalidating > it. In most cases, the final lookup will come out of the dcache, but > the case where there's a trailing symlink or !LAST_NORM entry on the > end complicates things a bit. > > Reported-by: Christopher T Vogan <cvogan@xxxxxxxxxx> > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> Thanks for this Jeff. It certainly looks credible to me. There is a lot of code copied from the "user_path_at" path which is a shame, but probably better that putting in lots of "is this an unmount" tests which would slow done the common case. On balance, I like it. Thanks, NeilBrown
Attachment:
signature.asc
Description: PGP signature