--- /dev/null
+#ifndef CEPH_CLIENT_DENTRY_H
+#define CEPH_CLIENT_DENTRY_H
+
+#include "include/lru.h"
+#include "include/xlist.h"
+
+#include "mds/mdstypes.h"
+#include "InodeRef.h"
+
+class Dir;
+struct Inode;
+
+class Dentry : public LRUObject {
+ public:
+ string name; // sort of lame
+ //const char *name;
+ Dir *dir;
+ InodeRef inode;
+ int ref; // 1 if there's a dir beneath me.
+ int64_t offset;
+ mds_rank_t lease_mds;
+ utime_t lease_ttl;
+ uint64_t lease_gen;
+ ceph_seq_t lease_seq;
+ int cap_shared_gen;
+
+ /*
+ * ref==1 -> cached, unused
+ * ref >1 -> pinned in lru
+ */
+ void get() {
+ assert(ref > 0);
+ if (++ref == 2)
+ lru_pin();
+ //cout << "dentry.get on " << this << " " << name << " now " << ref << std::endl;
+ }
+ void put() {
+ assert(ref > 0);
+ if (--ref == 1)
+ lru_unpin();
+ //cout << "dentry.put on " << this << " " << name << " now " << ref << std::endl;
+ if (ref == 0)
+ delete this;
+ }
+
+ void dump(Formatter *f) const;
+
+ Dentry() :
+ dir(0), ref(1), offset(0),
+ lease_mds(-1), lease_gen(0), lease_seq(0), cap_shared_gen(0)
+ { }
+private:
+ ~Dentry() {
+ assert(ref == 0);
+ }
+};
+
+
+
+
+
+#endif