From: Joe Thornber dm thin: reduce the number of metadata commits Optimisation. Use dm_thin_changed_this_transaction to check if metadata was changed on a per thin device granularity. Signed-off-by: Joe Thornber Signed-off-by: Mike Snitzer --- drivers/md/dm-thin.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) Index: linux-3.5-rc7/drivers/md/dm-thin.c =================================================================== --- linux-3.5-rc7.orig/drivers/md/dm-thin.c +++ linux-3.5-rc7/drivers/md/dm-thin.c @@ -707,6 +707,12 @@ static void remap_to_origin(struct thin_ bio->bi_bdev = tc->origin_dev->bdev; } +static int bio_triggers_commit(struct thin_c *tc, struct bio *bio) +{ + return (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) && + dm_thin_changed_this_transaction(tc->td); +} + static void issue(struct thin_c *tc, struct bio *bio) { struct pool *pool = tc->pool; @@ -716,7 +722,7 @@ static void issue(struct thin_c *tc, str * Batch together any FUA/FLUSH bios we find and then issue * a single commit for them in process_deferred_bios(). */ - if (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) { + if (bio_triggers_commit(tc, bio)) { spin_lock_irqsave(&pool->lock, flags); bio_list_add(&pool->deferred_flush_bios, bio); spin_unlock_irqrestore(&pool->lock, flags);