lkml.org 
[lkml]   [2010]   [Aug]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/10] Some cleanups
    Date
     - xvmalloc: Remove unnecessary stat_{inc,dec} and increment
    pages_stored directly
    - xvmalloc: Initialize pointers with NULL instead of 0
    - zram: Remove verbose message when use sets insane disksize
    - zram: Mark some messages as pr_debug
    - zram: Refine some comments

    Signed-off-by: Nitin Gupta <ngupta@vflare.org>
    ---
    drivers/staging/zram/xvmalloc.c | 22 ++++-------------
    drivers/staging/zram/zram_drv.c | 49 +++++++++++++-------------------------
    drivers/staging/zram/zram_drv.h | 26 ++++----------------
    3 files changed, 28 insertions(+), 69 deletions(-)

    diff --git a/drivers/staging/zram/xvmalloc.c b/drivers/staging/zram/xvmalloc.c
    index 3fdbb8a..6268f65 100644
    --- a/drivers/staging/zram/xvmalloc.c
    +++ b/drivers/staging/zram/xvmalloc.c
    @@ -20,16 +20,6 @@
    #include "xvmalloc.h"
    #include "xvmalloc_int.h"

    -static void stat_inc(u64 *value)
    -{
    - *value = *value + 1;
    -}
    -
    -static void stat_dec(u64 *value)
    -{
    - *value = *value - 1;
    -}
    -
    static int test_flag(struct block_header *block, enum blockflags flag)
    {
    return block->prev & BIT(flag);
    @@ -187,7 +177,7 @@ static void insert_block(struct xv_pool *pool, struct page *page, u32 offset,
    slindex = get_index_for_insert(block->size);
    flindex = slindex / BITS_PER_LONG;

    - block->link.prev_page = 0;
    + block->link.prev_page = NULL;
    block->link.prev_offset = 0;
    block->link.next_page = pool->freelist[slindex].page;
    block->link.next_offset = pool->freelist[slindex].offset;
    @@ -217,7 +207,7 @@ static void remove_block_head(struct xv_pool *pool,

    pool->freelist[slindex].page = block->link.next_page;
    pool->freelist[slindex].offset = block->link.next_offset;
    - block->link.prev_page = 0;
    + block->link.prev_page = NULL;
    block->link.prev_offset = 0;

    if (!pool->freelist[slindex].page) {
    @@ -232,7 +222,7 @@ static void remove_block_head(struct xv_pool *pool,
    */
    tmpblock = get_ptr_atomic(pool->freelist[slindex].page,
    pool->freelist[slindex].offset, KM_USER1);
    - tmpblock->link.prev_page = 0;
    + tmpblock->link.prev_page = NULL;
    tmpblock->link.prev_offset = 0;
    put_ptr_atomic(tmpblock, KM_USER1);
    }
    @@ -284,7 +274,7 @@ static int grow_pool(struct xv_pool *pool, gfp_t flags)
    if (unlikely(!page))
    return -ENOMEM;

    - stat_inc(&pool->total_pages);
    + pool->total_pages++;

    spin_lock(&pool->lock);
    block = get_ptr_atomic(page, 0, KM_USER0);
    @@ -361,8 +351,6 @@ int xv_malloc(struct xv_pool *pool, u32 size, struct page **page,

    if (!*page) {
    spin_unlock(&pool->lock);
    - if (flags & GFP_NOWAIT)
    - return -ENOMEM;
    error = grow_pool(pool, flags);
    if (unlikely(error))
    return error;
    @@ -472,7 +460,7 @@ void xv_free(struct xv_pool *pool, struct page *page, u32 offset)
    spin_unlock(&pool->lock);

    __free_page(page);
    - stat_dec(&pool->total_pages);
    + pool->total_pages--;
    return;
    }

    diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
    index 0f9785f..42aa271 100644
    --- a/drivers/staging/zram/zram_drv.c
    +++ b/drivers/staging/zram/zram_drv.c
    @@ -9,7 +9,7 @@
    * Released under the terms of 3-clause BSD License
    * Released under the terms of GNU General Public License Version 2.0
    *
    - * Project home: http://compcache.googlecode.com
    + * Project home: http://compcache.googlecode.com/
    */

    #define KMSG_COMPONENT "zram"
    @@ -130,33 +130,15 @@ static void zram_insert_obj(struct zram *zram, u32 index, struct page *page,
    zram->table[index].addr = addr;
    }

    -static void zram_set_disksize(struct zram *zram, size_t totalram_bytes)
    +static u64 zram_default_disksize(void)
    {
    - if (!zram->disksize) {
    - pr_info(
    - "disk size not provided. You can use disksize_kb module "
    - "param to specify size.\nUsing default: (%u%% of RAM).\n",
    - default_disksize_perc_ram
    - );
    - zram->disksize = default_disksize_perc_ram *
    - (totalram_bytes / 100);
    - }
    + u64 disksize;

    - if (zram->disksize > 2 * (totalram_bytes)) {
    - pr_info(
    - "There is little point creating a zram of greater than "
    - "twice the size of memory since we expect a 2:1 compression "
    - "ratio. Note that zram uses about 0.1%% of the size of "
    - "the disk when not in use so a huge zram is "
    - "wasteful.\n"
    - "\tMemory Size: %zu kB\n"
    - "\tSize you selected: %llu kB\n"
    - "Continuing anyway ...\n",
    - totalram_bytes >> 10, zram->disksize
    - );
    - }
    + disksize = default_disksize_perc_ram *
    + (totalram_pages / 100);
    + disksize = (disksize << PAGE_SHIFT) & PAGE_MASK;

    - zram->disksize &= PAGE_MASK;
    + return disksize;
    }

    static void zram_free_page(struct zram *zram, size_t index)
    @@ -459,7 +441,7 @@ static int zram_make_request(struct request_queue *queue, struct bio *bio)
    int ret = 0;
    struct zram *zram = queue->queuedata;

    - if (!valid_io_request(zram, bio)) {
    + if (unlikely(!valid_io_request(zram, bio))) {
    zram_inc_stat(zram, ZRAM_STAT_INVALID_IO);
    bio_io_error(bio);
    return 0;
    @@ -504,7 +486,7 @@ void zram_reset_device(struct zram *zram)
    /* Reset stats */
    memset(&zram->stats, 0, sizeof(zram->stats));

    - zram->disksize = 0;
    + zram->disksize = zram_default_disksize();
    mutex_unlock(&zram->init_lock);
    }

    @@ -520,7 +502,8 @@ int zram_init_device(struct zram *zram)
    return 0;
    }

    - zram_set_disksize(zram, totalram_pages << PAGE_SHIFT);
    + if (!zram->disksize)
    + zram->disksize = zram_default_disksize();

    num_pages = zram->disksize >> PAGE_SHIFT;
    zram->table = vmalloc(num_pages * sizeof(*zram->table));
    @@ -566,7 +549,8 @@ fail:
    return ret;
    }

    -void zram_slot_free_notify(struct block_device *bdev, unsigned long index)
    +static void zram_slot_free_notify(struct block_device *bdev,
    + unsigned long index)
    {
    struct zram *zram;

    @@ -614,8 +598,9 @@ static int create_device(struct zram *zram, int device_id)
    zram->disk->private_data = zram;
    snprintf(zram->disk->disk_name, 16, "zram%d", device_id);

    - /* Actual capacity set using syfs (/sys/block/zram<id>/disksize */
    - set_capacity(zram->disk, 0);
    + /* Custom size can be set using syfs (/sys/block/zram<id>/disksize) */
    + zram->disksize = zram_default_disksize();
    + set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);

    /*
    * To ensure that we always get PAGE_SIZE aligned
    @@ -739,7 +724,7 @@ static int __init zram_init(void)
    }

    /* Allocate the device array and initialize each one */
    - pr_info("Creating %u devices ...\n", num_devices);
    + pr_debug("Creating %u devices ...\n", num_devices);
    devices = kzalloc(num_devices * sizeof(struct zram), GFP_KERNEL);
    if (!devices) {
    ret = -ENOMEM;
    diff --git a/drivers/staging/zram/zram_drv.h b/drivers/staging/zram/zram_drv.h
    index bcc51ea..2cf36db 100644
    --- a/drivers/staging/zram/zram_drv.h
    +++ b/drivers/staging/zram/zram_drv.h
    @@ -9,7 +9,7 @@
    * Released under the terms of 3-clause BSD License
    * Released under the terms of GNU General Public License Version 2.0
    *
    - * Project home: http://compcache.googlecode.com
    + * Project home: http://compcache.googlecode.com/
    */

    #ifndef _ZRAM_DRV_H_
    @@ -26,18 +26,6 @@
    */
    static const unsigned max_num_devices = 32;

    -/*
    - * Stored at beginning of each compressed object.
    - *
    - * It stores back-reference to table entry which points to this
    - * object. This is required to support memory defragmentation.
    - */
    -struct zobj_header {
    -#if 0
    - u32 table_idx;
    -#endif
    -};
    -
    /*-- Configurable parameters */

    /* Default zram disk size: 25% of total RAM */
    @@ -50,8 +38,7 @@ static const unsigned default_disksize_perc_ram = 25;
    static const unsigned max_zpage_size = PAGE_SIZE / 8 * 7;

    /*
    - * NOTE: max_zpage_size must be less than or equal to:
    - * XV_MAX_ALLOC_SIZE - sizeof(struct zobj_header)
    + * NOTE: max_zpage_size must be less than or equal to XV_MAX_ALLOC_SIZE
    * otherwise, xv_malloc() would always return failure.
    */

    @@ -92,16 +79,15 @@ struct zram {
    struct table *table;
    struct request_queue *queue;
    struct gendisk *disk;
    - int init_done;
    + unsigned int init_done;
    /* Prevent concurrent execution of device init and reset */
    struct mutex init_lock;
    /*
    * This is the limit on amount of *uncompressed* worth of data
    - * we can store in a disk.
    + * we can store in a disk (in bytes).
    */
    - u64 disksize; /* bytes */
    -
    - struct zram_stats_cpu *stats;
    + u64 disksize;
    + struct zram_stats_cpu *stats; /* percpu stats */
    };

    extern struct zram *devices;
    --
    1.7.2.1


    \
     
     \ /
      Last update: 2010-08-09 19:29    [W:0.042 / U:0.088 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site