lkml.org 
[lkml]   [2016]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.3 189/200] FS-Cache: Dont override netfss primary_index if registering failed
    Date
    4.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Kinglong Mee <kinglongmee@gmail.com>

    commit b130ed5998e62879a66bad08931a2b5e832da95c upstream.

    Only override netfs->primary_index when registering success.

    Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/fscache/netfs.c | 37 ++++++++++++++++++-------------------
    1 file changed, 18 insertions(+), 19 deletions(-)

    --- a/fs/fscache/netfs.c
    +++ b/fs/fscache/netfs.c
    @@ -22,6 +22,7 @@ static LIST_HEAD(fscache_netfs_list);
    int __fscache_register_netfs(struct fscache_netfs *netfs)
    {
    struct fscache_netfs *ptr;
    + struct fscache_cookie *cookie;
    int ret;

    _enter("{%s}", netfs->name);
    @@ -29,26 +30,25 @@ int __fscache_register_netfs(struct fsca
    INIT_LIST_HEAD(&netfs->link);

    /* allocate a cookie for the primary index */
    - netfs->primary_index =
    - kmem_cache_zalloc(fscache_cookie_jar, GFP_KERNEL);
    + cookie = kmem_cache_zalloc(fscache_cookie_jar, GFP_KERNEL);

    - if (!netfs->primary_index) {
    + if (!cookie) {
    _leave(" = -ENOMEM");
    return -ENOMEM;
    }

    /* initialise the primary index cookie */
    - atomic_set(&netfs->primary_index->usage, 1);
    - atomic_set(&netfs->primary_index->n_children, 0);
    - atomic_set(&netfs->primary_index->n_active, 1);
    -
    - netfs->primary_index->def = &fscache_fsdef_netfs_def;
    - netfs->primary_index->parent = &fscache_fsdef_index;
    - netfs->primary_index->netfs_data = netfs;
    - netfs->primary_index->flags = 1 << FSCACHE_COOKIE_ENABLED;
    + atomic_set(&cookie->usage, 1);
    + atomic_set(&cookie->n_children, 0);
    + atomic_set(&cookie->n_active, 1);
    +
    + cookie->def = &fscache_fsdef_netfs_def;
    + cookie->parent = &fscache_fsdef_index;
    + cookie->netfs_data = netfs;
    + cookie->flags = 1 << FSCACHE_COOKIE_ENABLED;

    - spin_lock_init(&netfs->primary_index->lock);
    - INIT_HLIST_HEAD(&netfs->primary_index->backing_objects);
    + spin_lock_init(&cookie->lock);
    + INIT_HLIST_HEAD(&cookie->backing_objects);

    /* check the netfs type is not already present */
    down_write(&fscache_addremove_sem);
    @@ -59,9 +59,10 @@ int __fscache_register_netfs(struct fsca
    goto already_registered;
    }

    - atomic_inc(&netfs->primary_index->parent->usage);
    - atomic_inc(&netfs->primary_index->parent->n_children);
    + atomic_inc(&cookie->parent->usage);
    + atomic_inc(&cookie->parent->n_children);

    + netfs->primary_index = cookie;
    list_add(&netfs->link, &fscache_netfs_list);
    ret = 0;

    @@ -70,10 +71,8 @@ int __fscache_register_netfs(struct fsca
    already_registered:
    up_write(&fscache_addremove_sem);

    - if (ret < 0) {
    - kmem_cache_free(fscache_cookie_jar, netfs->primary_index);
    - netfs->primary_index = NULL;
    - }
    + if (ret < 0)
    + kmem_cache_free(fscache_cookie_jar, cookie);

    _leave(" = %d", ret);
    return ret;

    \
     
     \ /
      Last update: 2016-02-15 00:41    [W:4.220 / U:0.708 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site