lkml.org 
[lkml]   [2009]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/10] writeback: use spin_trylock() in bdi_writeback_all() for WB_SYNC_NONE
    Date
    Not sure whether this is a good idea, hence it's at the back of the
    series as a separate patch. In theory it should be fine, since all
    WB_SYNC_NONE writeback is best-effort. No guarentees are made.

    Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
    ---
    fs/fs-writeback.c | 13 +++++++++++--
    1 files changed, 11 insertions(+), 2 deletions(-)

    diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
    index de5f7ef..d589db3 100644
    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -506,9 +506,17 @@ void bdi_writeback_all(struct super_block *sb, struct writeback_control *wbc)
    struct bdi_work *work;
    LIST_HEAD(list);

    -restart:
    - spin_lock(&bdi_lock);
    + /*
    + * If this isn't a data integrity writeback, just drop it if
    + * someone is already holding the bdi_lock
    + */
    + if (!spin_trylock(&bdi_lock)) {
    + if (!must_wait)
    + return;
    + spin_lock(&bdi_lock);
    + }

    +restart:
    list_for_each_entry(bdi, &bdi_list, bdi_list) {
    struct bdi_work *work;

    @@ -535,6 +543,7 @@ restart:
    __wbc = *wbc;
    __wbc.bdi = bdi;
    generic_sync_bdi_inodes(sb, &__wbc);
    + spin_lock(&bdi_lock);
    goto restart;
    }
    if (must_wait)
    --
    1.6.3.rc0.1.gf800


    \
     
     \ /
      Last update: 2009-06-17 13:13    [W:0.022 / U:62.832 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site