From 52a9129c95766905f8c77247185e6335ef208946 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 11 Jan 2009 12:01:39 -0800 Subject: [PATCH] kclient: use lease seq # --- src/kernel/inode.c | 1 + src/kernel/mds_client.c | 7 ++++++- src/kernel/super.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 2cd2d537ed9f3..dd2894df7fd79 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -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; diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index e3530a54d82a1..3d75b9f93532e 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -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); } diff --git a/src/kernel/super.h b/src/kernel/super.h index e2eb382e7fada..9db4253f4d466 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -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) -- 2.39.5