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;
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;
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);
}
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)