]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/linux/dcache_compat.h
cstyle: Resolve C style issues
[mirror_zfs.git] / include / linux / dcache_compat.h
index a624d4dd993e142569a6d9f31efe3cc0bedbed89..bdaa5db3e6d218b6131288d49cb49ebb47d8815e 100644 (file)
  */
 
 #ifndef _ZFS_DCACHE_H
-#define _ZFS_DCACHE_H
+#define        _ZFS_DCACHE_H
 
 #include <linux/dcache.h>
 
-#define dname(dentry)  ((char *)((dentry)->d_name.name))
+#define        dname(dentry)   ((char *)((dentry)->d_name.name))
+#define        dlen(dentry)    ((int)((dentry)->d_name.len))
+
+#ifndef HAVE_D_MAKE_ROOT
+#define        d_make_root(inode)      d_alloc_root(inode)
+#endif /* HAVE_D_MAKE_ROOT */
+
+/*
+ * 2.6.30 API change,
+ * The const keyword was added to the 'struct dentry_operations' in
+ * the dentry structure.  To handle this we define an appropriate
+ * dentry_operations_t typedef which can be used.
+ */
+#ifdef HAVE_CONST_DENTRY_OPERATIONS
+typedef const struct dentry_operations dentry_operations_t;
+#else
+typedef struct dentry_operations       dentry_operations_t;
+#endif
+
+/*
+ * 2.6.38 API change,
+ * Added d_set_d_op() helper function which sets some flags in
+ * dentry->d_flags based on which operations are defined.
+ */
+#ifndef HAVE_D_SET_D_OP
+static inline void
+d_set_d_op(struct dentry *dentry, dentry_operations_t *op)
+{
+       dentry->d_op = op;
+}
+#endif /* HAVE_D_SET_D_OP */
+
+/*
+ * 2.6.38 API addition,
+ * Added d_clear_d_op() helper function which clears some flags and the
+ * registered dentry->d_op table.  This is required because d_set_d_op()
+ * issues a warning when the dentry operations table is already set.
+ * For the .zfs control directory to work properly we must be able to
+ * override the default operations table and register custom .d_automount
+ * and .d_revalidate callbacks.
+ */
+static inline void
+d_clear_d_op(struct dentry *dentry)
+{
+#ifdef HAVE_D_SET_D_OP
+       dentry->d_op = NULL;
+       dentry->d_flags &= ~(
+           DCACHE_OP_HASH | DCACHE_OP_COMPARE |
+           DCACHE_OP_REVALIDATE | DCACHE_OP_DELETE);
+#endif /* HAVE_D_SET_D_OP */
+}
 
 #endif /* _ZFS_DCACHE_H */