With kernel 3.19 struct nameidata becomes opaque. As a result
we cannot rely on STRUCT_NAMEIDATA_HAS_PATH being true for
new kernels.
Rework the conditions here so that STRUCT_NAMEIDATA_HAS_PATH
is only tested when we're using a nameidata structure and
the result matters.
Also modify a configure test to use a nameidata pointer
instead of an actual structure.
Change-Id: I0d71fca44a67570ac3b86151c70f2969dc463f4f
Reviewed-on: http://gerrit.openafs.org/11648
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
#else
afs_get_dentry_ref(afs_linux_path_t *path, struct vfsmount **mnt, struct dentry **dpp) {
#endif
-#if defined(STRUCT_NAMEIDATA_HAS_PATH)
-# if defined(HAVE_LINUX_PATH_LOOKUP)
+#if defined(HAVE_LINUX_PATH_LOOKUP)
+# if defined(STRUCT_NAMEIDATA_HAS_PATH)
*dpp = dget(nd->path.dentry);
if (mnt)
*mnt = mntget(nd->path.mnt);
path_put(&nd->path);
# else
- *dpp = dget(path->dentry);
- if (mnt)
- *mnt = mntget(path->mnt);
- path_put(path);
-# endif
-#else
*dpp = dget(nd->dentry);
if (mnt)
*mnt = mntget(nd->mnt);
path_release(nd);
+# endif
+#else
+ *dpp = dget(path->dentry);
+ if (mnt)
+ *mnt = mntget(path->mnt);
+ path_put(path);
#endif
}
#include <linux/namei.h>],
[struct inode _inode;
struct dentry _dentry;
-struct nameidata _nameidata;
+struct nameidata *_nameidata;
void *cookie;
-(void)_inode.i_op->put_link(&_dentry, &_nameidata, cookie);],
+(void)_inode.i_op->put_link(&_dentry, _nameidata, cookie);],
[IOP_PUT_LINK_TAKES_COOKIE],
[define if your iops.put_link takes a cookie],
[])