Linux 3.19: struct nameidata becomes opaque

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>
This commit is contained in:
Marc Dionne 2015-01-05 07:17:14 -05:00 committed by Jeffrey Altman
parent ec9a7c2db8
commit 72e22eb00f
2 changed files with 10 additions and 10 deletions

View File

@ -493,24 +493,24 @@ afs_get_dentry_ref(struct nameidata *nd, struct vfsmount **mnt, struct dentry **
#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(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
}
/* wait_event_freezable appeared with 2.6.24 */

View File

@ -278,9 +278,9 @@ AC_DEFUN([LINUX_IOP_I_PUT_LINK_TAKES_COOKIE], [
#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],
[])