lkml.org 
[lkml]   [2008]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 04/15] sysfs: Implement __sysfs_get_dentry

    This function is similar but much simpler to sysfs_get_dentry
    returns a sysfs dentry if one curently exists.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: Benjamin Thery <benjamin.thery@bull.net>
    Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    ---
    fs/sysfs/dir.c | 39 +++++++++++++++++++++++++++++++++++++++
    1 files changed, 39 insertions(+), 0 deletions(-)

    diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    index 69c40ed..df9934a 100644
    --- a/fs/sysfs/dir.c
    +++ b/fs/sysfs/dir.c
    @@ -764,6 +764,45 @@ void sysfs_remove_dir(struct kobject * kobj)
    __sysfs_remove_dir(sd);
    }

    +/**
    + * __sysfs_get_dentry - get dentry for the given sysfs_dirent
    + * @sb: superblock of the dentry to return
    + * @sd: sysfs_dirent of interest
    + *
    + * Get dentry for @sd. Only return a dentry if one currently
    + * exists.
    + *
    + * LOCKING:
    + * Kernel thread context (may sleep)
    + *
    + * RETURNS:
    + * Pointer to found dentry on success, NULL on failure.
    + */
    +static struct dentry *__sysfs_get_dentry(struct super_block *sb,
    + struct sysfs_dirent *sd)
    +{
    + struct inode *inode;
    + struct dentry *dentry = NULL;
    +
    + inode = ilookup5_nowait(sysfs_sb, sd->s_ino, sysfs_ilookup_test, sd);
    + if (inode && !(inode->i_state & I_NEW)) {
    + struct dentry *alias;
    + spin_lock(&dcache_lock);
    + list_for_each_entry(alias, &inode->i_dentry, d_alias) {
    + if (!IS_ROOT(alias) && d_unhashed(alias))
    + continue;
    + if (alias->d_sb != sb)
    + continue;
    + dentry = alias;
    + dget_locked(dentry);
    + break;
    + }
    + spin_unlock(&dcache_lock);
    + }
    + iput(inode);
    + return dentry;
    +}
    +
    int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
    {
    struct sysfs_dirent *sd = kobj->sd;
    --
    1.5.3.rc6.17.g1911


    \
     
     \ /
      Last update: 2008-07-04 03:15    [W:5.887 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site