diff options
author | Yan, Zheng <zyan@redhat.com> | 2016-03-17 14:41:59 +0800 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-03-25 18:51:56 +0100 |
commit | 200fd27c8fa2ba8bb4529033967b69a7cbfa2c2e (patch) | |
tree | 613283f7552b64be05bd46e525f285f323a1bdeb /fs/ceph/inode.c | |
parent | 641235d8f823574961d225bdbfaef299842aa38c (diff) | |
download | linux-200fd27c8fa2ba8bb4529033967b69a7cbfa2c2e.tar.bz2 |
ceph: use lookup request to revalidate dentry
If dentry has no lease, ceph_d_revalidate() previously return 0.
This causes VFS to invalidate the dentry and create a new dentry
for later lookup. Invalidating a dentry also detach any underneath
mount points. So mount point inside cephfs can disapear mystically
(even the mount point is not modified by other hosts).
The fix is using lookup request to revalidate dentry without lease.
This can partly solve the mount points disapear issue (as long as
the mount point is not modified by other hosts)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
Diffstat (limited to 'fs/ceph/inode.c')
-rw-r--r-- | fs/ceph/inode.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 8b136dc0bc13..ed58b168904a 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -1265,6 +1265,7 @@ retry_lookup: dout(" %p links to %p %llx.%llx, not %llx.%llx\n", dn, d_inode(dn), ceph_vinop(d_inode(dn)), ceph_vinop(in)); + d_invalidate(dn); have_lease = false; } |