+#ifdef __KERNEL__
+/* Open counts for files. No longer atomic, must hold inode->i_sem */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
+# define mds_inode_oatomic(inode) ((inode)->i_cindex)
+#else
+# define mds_inode_oatomic(inode) ((inode)->i_attr_flags)
+#endif
+
+static inline int mds_orphan_open_count(struct inode *inode)
+{
+ LASSERT_MDS_ORPHAN_READ_LOCKED(inode);
+ return mds_inode_oatomic(inode);
+}
+
+static inline int mds_orphan_open_inc(struct inode *inode)
+{
+ LASSERT_MDS_ORPHAN_WRITE_LOCKED(inode);
+ return ++mds_inode_oatomic(inode);
+}
+
+static inline int mds_orphan_open_dec_test(struct inode *inode)
+{
+ LASSERT_MDS_ORPHAN_WRITE_LOCKED(inode);
+ return --mds_inode_oatomic(inode) == 0;
+}
+
+#define mds_inode_is_orphan(inode) ((inode)->i_flags & 0x4000000)
+#define mds_inode_set_orphan(inode) \
+do { \
+ (inode)->i_flags |= 0x4000000; \
+ CDEBUG(D_VFSTRACE, "setting orphan flag on inode %p\n", inode); \
+} while (0)
+#define mds_inode_unset_orphan(inode) \
+do { \
+ (inode)->i_flags &= ~(0x4000000); \
+ CDEBUG(D_VFSTRACE, "removing orphan flag from inode %p\n", inode); \
+} while (0)
+
+
+/* inode flags managed by mds directly */
+#define MDS_IF_ATTRS_OLD 0x8000000 /* inode needs attrs. refreshing */
+
+#define mds_inode_has_old_attrs(inode) ((inode)->i_flags & MDS_IF_ATTRS_OLD)
+#define mds_inode_set_attrs_old(inode) \
+do { \
+ (inode)->i_flags |= MDS_IF_ATTRS_OLD; \
+ CDEBUG(D_VFSTRACE, "setting attr.old flag on inode %p\n", inode);\
+} while (0)
+#define mds_inode_unset_attrs_old(inode) \
+do { \
+ (inode)->i_flags &= ~(MDS_IF_ATTRS_OLD); \
+ CDEBUG(D_VFSTRACE, "removing attrs.old flag from inode %p\n", inode);\
+} while (0)
+
+
+#endif /* __KERNEL__ */
+