starting with kernel 3.6, d_revalidate takes an unsigned int "flags" as the second argument, not a nameidata pointer! see fs/namei.c for implementation diff -Naur vmblock-only/linux/dentry.c vmblock-only/linux/dentry.c --- vmblock-only/linux/dentry.c 2013-11-05 23:33:26.000000000 -0500 +++ vmblock-only/linux/dentry.c 2014-04-26 10:58:03.062635343 -0400 @@ -32,7 +32,7 @@ #include "block.h" -static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd); +static int DentryOpRevalidate(struct dentry *dentry, unsigned int flags); struct dentry_operations LinkDentryOps = { .d_revalidate = DentryOpRevalidate, @@ -60,7 +60,7 @@ static int DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating - struct nameidata *nd) // IN: lookup flags & intent + unsigned int flags) // IN: lookup flags & intent { VMBlockInodeInfo *iinfo; struct nameidata actualNd; @@ -101,7 +101,7 @@ if (actualDentry && actualDentry->d_op && actualDentry->d_op->d_revalidate) { - return actualDentry->d_op->d_revalidate(actualDentry, nd); + return actualDentry->d_op->d_revalidate(actualDentry, flags); } if (compat_path_lookup(iinfo->name, 0, &actualNd)) {