From c980158404669d5442ef67a64a3171a67bd67c5f Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 13 Mar 2009 16:27:41 -0700 Subject: [PATCH] kclient: send lease renew message when passed ttl --- src/kernel/dir.c | 11 ++++++++++- src/kernel/inode.c | 2 +- src/kernel/mds_client.h | 3 +++ src/kernel/super.h | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/kernel/dir.c b/src/kernel/dir.c index 05af430cbb5..00c9bec67ae 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -642,6 +642,8 @@ static int dentry_lease_is_valid(struct dentry *dentry) int should_renew = 0; u32 gen; unsigned long ttl; + struct inode *dir; + int mds; spin_lock(&dentry->d_lock); di = ceph_dentry(dentry); @@ -656,8 +658,14 @@ static int dentry_lease_is_valid(struct dentry *dentry) time_before(jiffies, dentry->d_time) && time_before(jiffies, ttl)) { valid = 1; - if (time_after(jiffies, di->lease_renew_ttl)) + if (di->lease_renew_after && + time_after(jiffies, di->lease_renew_after)) { should_renew = 1; + dir = dentry->d_parent->d_inode; + mds = s->s_mds; + } else { + dout(0, "should_renew = 0, %ld < %ld\n", jiffies, di->lease_renew_after); + } } else { ceph_put_mds_session(di->lease_session); kfree(di); @@ -668,6 +676,7 @@ static int dentry_lease_is_valid(struct dentry *dentry) if (should_renew) { dout(0, "dentry_lease should_renew! - dentry %p = %d\n", dentry, valid); + ceph_mdsc_lease_send_msg(&ceph_client(dentry->d_sb)->mdsc, mds, dir, dentry, CEPH_MDS_LEASE_RENEW, CEPH_LOCK_DN); } dout(20, "dentry_lease_is_valid - dentry %p = %d\n", dentry, valid); return valid; diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 8534ef2f909..37fb8cedde9 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -684,7 +684,7 @@ static void update_dentry_lease(struct dentry *dentry, is_new = 1; } else if (di->lease_session != session) goto out_unlock; - di->lease_renew_ttl = half_ttl; + di->lease_renew_after = half_ttl; dentry->d_time = ttl; out_unlock: spin_unlock(&dentry->d_lock); diff --git a/src/kernel/mds_client.h b/src/kernel/mds_client.h index 8b4c2740c2d..d22292a5d2f 100644 --- a/src/kernel/mds_client.h +++ b/src/kernel/mds_client.h @@ -311,4 +311,7 @@ extern struct ceph_mds_request *ceph_mdsc_get_listener_req(struct inode *inode, u64 tid); extern char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base, int mds); +extern void ceph_mdsc_lease_send_msg(struct ceph_mds_client *mdsc, int mds, struct inode *inode, + struct dentry *dentry, char action, int mask); + #endif diff --git a/src/kernel/super.h b/src/kernel/super.h index 4b4de630fac..10444a8861b 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -367,7 +367,7 @@ struct ceph_dentry_info { struct ceph_mds_session *lease_session; u32 lease_gen; u32 lease_seq; - unsigned long lease_renew_ttl; + unsigned long lease_renew_after; }; static inline struct ceph_dentry_info *ceph_dentry(struct dentry *dentry) -- 2.47.3