]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: send lease renew message when passed ttl
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 13 Mar 2009 23:27:41 +0000 (16:27 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 13 Mar 2009 23:29:47 +0000 (16:29 -0700)
src/kernel/dir.c
src/kernel/inode.c
src/kernel/mds_client.h
src/kernel/super.h

index 05af430cbb563e2aef8b65c479b6de74b8dcad9b..00c9bec67ae3db784878c3d07f3d5e05e789dd45 100644 (file)
@@ -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;
index 8534ef2f909861cfb98fe57264e0ae01251e4fbc..37fb8cedde96076cc5b896b5adf07fa9b52fce16 100644 (file)
@@ -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);
index 8b4c2740c2d3192981b2a48fda5bb6b2bc1039c9..d22292a5d2fafaa19960ff45161a0feab0d1c9fe 100644 (file)
@@ -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
index 4b4de630fac7e7767d4c272ae4d36a1d5ecbb2f9..10444a8861b10d6b44807f532dc3ded7e70a4fbd 100644 (file)
@@ -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)