int should_renew = 0;
u32 gen;
unsigned long ttl;
+ struct inode *dir;
+ int mds;
spin_lock(&dentry->d_lock);
di = ceph_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);
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;
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);
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
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)