lkml.org 
[lkml]   [2010]   [Aug]   [10]   [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
    From: Miklos Szeredi <mszeredi@suse.cz>

    Dentry references should not be acquired without a corresponding
    vfsmount ref.

    Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
    Acked-by: David Howells <dhowells@redhat.com>
    ---
    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-08-10 11:47    [W:0.027 / U:1.644 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site