lkml.org 
[lkml]   [2012]   [Jun]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/7] pstore/ram_core: Proper checking for post_init errors (e.g. improper ECC size)
    Date
    We will implement variable-sized ECC buffers soon, so post_init routine
    might fail much more likely, so we'd better check for its errors.

    To make error handling simple, modify persistent_ram_free() to it be safe
    at all times.

    Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
    ---
    fs/pstore/ram_core.c | 22 +++++++++++++++-------
    1 file changed, 15 insertions(+), 7 deletions(-)

    diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
    index 2653185..f62ebf2 100644
    --- a/fs/pstore/ram_core.c
    +++ b/fs/pstore/ram_core.c
    @@ -427,11 +427,17 @@ static int __devinit persistent_ram_post_init(struct persistent_ram_zone *prz,

    void persistent_ram_free(struct persistent_ram_zone *prz)
    {
    - if (pfn_valid(prz->paddr >> PAGE_SHIFT)) {
    - vunmap(prz->vaddr);
    - } else {
    - iounmap(prz->vaddr);
    - release_mem_region(prz->paddr, prz->size);
    + if (!prz)
    + return;
    +
    + if (prz->vaddr) {
    + if (pfn_valid(prz->paddr >> PAGE_SHIFT)) {
    + vunmap(prz->vaddr);
    + } else {
    + iounmap(prz->vaddr);
    + release_mem_region(prz->paddr, prz->size);
    + }
    + prz->vaddr = NULL;
    }
    persistent_ram_free_old(prz);
    kfree(prz);
    @@ -454,10 +460,12 @@ struct persistent_ram_zone * __devinit persistent_ram_new(phys_addr_t start,
    if (ret)
    goto err;

    - persistent_ram_post_init(prz, ecc);
    + ret = persistent_ram_post_init(prz, ecc);
    + if (ret)
    + goto err;

    return prz;
    err:
    - kfree(prz);
    + persistent_ram_free(prz);
    return ERR_PTR(ret);
    }
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2012-06-19 05:01    [W:0.022 / U:1.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site