Index: src/kernel/linux-2.6/super.c
===================================================================
--- src/kernel/linux-2.6/super.c	(revision 9360)
+++ src/kernel/linux-2.6/super.c	(working copy)
@@ -1060,7 +1060,11 @@
         ret = -ENOMEM;
         goto error_exit;
     }
+#ifdef HAVE_D_SET_D_OP
+    d_set_d_op(root_dentry, &pvfs2_dentry_operations);
+#else
     root_dentry->d_op = &pvfs2_dentry_operations;
+#endif
     sb->s_root = root_dentry;
 
     /* finally, add this sb to our list of known pvfs2 sb's */
@@ -1145,7 +1149,11 @@
    }
 #endif
 
+#ifdef HAVE_D_SET_D_OP
+   d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
    dentry->d_op = &pvfs2_dentry_operations;
+#endif
    return dentry;
 }
 #endif /* HAVE_FHTODENTRY_EXPORT_OPERATIONS */
@@ -1290,7 +1298,11 @@
         iput(root);
         return -ENOMEM;
     }
+#ifdef HAVE_D_SET_D_OP
+    d_set_d_op(root_dentry, &pvfs2_dentry_operations);
+#else
     root_dentry->d_op = &pvfs2_dentry_operations;
+#endif
 
     sb->s_export_op = &pvfs2_export_ops;
     sb->s_root = root_dentry;
Index: src/kernel/linux-2.6/pvfs2-utils.c
===================================================================
--- src/kernel/linux-2.6/pvfs2-utils.c	(revision 9360)
+++ src/kernel/linux-2.6/pvfs2-utils.c	(working copy)
@@ -1251,7 +1251,11 @@
                     "dentry %p for %s\n", dentry,
                     dentry->d_name.name);
 
+#ifdef HAVE_D_SET_D_OP
+        d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
         dentry->d_op = &pvfs2_dentry_operations;
+#endif
         d_instantiate(dentry, inode);
         gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Regular File) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
@@ -1338,7 +1342,11 @@
                     "dentry %p for %s\n", dentry,
                     dentry->d_name.name);
 
+#ifdef HAVE_D_SET_D_OP
+        d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
         dentry->d_op = &pvfs2_dentry_operations;
+#endif
         d_instantiate(dentry, inode);
         gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Directory) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
@@ -1434,7 +1442,11 @@
                     "*negative* dentry %p for %s\n", dentry,
                     dentry->d_name.name);
 
+#ifdef HAVE_D_SET_D_OP
+        d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
         dentry->d_op = &pvfs2_dentry_operations;
+#endif
         d_instantiate(dentry, inode);
         gossip_debug(GOSSIP_UTILS_DEBUG, "Inode (Symlink) %llu -> %s\n",
                 llu(get_handle_from_ino(inode)), dentry->d_name.name);
Index: src/kernel/linux-2.6/namei.c
===================================================================
--- src/kernel/linux-2.6/namei.c	(revision 9360)
+++ src/kernel/linux-2.6/namei.c	(working copy)
@@ -185,7 +185,11 @@
              * potential future lookup of this cached negative dentry can
              * be properly revalidated.
              */
+#ifdef HAVE_D_SET_D_OP
+            d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
             dentry->d_op = &pvfs2_dentry_operations;
+#endif
             d_add(dentry, inode);
 
             op_release(new_op);
@@ -206,14 +210,22 @@
             __FILE__, __func__, __LINE__, inode->i_ino, (int)atomic_read(&inode->i_count));
 
         /* update dentry/inode pair into dcache */
+#ifdef HAVE_D_SET_D_OP
+        d_set_d_op(dentry, &pvfs2_dentry_operations);
+#else
         dentry->d_op = &pvfs2_dentry_operations;
+#endif
 
         res = pvfs2_d_splice_alias(dentry, inode);
 
         gossip_debug(GOSSIP_NAME_DEBUG, "Lookup success (inode ct = %d)\n",
                      (int)atomic_read(&inode->i_count));
         if (res)
+#ifdef HAVE_D_SET_D_OP
+            d_set_d_op(res, &pvfs2_dentry_operations);
+#else
             res->d_op = &pvfs2_dentry_operations;
+#endif
 
         op_release(new_op);
 #ifdef PVFS2_LINUX_KERNEL_2_4
Index: maint/config/kernel.m4
===================================================================
--- maint/config/kernel.m4	(revision 9360)
+++ maint/config/kernel.m4	(working copy)
@@ -172,6 +172,22 @@
 		AC_DEFINE(HAVE_IGET5_LOCKED, 1, Define if kernel has iget5_locked),
 	)
 
+        AC_MSG_CHECKING(for d_set_d_op function in kernel)
+        dnl if this test passes, the kernel does not have it
+        dnl if this test fails, the kernel already defined it
+        AC_TRY_COMPILE([
+                #define __KERNEL__
+                #include <linux/fs.h>
+                loff_t d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
+                {
+                        return 0;
+                }
+        ], [],
+                AC_MSG_RESULT(no),
+                AC_MSG_RESULT(yes)
+                AC_DEFINE(HAVE_D_SET_D_OP, 1, Define if kernel has d_set_d_op),
+        )
+
 	dnl Check if the kernel defines the xtvec structure.
 	dnl This is part of a POSIX extension.
 	AC_MSG_CHECKING(for struct xtvec in kernel)
