Commit 448678a0 authored by Jan Blunck's avatar Jan Blunck Committed by Linus Torvalds
Browse files

d_path: Make get_dcookie() use a struct path argument



get_dcookie() is always called with a dentry and a vfsmount from a struct
path.  Make get_dcookie() take it directly as an argument.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: default avatarJan Blunck <jblunck@suse.de>
Acked-by: default avatarChristoph Hellwig <hch@infradead.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3dcd25f3
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -198,14 +198,13 @@ out:
 * dcookie user still being registered (namely, the reader
 * of the event buffer).
 */
static inline unsigned long fast_get_dcookie(struct dentry *dentry,
					     struct vfsmount *vfsmnt)
static inline unsigned long fast_get_dcookie(struct path *path)
{
	unsigned long cookie;

	if (dentry->d_cookie)
		return (unsigned long)dentry;
	get_dcookie(dentry, vfsmnt, &cookie);
	if (path->dentry->d_cookie)
		return (unsigned long)path->dentry;
	get_dcookie(path, &cookie);
	return cookie;
}

@@ -240,8 +239,7 @@ get_exec_dcookie_and_offset(struct spu *spu, unsigned int *offsetp,
			continue;
		if (!(vma->vm_flags & VM_EXECUTABLE))
			continue;
		app_cookie = fast_get_dcookie(vma->vm_file->f_dentry,
					  vma->vm_file->f_vfsmnt);
		app_cookie = fast_get_dcookie(&vma->vm_file->f_path);
		pr_debug("got dcookie for %s\n",
			 vma->vm_file->f_dentry->d_name.name);
		app = vma->vm_file;
@@ -262,8 +260,7 @@ get_exec_dcookie_and_offset(struct spu *spu, unsigned int *offsetp,
		break;
	}

	*spu_bin_dcookie = fast_get_dcookie(vma->vm_file->f_dentry,
						 vma->vm_file->f_vfsmnt);
	*spu_bin_dcookie = fast_get_dcookie(&vma->vm_file->f_path);
	pr_debug("got dcookie for %s\n", vma->vm_file->f_dentry->d_name.name);

	up_read(&mm->mmap_sem);
+9 −12
Original line number Diff line number Diff line
@@ -192,14 +192,13 @@ void sync_stop(void)
 * because we cannot reach this code without at least one
 * dcookie user still being registered (namely, the reader
 * of the event buffer). */
static inline unsigned long fast_get_dcookie(struct dentry * dentry,
	struct vfsmount * vfsmnt)
static inline unsigned long fast_get_dcookie(struct path *path)
{
	unsigned long cookie;

	if (dentry->d_cookie)
		return (unsigned long)dentry;
	get_dcookie(dentry, vfsmnt, &cookie);
	if (path->dentry->d_cookie)
		return (unsigned long)path->dentry;
	get_dcookie(path, &cookie);
	return cookie;
}

@@ -222,8 +221,7 @@ static unsigned long get_exec_dcookie(struct mm_struct * mm)
			continue;
		if (!(vma->vm_flags & VM_EXECUTABLE))
			continue;
		cookie = fast_get_dcookie(vma->vm_file->f_path.dentry,
			vma->vm_file->f_path.mnt);
		cookie = fast_get_dcookie(&vma->vm_file->f_path);
		break;
	}

@@ -248,8 +246,7 @@ static unsigned long lookup_dcookie(struct mm_struct * mm, unsigned long addr, o
			continue;

		if (vma->vm_file) {
			cookie = fast_get_dcookie(vma->vm_file->f_path.dentry,
				vma->vm_file->f_path.mnt);
			cookie = fast_get_dcookie(&vma->vm_file->f_path);
			*offset = (vma->vm_pgoff << PAGE_SHIFT) + addr -
				vma->vm_start;
		} else {
+15 −19
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <linux/errno.h>
#include <linux/dcookies.h>
#include <linux/mutex.h>
#include <linux/path.h>
#include <asm/uaccess.h>

/* The dcookies are allocated from a kmem_cache and
@@ -31,8 +32,7 @@
 * code here is particularly performance critical
 */
struct dcookie_struct {
	struct dentry * dentry;
	struct vfsmount * vfsmnt;
	struct path path;
	struct list_head hash_list;
};

@@ -51,7 +51,7 @@ static inline int is_live(void)
/* The dentry is locked, its address will do for the cookie */
static inline unsigned long dcookie_value(struct dcookie_struct * dcs)
{
	return (unsigned long)dcs->dentry;
	return (unsigned long)dcs->path.dentry;
}


@@ -89,19 +89,17 @@ static void hash_dcookie(struct dcookie_struct * dcs)
}


static struct dcookie_struct * alloc_dcookie(struct dentry * dentry,
	struct vfsmount * vfsmnt)
static struct dcookie_struct *alloc_dcookie(struct path *path)
{
	struct dcookie_struct * dcs = kmem_cache_alloc(dcookie_cache, GFP_KERNEL);
	struct dcookie_struct *dcs = kmem_cache_alloc(dcookie_cache,
							GFP_KERNEL);
	if (!dcs)
		return NULL;

	dentry->d_cookie = dcs;

	dcs->dentry = dget(dentry);
	dcs->vfsmnt = mntget(vfsmnt);
	path->dentry->d_cookie = dcs;
	dcs->path = *path;
	path_get(path);
	hash_dcookie(dcs);

	return dcs;
}

@@ -109,8 +107,7 @@ static struct dcookie_struct * alloc_dcookie(struct dentry * dentry,
/* This is the main kernel-side routine that retrieves the cookie
 * value for a dentry/vfsmnt pair.
 */
int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
	unsigned long * cookie)
int get_dcookie(struct path *path, unsigned long *cookie)
{
	int err = 0;
	struct dcookie_struct * dcs;
@@ -122,10 +119,10 @@ int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
		goto out;
	}

	dcs = dentry->d_cookie;
	dcs = path->dentry->d_cookie;

	if (!dcs)
		dcs = alloc_dcookie(dentry, vfsmnt);
		dcs = alloc_dcookie(path);

	if (!dcs) {
		err = -ENOMEM;
@@ -174,7 +171,7 @@ asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len)
		goto out;

	/* FIXME: (deleted) ? */
	path = d_path(dcs->dentry, dcs->vfsmnt, kbuf, PAGE_SIZE);
	path = d_path(dcs->path.dentry, dcs->path.mnt, kbuf, PAGE_SIZE);

	if (IS_ERR(path)) {
		err = PTR_ERR(path);
@@ -254,9 +251,8 @@ out_kmem:

static void free_dcookie(struct dcookie_struct * dcs)
{
	dcs->dentry->d_cookie = NULL;
	dput(dcs->dentry);
	mntput(dcs->vfsmnt);
	dcs->path.dentry->d_cookie = NULL;
	path_put(&dcs->path);
	kmem_cache_free(dcookie_cache, dcs);
}

+7 −8
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#ifdef CONFIG_PROFILING
 
#include <linux/dcache.h>
#include <linux/path.h>
#include <linux/types.h>
 
struct dcookie_user;
@@ -43,8 +44,7 @@ void dcookie_unregister(struct dcookie_user * user);
 *
 * Returns 0 on success, with *cookie filled in
 */
int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
	unsigned long * cookie);
int get_dcookie(struct path *path, unsigned long *cookie);

#else

@@ -58,8 +58,7 @@ static inline void dcookie_unregister(struct dcookie_user * user)
	return;
}

static inline int get_dcookie(struct dentry * dentry,
	struct vfsmount * vfsmnt, unsigned long * cookie)
static inline int get_dcookie(struct path *path, unsigned long *cookie)
{
	return -ENOSYS;
}