lkml.org 
[lkml]   [2009]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 20/24] sysfs: Normalize error handling in sysfs_fill_inode
    From: Eric W. Biederman <ebiederm@xmission.com>

    Use a single error exit path instead of doing whatever
    is the required cleanup at each point we find the error.
    Ultimately this should make the code more maintainable.

    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
    ---
    fs/sysfs/mount.c | 16 +++++++++++-----
    1 files changed, 11 insertions(+), 5 deletions(-)

    diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c
    index 0cb1088..1dd023a 100644
    --- a/fs/sysfs/mount.c
    +++ b/fs/sysfs/mount.c
    @@ -41,8 +41,9 @@ struct sysfs_dirent sysfs_root = {

    static int sysfs_fill_super(struct super_block *sb, void *data, int silent)
    {
    - struct inode *inode;
    - struct dentry *root;
    + struct inode *inode = NULL;
    + struct dentry *root = NULL;
    + int error;

    sb->s_blocksize = PAGE_CACHE_SIZE;
    sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
    @@ -51,24 +52,29 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent)
    sb->s_time_gran = 1;

    /* get root inode, initialize and unlock it */
    + error = -ENOMEM;
    mutex_lock(&sysfs_mutex);
    inode = sysfs_get_inode(sb, &sysfs_root);
    mutex_unlock(&sysfs_mutex);
    if (!inode) {
    pr_debug("sysfs: could not get root inode\n");
    - return -ENOMEM;
    + goto err_out;
    }

    /* instantiate and link root dentry */
    + error = -ENOMEM;
    root = d_alloc_root(inode);
    if (!root) {
    pr_debug("%s: could not get root dentry!\n",__func__);
    - iput(inode);
    - return -ENOMEM;
    + goto err_out;
    }
    root->d_fsdata = &sysfs_root;
    sb->s_root = root;
    return 0;
    +err_out:
    + dput(root);
    + iput(inode);
    + return error;
    }

    static int sysfs_get_sb(struct file_system_type *fs_type,
    --
    1.6.3.1.54.g99dd.dirty


    \
     
     \ /
      Last update: 2009-05-29 01:07    [W:0.049 / U:0.908 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site