Signed-off-by: Jens Axboe <jens.axboe@xxxxxxxxxx> --- 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 e15a3fa..98bac71 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -517,9 +517,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_safe(bdi, tmp, &bdi_list, bdi_list) { struct bdi_work *work; @@ -540,6 +548,7 @@ restart: spin_unlock(&bdi_lock); wbc->bdi = bdi; generic_sync_bdi_inodes(sb, wbc); + spin_lock(&bdi_lock); goto restart; } if (must_wait) -- 1.6.3.rc0.1.gf800 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html