struct ceph_dentry_info *di;
struct ceph_mds_session *s;
int valid = 0;
- int should_renew = 0;
u32 gen;
unsigned long ttl;
struct inode *dir;
- int mds;
+ int mds = -1;
u32 seq;
spin_lock(&dentry->d_lock);
valid = 1;
if (di->lease_renew_after &&
time_after(jiffies, di->lease_renew_after)) {
- should_renew = 1;
+ /* we should renew */
dir = dentry->d_parent->d_inode;
mds = s->s_mds;
seq = di->lease_seq;
di->lease_renew_after = 0;
}
} else {
- ceph_put_mds_session(di->lease_session);
- kfree(di);
- dentry->d_fsdata = NULL;
+ __ceph_mdsc_drop_dentry_lease(dentry);
}
}
spin_unlock(&dentry->d_lock);
- if (should_renew) {
- dout(0, "dentry_lease should_renew! - dentry %p = %d\n",
- dentry, valid);
+ if (mds >= 0)
ceph_mdsc_lease_send_msg(&ceph_client(dentry->d_sb)->mdsc,
mds, dir, dentry, CEPH_MDS_LEASE_RENEW, seq);
- }
dout(20, "dentry_lease_is_valid - dentry %p = %d\n", dentry, valid);
return valid;
}
BUG_ON(session->s_nr_caps > 0);
}
-/*
- * caller must hold session s_mutex, dentry->d_lock
- */
-static void __drop_dentry_lease(struct dentry *dentry)
-{
- struct ceph_dentry_info *di;
- di = ceph_dentry(dentry);
- ceph_put_mds_session(di->lease_session);
- kfree(di);
- dentry->d_fsdata = NULL;
-}
-
/*
* wake up any threads waiting on this session's caps
*
* leases
*/
+/*
+ * caller must hold session s_mutex, dentry->d_lock
+ */
+void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry)
+{
+ struct ceph_dentry_info *di = ceph_dentry(dentry);
+
+ ceph_put_mds_session(di->lease_session);
+ kfree(di);
+ dentry->d_fsdata = NULL;
+}
+
void ceph_mdsc_handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
{
struct super_block *sb = mdsc->client->sb;
case CEPH_MDS_LEASE_REVOKE:
if (di && di->lease_session == session) {
h->seq = cpu_to_le32(di->lease_seq);
- __drop_dentry_lease(dentry);
+ __ceph_mdsc_drop_dentry_lease(dentry);
}
release = 1;
break;
/* we do have a lease on this dentry; note mds and seq */
mds = di->lease_session->s_mds;
seq = di->lease_seq;
- __drop_dentry_lease(dentry);
+ __ceph_mdsc_drop_dentry_lease(dentry);
spin_unlock(&dentry->d_lock);
dout(10, "lease_release inode %p dentry %p mask %d to mds%d\n",
extern char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
int mds);
+extern void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry);
extern void ceph_mdsc_lease_send_msg(struct ceph_mds_client *mdsc, int mds,
struct inode *inode,
struct dentry *dentry, char action,