lkml.org 
[lkml]   [2010]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 1/7] cachefiles: use path_get instead of lone dget
Dentry references should not be acquired without a corresponding
vfsmount ref.

CC: David Howells <dhowells@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
---
fs/cachefiles/daemon.c | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)

Index: linux-2.6/fs/cachefiles/daemon.c
===================================================================
--- linux-2.6.orig/fs/cachefiles/daemon.c 2010-07-05 15:44:37.000000000 +0200
+++ linux-2.6/fs/cachefiles/daemon.c 2010-07-05 15:47:40.000000000 +0200
@@ -553,7 +553,7 @@ static int cachefiles_daemon_tag(struct
static int cachefiles_daemon_cull(struct cachefiles_cache *cache, char *args)
{
struct fs_struct *fs;
- struct dentry *dir;
+ struct path path;
const struct cred *saved_cred;
int ret;

@@ -575,22 +575,23 @@ static int cachefiles_daemon_cull(struct
/* extract the directory dentry from the cwd */
fs = current->fs;
read_lock(&fs->lock);
- dir = dget(fs->pwd.dentry);
+ path = fs->pwd;
+ path_get(&path);
read_unlock(&fs->lock);

- if (!S_ISDIR(dir->d_inode->i_mode))
+ if (!S_ISDIR(path.dentry->d_inode->i_mode))
goto notdir;

cachefiles_begin_secure(cache, &saved_cred);
- ret = cachefiles_cull(cache, dir, args);
+ ret = cachefiles_cull(cache, path.dentry, args);
cachefiles_end_secure(cache, saved_cred);

- dput(dir);
+ path_put(&path);
_leave(" = %d", ret);
return ret;

notdir:
- dput(dir);
+ path_put(&path);
kerror("cull command requires dirfd to be a directory");
return -ENOTDIR;

@@ -629,7 +630,7 @@ inval:
static int cachefiles_daemon_inuse(struct cachefiles_cache *cache, char *args)
{
struct fs_struct *fs;
- struct dentry *dir;
+ struct path path;
const struct cred *saved_cred;
int ret;

@@ -651,22 +652,23 @@ static int cachefiles_daemon_inuse(struc
/* extract the directory dentry from the cwd */
fs = current->fs;
read_lock(&fs->lock);
- dir = dget(fs->pwd.dentry);
+ path = fs->pwd;
+ path_get(&path);
read_unlock(&fs->lock);

- if (!S_ISDIR(dir->d_inode->i_mode))
+ if (!S_ISDIR(path.dentry->d_inode->i_mode))
goto notdir;

cachefiles_begin_secure(cache, &saved_cred);
- ret = cachefiles_check_in_use(cache, dir, args);
+ ret = cachefiles_check_in_use(cache, path.dentry, args);
cachefiles_end_secure(cache, saved_cred);

- dput(dir);
+ path_put(&path);
//_leave(" = %d", ret);
return ret;

notdir:
- dput(dir);
+ path_put(&path);
kerror("inuse command requires dirfd to be a directory");
return -ENOTDIR;

--


\
 
 \ /
  Last update: 2010-07-06 19:45    [W:0.035 / U:0.188 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site