diff -Nur vmblock-only.orig/include/compat_fs.h vmblock-only/include/compat_fs.h
--- vmblock-only.orig/include/compat_fs.h	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/include/compat_fs.h	2008-05-14 09:39:21.000000000 +0200
@@ -104,6 +104,17 @@
 
 
 /*
+ * iget() was removed from the VFS as of 2.6.25-rc1. The replacement for iget()
+ * is iget_locked() which was added in 2.5.17.
+ *
+ * Backported from open-vm-tools 
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-05-14
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 17)
+# define VMW_USE_IGET_LOCKED
+#endif
+
+/*
  * parent_ino was born in 2.5.5. For older kernels, let's use 2.5.5
  * implementation. It uses the dcache lock which is OK because per-dentry
  * locking appeared after 2.5.5.
diff -Nur vmblock-only.orig/include/compat_namei.h vmblock-only/include/compat_namei.h
--- vmblock-only.orig/include/compat_namei.h	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/include/compat_namei.h	2008-05-14 09:19:27.000000000 +0200
@@ -23,6 +23,30 @@
 #include <linux/namei.h>
 #endif
 
+/*
+ * In 2.6.25-rc2, dentry and mount objects were removed from the nameidata
+ * struct. They were both replaced with a struct path.
+ *
+ * Backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-04-27
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)
+#define compat_vmw_nd_to_dentry(nd) (nd).path.dentry
+#else
+#define compat_vmw_nd_to_dentry(nd) (nd).dentry
+#endif
+
+/* In 2.6.25-rc2, path_release(&nd) was replaced with path_put(&nd.path).
+ *
+ * Backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-04-27
+ * */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)
+#define compat_path_release(nd) path_put(&(nd)->path)
+#else
+#define compat_path_release(nd) path_release(nd)
+#endif
+
 /* path_lookup was exported in 2.4.25 */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25)
 #define compat_path_lookup(path, flags, nd)     path_lookup(path, flags, nd)
diff -Nur vmblock-only.orig/include/compat_slab.h vmblock-only/include/compat_slab.h
--- vmblock-only.orig/include/compat_slab.h	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/include/compat_slab.h	2008-05-14 09:19:44.000000000 +0200
@@ -50,4 +50,21 @@
 		kmem_cache_create(name, size, align, flags, ctor)
 #endif
 
+/*
+ * Up to 2.6.23 kmem_cache constructor has three arguments - pointer to block to
+ * prepare (aka "this"), from which cache it came, and some unused flags.  After
+ * 2.6.23 flags were removed, and order of "this" and cache parameters was swapped...
+ *
+ * Backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-04-27
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) && !defined(VMW_KMEMCR_CTOR_HAS_3_ARGS)
+#  define VMW_KMEMCR_CTOR_HAS_3_ARGS
+#endif
+#ifdef VMW_KMEMCR_CTOR_HAS_3_ARGS
+typedef void compat_kmem_cache_ctor(void *, compat_kmem_cache *, unsigned long);
+#else
+typedef void compat_kmem_cache_ctor(compat_kmem_cache *, void *);
+#endif
+
 #endif /* __COMPAT_SLAB_H__ */
diff -Nur vmblock-only.orig/include/driver-config.h vmblock-only/include/driver-config.h
--- vmblock-only.orig/include/driver-config.h	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/include/driver-config.h	2008-05-14 09:20:15.000000000 +0200
@@ -35,6 +35,23 @@
 #include <linux/autoconf.h>
 #include "compat_version.h"
 
+/*
+ * I still haven't figured out why the automagic checks in Makefile.kernel
+ * don't work. They call the script vm_check_build which isn't available
+ * on any of my systems so `make` is unable to find out whether this features
+ * need to be included or not.
+ *
+ * A simple workaround is to rely on the kernel configuration as shown below.
+ * If CONFIG_EPOLL is set, we have EPOLL set, basta.
+ *
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-03-14
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#ifdef CONFIG_EPOLL
+#define VMW_HAVE_EPOLL 1
+#endif
+#endif
+
 /* We rely on Kernel Module support.  Check here. */
 #ifndef CONFIG_MODULES
 #error "No Module support in this kernel.  Please configure with CONFIG_MODULES"
@@ -59,6 +76,18 @@
 #endif
 #endif
 
+/*
+ * Force the uintptr_t definition to come from linux/types.h instead of
+ * vm_basic_types.h
+ *
+ * Backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-04-27
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#   include <linux/types.h>
+#   define _STDINT_H 1
+#endif
+
 #ifndef __KERNEL__
 #define __KERNEL__
 #endif
diff -Nur vmblock-only.orig/linux/dentry.c vmblock-only/linux/dentry.c
--- vmblock-only.orig/linux/dentry.c	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/linux/dentry.c	2008-05-14 09:20:43.000000000 +0200
@@ -112,8 +112,8 @@
       LOG(4, "DentryOpRevalidate: [%s] no longer exists\n", iinfo->name);
       return 0;
    }
-   ret = actualNd.dentry && actualNd.dentry->d_inode;
-   path_release(&actualNd);
+   ret = compat_vmw_nd_to_dentry(actualNd) && compat_vmw_nd_to_dentry(actualNd)->d_inode;
+   compat_path_release(&actualNd);
 
    LOG(8, "DentryOpRevalidate: [%s] %s revalidated\n",
        iinfo->name, ret ? "" : "not");
diff -Nur vmblock-only.orig/linux/filesystem.c vmblock-only/linux/filesystem.c
--- vmblock-only.orig/linux/filesystem.c	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/linux/filesystem.c	2008-05-14 09:48:12.000000000 +0200
@@ -67,8 +67,7 @@
 
 
 /* Utility */
-static void InodeCacheCtor(void *slabelem,
-                           compat_kmem_cache *cache, unsigned long flags);
+static compat_kmem_cache_ctor InodeCacheCtor;
 
 
 /* Variables */
@@ -191,6 +190,39 @@
 /*
  *----------------------------------------------------------------------------
  *
+ *  VMBlockReadInode --
+ *
+ *    A filesystem wide function that is called to initialize a new inode.
+ *    This is called from two different places depending on the kernel version.
+ *    In older kernels that provide the iget() interface, this function is
+ *    called by the kernel as part of inode initialization (from
+ *    SuperOpReadInode). In newer kernels that call iget_locked(), this
+ *    function is called by filesystem code to initialize the new inode.
+ *
+ * Results:
+ *    None.
+ *
+ * Side effects:
+ *    None.
+ *
+ * Backported from open-vm-tools 
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-05-14
+ *----------------------------------------------------------------------------
+ */
+
+void
+VMBlockReadInode(struct inode *inode)  // IN: Inode to initialize
+{
+   VMBlockInodeInfo *iinfo = INODE_TO_IINFO(inode);
+
+   iinfo->name[0] = '\0';
+   iinfo->nameLen = 0;
+   iinfo->actualDentry = NULL;
+}
+
+/*
+ *----------------------------------------------------------------------------
+ *
  * GetNextIno --
  *
  *    Gets the next available inode number.
@@ -223,6 +255,51 @@
 /*
  *----------------------------------------------------------------------------
  *
+ * GetInode --
+ *
+ *    This function replaces iget() and should be called instead of it. In newer
+ *    kernels that have removed the iget() interface,  GetInode() obtains an inode
+ *    and if it is a new one, then initializes the inode by calling
+ *    VMBlockReadInode(). In older kernels that support the iget() interface,
+ *    VMBlockReadInode() is called by iget() internally by the superblock function
+ *    SuperOpReadInode.
+ *
+ * Results:
+ *    A new inode object on success, NULL on error.
+ *
+ * Side effects:
+ *    None.
+ *
+ *
+ * Backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-05-14
+ *----------------------------------------------------------------------------
+ */
+
+static struct inode *
+GetInode(struct super_block *sb, // IN: file system superblock object
+         ino_t ino)              // IN: inode number to assign to new inode
+{
+#ifdef VMW_USE_IGET_LOCKED
+   struct inode *inode;
+
+   inode = iget_locked(sb, ino);
+   if (!inode) {
+      return NULL;
+   } else if (inode->i_state & I_NEW) {
+      VMBlockReadInode(inode);
+      unlock_new_inode(inode);
+   }
+   return inode;
+#else
+   return iget(sb, ino);
+#endif
+}
+
+
+/*
+ *----------------------------------------------------------------------------
+ *
  * Iget --
  *
  *    Lookup or create a new inode.
@@ -274,7 +351,7 @@
 
    ASSERT(sb);
 
-   inode = iget(sb, ino);
+   inode = GetInode(sb, ino);
    if (!inode) {
       return NULL;
    }
@@ -302,8 +379,8 @@
       return inode;
    }
 
-   iinfo->actualDentry = actualNd.dentry;
-   path_release(&actualNd);
+   iinfo->actualDentry = compat_vmw_nd_to_dentry(actualNd);
+   compat_path_release(&actualNd);
 
    return inode;
 
@@ -334,13 +411,20 @@
  * Side effects:
  *    None.
  *
+ * CTOR_HAS_3_ARGS check on top backported from open-vm-tools
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-05-14
  *----------------------------------------------------------------------------
  */
-
+#ifdef VMW_KMEMCR_CTOR_HAS_3_ARGS
 static void
 InodeCacheCtor(void *slabElem,           // IN: allocated slab item to initialize
                compat_kmem_cache *cache, // IN: cache slab is from
                unsigned long flags)      // IN: flags associated with allocation
+#else
+static void
+InodeCacheCtor(compat_kmem_cache *cache, // IN: cache slab is from
+               void *slabElem)           // IN: allocated slab item to initialize
+#endif
 {
 #ifdef VMW_EMBED_INODE
    VMBlockInodeInfo *iinfo = (VMBlockInodeInfo *)slabElem;
diff -Nur vmblock-only.orig/linux/filesystem.h vmblock-only/linux/filesystem.h
--- vmblock-only.orig/linux/filesystem.h	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/linux/filesystem.h	2008-05-14 09:35:32.000000000 +0200
@@ -95,6 +95,7 @@
                    struct dentry *dentry, ino_t ino);
 int MakeFullName(struct inode *dir, struct dentry *dentry,
                   char *bufOut, size_t bufOutSize);
+void VMBlockReadInode(struct inode *inode);
 
 /* Variables */
 extern compat_kmem_cache *VMBlockInodeCache;
diff -Nur vmblock-only.orig/linux/super.c vmblock-only/linux/super.c
--- vmblock-only.orig/linux/super.c	2008-03-19 03:29:49.000000000 +0100
+++ vmblock-only/linux/super.c	2008-05-14 09:34:40.000000000 +0200
@@ -37,7 +37,9 @@
 #else
 static void SuperOpClearInode(struct inode *inode);
 #endif
+#ifndef VMW_USE_IGET_LOCKED
 static void SuperOpReadInode(struct inode *inode);
+#endif
 #ifdef VMW_STATFS_2618
 static int SuperOpStatfs(struct dentry *dentry, struct compat_kstatfs *stat);
 #else
@@ -52,7 +54,9 @@
 #else
    .clear_inode   = SuperOpClearInode,
 #endif
+#ifndef VMW_USE_IGET_LOCKED
    .read_inode    = SuperOpReadInode,
+#endif
    .statfs        = SuperOpStatfs,
 };
 
@@ -122,6 +126,7 @@
 }
 
 
+#ifndef VMW_USE_IGET_LOCKED
 /*
  *----------------------------------------------------------------------------
  *
@@ -141,13 +146,9 @@
 static void
 SuperOpReadInode(struct inode *inode)  // IN: Inode to initialize
 {
-   VMBlockInodeInfo *iinfo = INODE_TO_IINFO(inode);
-
-   iinfo->name[0] = '\0';
-   iinfo->nameLen = 0;
-   iinfo->actualDentry = NULL;
+   VMBlockReadInode(inode);
 }
-
+#endif
 
 /*
  *----------------------------------------------------------------------------
