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: "Yan, Zheng" <zyan@redhat.com> Reviewed-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
1d8f83604c
commit
481f001ffa
|
@ -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,
|
||||||
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,
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue