lkml.org 
[lkml]   [2014]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 36/79] dm thin: initialize dm_thin_new_mapping returned by get_next_mapping
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

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

    From: Mike Snitzer <snitzer@redhat.com>

    commit 16961b042db8cc5cf75d782b4255193ad56e1d4f upstream.

    As additional members are added to the dm_thin_new_mapping structure
    care should be taken to make sure they get initialized before use.

    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Acked-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/dm-thin.c | 17 ++++++-----------
    1 file changed, 6 insertions(+), 11 deletions(-)

    --- a/drivers/md/dm-thin.c
    +++ b/drivers/md/dm-thin.c
    @@ -760,13 +760,17 @@ static int ensure_next_mapping(struct po

    static struct dm_thin_new_mapping *get_next_mapping(struct pool *pool)
    {
    - struct dm_thin_new_mapping *r = pool->next_mapping;
    + struct dm_thin_new_mapping *m = pool->next_mapping;

    BUG_ON(!pool->next_mapping);

    + memset(m, 0, sizeof(struct dm_thin_new_mapping));
    + INIT_LIST_HEAD(&m->list);
    + m->bio = NULL;
    +
    pool->next_mapping = NULL;

    - return r;
    + return m;
    }

    static void schedule_copy(struct thin_c *tc, dm_block_t virt_block,
    @@ -778,15 +782,10 @@ static void schedule_copy(struct thin_c
    struct pool *pool = tc->pool;
    struct dm_thin_new_mapping *m = get_next_mapping(pool);

    - INIT_LIST_HEAD(&m->list);
    - m->quiesced = 0;
    - m->prepared = 0;
    m->tc = tc;
    m->virt_block = virt_block;
    m->data_block = data_dest;
    m->cell = cell;
    - m->err = 0;
    - m->bio = NULL;

    if (!dm_deferred_set_add_work(pool->shared_read_ds, &m->list))
    m->quiesced = 1;
    @@ -849,15 +848,12 @@ static void schedule_zero(struct thin_c
    struct pool *pool = tc->pool;
    struct dm_thin_new_mapping *m = get_next_mapping(pool);

    - INIT_LIST_HEAD(&m->list);
    m->quiesced = 1;
    m->prepared = 0;
    m->tc = tc;
    m->virt_block = virt_block;
    m->data_block = data_block;
    m->cell = cell;
    - m->err = 0;
    - m->bio = NULL;

    /*
    * If the whole block of data is being overwritten or we are not
    @@ -1047,7 +1043,6 @@ static void process_discard(struct thin_
    m->data_block = lookup_result.block;
    m->cell = cell;
    m->cell2 = cell2;
    - m->err = 0;
    m->bio = bio;

    if (!dm_deferred_set_add_work(pool->all_io_ds, &m->list)) {



    \
     
     \ /
      Last update: 2014-02-11 21:01    [W:4.020 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site