Messages in this thread | | | Date | Fri, 26 Feb 2010 09:07:45 -0800 | From | John Johansen <> | Subject | Re: [PATCH] Fix __d_path for lazy unmounts |
| |
On 02/26/2010 04:07 AM, Miklos Szeredi wrote: > On Sat, 20 Feb 2010, john.johansen@canonical.co wrote: >> From: John Johansen<john.johansen@canonical.com> >> >> When __d_path() hits a lazily unmounted mount point, it tries to prepend >> the name of the lazily unmounted dentry to the path name. It gets this wrong, >> and also overwrites the slash that separates the name from the following >> pathname component. This patch fixes that; if a process was in directory >> /foo/bar and /foo got lazily unmounted, the old result was ``foobar'' (note the >> missing slash), while the new result with this patch is ``/foo/bar''. > > Example: > > # mkdir -p /tmp/foo/bar > # mkdir /tmp/mnt > # mount --bind /tmp/foo /tmp/mnt > # cd /tmp/mnt/bar > # /bin/pwd > /tmp/mnt/bar > # umount -l /tmp/mnt > # /bin/pwd > foobar > > After the patch it will be /foo/bar. > > Why is the path starting with "/foo"? Does that make any sense? > not a lot except, connecting disconnected paths to root is what is currently done for paths that aren't reachable but have an fs as their root (ie the last dentry is / so it looks connected to root).
I would be happy in this case to leave bind mounts disconnected (no leading /) and just fix the overwriting of the internal /.
I'll make the change.
> Last time this was discussed the proposals which are halfway sane > were: > > a) "(unreachable)/bar" or something along those lines > b) ENOENT > right, I actually have another couple of __d_path patches I need to kick out for discussion. Last time we rolled 3 different changes into a single patch. This time I wanted to isolate the changes per patch. I'll kick them all out today.
> And with either one care needs to be taken to limit this change to > interfaces (both internal and userspace) where it's not likely to > cause breakage. > agreed.
| |