]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: use lease seq #
authorSage Weil <sage@newdream.net>
Sun, 11 Jan 2009 20:01:39 +0000 (12:01 -0800)
committerSage Weil <sage@newdream.net>
Sun, 11 Jan 2009 20:01:39 +0000 (12:01 -0800)
src/kernel/inode.c
src/kernel/mds_client.c
src/kernel/super.h

index 2cd2d537ed9f37c1b5920935ae80979da8415504..dd2894df7fd796c3ff6d8378503653caadcc53d9 100644 (file)
@@ -640,6 +640,7 @@ static void update_dentry_lease(struct dentry *dentry,
                dentry->d_fsdata = di;
                di->lease_session = ceph_get_mds_session(session);
                di->lease_gen = session->s_cap_gen;
+               di->lease_seq = le32_to_cpu(lease->seq);
                is_new = 1;
        } else if (di->lease_session != session)
                goto out_unlock;
index e3530a54d82a10e8a80bf4cb3f80d5290be8d43a..3d75b9f93532e3d5dfc49c71fd5fc809b3915660 100644 (file)
@@ -1766,6 +1766,7 @@ void ceph_mdsc_handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
        struct ceph_mds_session *session;
        struct ceph_inode_info *ci;
        struct dentry *parent, *dentry;
+       struct ceph_dentry_info *di;
        int mds;
        struct ceph_mds_lease *h = msg->front.iov_base;
        struct ceph_vino vino;
@@ -1827,7 +1828,11 @@ void ceph_mdsc_handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
                dput(parent);
                if (!dentry)
                        goto release;
-               revoke_dentry_lease(dentry);
+               di = ceph_dentry(dentry);
+               if (di && di->lease_session == session) {
+                       h->seq = cpu_to_le32(di->lease_seq);
+                       revoke_dentry_lease(dentry);
+               }
                dput(dentry);
        }
 
index e2eb382e7fada143e5489ef7aa5b625f2ea32391..9db4253f4d466dbbc6390131961d27dae27b52fe 100644 (file)
@@ -319,6 +319,7 @@ extern u32 ceph_choose_frag(struct ceph_inode_info *ci, u32 v,
 struct ceph_dentry_info {
        struct ceph_mds_session *lease_session;
        u32 lease_gen;
+       u32 lease_seq;
 };
 
 static inline struct ceph_dentry_info *ceph_dentry(struct dentry *dentry)