lkml.org 
[lkml]   [2013]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/2] staging: zram: minimize `slot_free_lock' usage (v2)
    Calling handle_pending_slot_free() for every RW operation may
    cause unneccessary slot_free_lock locking, because most likely
    process will see NULL slot_free_rq. handle_pending_slot_free()
    only when current detects that slot_free_rq is not NULL.

    v2: protect handle_pending_slot_free() with zram rw_lock.

    Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>

    ---

    drivers/staging/zram/zram_drv.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
    index 91d94b5..5bfbe0e 100644
    --- a/drivers/staging/zram/zram_drv.c
    +++ b/drivers/staging/zram/zram_drv.c
    @@ -517,6 +517,7 @@ static void handle_pending_slot_free(struct zram *zram)
    {
    struct zram_slot_free *free_rq;

    + down_write(&zram->lock);
    spin_lock(&zram->slot_free_lock);
    while (zram->slot_free_rq) {
    free_rq = zram->slot_free_rq;
    @@ -525,6 +526,7 @@ static void handle_pending_slot_free(struct zram *zram)
    kfree(free_rq);
    }
    spin_unlock(&zram->slot_free_lock);
    + up_write(&zram->lock);
    }

    static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
    @@ -532,14 +534,15 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
    {
    int ret;

    + if (zram->slot_free_rq)
    + handle_pending_slot_free(zram);
    +
    if (rw == READ) {
    down_read(&zram->lock);
    - handle_pending_slot_free(zram);
    ret = zram_bvec_read(zram, bvec, index, offset, bio);
    up_read(&zram->lock);
    } else {
    down_write(&zram->lock);
    - handle_pending_slot_free(zram);
    ret = zram_bvec_write(zram, bvec, index, offset);
    up_write(&zram->lock);
    }


    \
     
     \ /
      Last update: 2013-09-06 17:41    [W:3.540 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site