Commit 481f001f authored by Yan, Zheng's avatar Yan, Zheng Committed by Ilya Dryomov

ceph: update ceph_dentry_info::lease_session when necessary

Current code does not update ceph_dentry_info::lease_session once
it is set. If auth mds of corresponding dentry changes, dentry lease
keeps in an invalid state.
Signed-off-by: default avatar"Yan, Zheng" <zyan@redhat.com>
Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 1d8f8360
...@@ -1016,6 +1016,7 @@ static void update_dentry_lease(struct dentry *dentry, ...@@ -1016,6 +1016,7 @@ static void update_dentry_lease(struct dentry *dentry,
long unsigned ttl = from_time + (duration * HZ) / 1000; long unsigned ttl = from_time + (duration * HZ) / 1000;
long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000; long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
struct inode *dir; struct inode *dir;
struct ceph_mds_session *old_lease_session = NULL;
/* /*
* Make sure dentry's inode matches tgt_vino. NULL tgt_vino means that * Make sure dentry's inode matches tgt_vino. NULL tgt_vino means that
...@@ -1051,8 +1052,10 @@ static void update_dentry_lease(struct dentry *dentry, ...@@ -1051,8 +1052,10 @@ static void update_dentry_lease(struct dentry *dentry,
time_before(ttl, di->time)) time_before(ttl, di->time))
goto out_unlock; /* we already have a newer lease. */ goto out_unlock; /* we already have a newer lease. */
if (di->lease_session && di->lease_session != session) if (di->lease_session && di->lease_session != session) {
goto out_unlock; old_lease_session = di->lease_session;
di->lease_session = NULL;
}
ceph_dentry_lru_touch(dentry); ceph_dentry_lru_touch(dentry);
...@@ -1065,6 +1068,8 @@ static void update_dentry_lease(struct dentry *dentry, ...@@ -1065,6 +1068,8 @@ static void update_dentry_lease(struct dentry *dentry,
di->time = ttl; di->time = ttl;
out_unlock: out_unlock:
spin_unlock(&dentry->d_lock); spin_unlock(&dentry->d_lock);
if (old_lease_session)
ceph_put_mds_session(old_lease_session);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment