lkml.org 
[lkml]   [2012]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Re: About function __create_file in debugfs
    On 2012-09-08 23:25 gregkh <gregkh@linuxfoundation.org> Wrote:
    >On Sat, Sep 08, 2012 at 05:41:05PM +0800, Jianpeng Ma wrote:
    >> Hi:
    >> At present,i used blktrace to trace block io.But i always met error, the message like:
    >> >BLKTRACESETUP(2) /dev/sdc failed: 2/No such file or directory
    >> >Thread 0 failed open /sys/kernel/debug/block/(null)/trace0: 2/No such file or directory
    >> >Thread 2 failed open /sys/kernel/debug/block/(null)/trace2: 2/No such file or directory
    >> >Thread 3 failed open /sys/kernel/debug/block/(null)/trace3: 2/No such file or directory
    >>
    >> >Thread 1 failed open /sys/kernel/debug/block/(null)/trace1: 2/No such file or directory
    >> >FAILED to start thread on CPU 0: 1/Operation not permitted
    >> >FAILED to start thread on CPU 1: 1/Operation not permitted
    >> >FAILED to start thread on CPU 2: 1/Operation not permitted
    >> >FAILED to start thread on CPU 3: 1/Operation not permitted
    >>
    >> But those isn't important. I add some message in kernel and found the reason is inode already existed.
    >> But the function __create_file dosen't return correctly errno.So blktrace tool can't print correctly message.
    >> I think func __create_file should return correctly message(ERR_PTR(error)) not NULL.
    >
    >Patches are always welcome :)
    >
    >greg k-h

    Thanks, the patch is:
    Func debugfs_create_symlink/debugfs_create_file/debugfs_create_dir,
    it only return NULL when error counted. We should correctly error info
    instead of.

    Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
    ---
    fs/debugfs/inode.c | 10 ++++++----
    1 file changed, 6 insertions(+), 4 deletions(-)

    diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
    index 4733eab..1e94350 100644
    --- a/fs/debugfs/inode.c
    +++ b/fs/debugfs/inode.c
    @@ -302,8 +302,10 @@ struct dentry *__create_file(const char *name, umode_t mode,

    error = simple_pin_fs(&debug_fs_type, &debugfs_mount,
    &debugfs_mount_count);
    - if (error)
    + if (error) {
    + dentry = ERR_PTR(error);
    goto exit;
    + }

    /* If the parent is not specified, we create it in the root.
    * We need the root dentry to do this, which is in the super
    @@ -337,7 +339,7 @@ struct dentry *__create_file(const char *name, umode_t mode,
    mutex_unlock(&parent->d_inode->i_mutex);

    if (error) {
    - dentry = NULL;
    + dentry = ERR_PTR(error);
    simple_release_fs(&debugfs_mount, &debugfs_mount_count);
    }
    exit:
    @@ -442,10 +444,10 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,

    link = kstrdup(target, GFP_KERNEL);
    if (!link)
    - return NULL;
    + return ERR_PTR(-ENOMEM);

    result = __create_file(name, S_IFLNK | S_IRWXUGO, parent, link, NULL);
    - if (!result)
    + if (IS_ERR_OR_NULL(result))
    kfree(link);
    return result;
    }
    --
    1.7.9.5

    But i searched kernel-code and found at-least 100 places used those code.
    How about those code? Am i correct those or not?
    Thanks!
    \
     
     \ /
      Last update: 2012-09-10 14:21    [W:0.039 / U:30.740 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site