diff options
Diffstat (limited to 'drivers/md/dm-thin.c')
-rw-r--r-- | drivers/md/dm-thin.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index bc9d08c0218b..98c50f9626d8 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c | |||
@@ -707,6 +707,12 @@ static void remap_to_origin(struct thin_c *tc, struct bio *bio) | |||
707 | bio->bi_bdev = tc->origin_dev->bdev; | 707 | bio->bi_bdev = tc->origin_dev->bdev; |
708 | } | 708 | } |
709 | 709 | ||
710 | static int bio_triggers_commit(struct thin_c *tc, struct bio *bio) | ||
711 | { | ||
712 | return (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) && | ||
713 | dm_thin_changed_this_transaction(tc->td); | ||
714 | } | ||
715 | |||
710 | static void issue(struct thin_c *tc, struct bio *bio) | 716 | static void issue(struct thin_c *tc, struct bio *bio) |
711 | { | 717 | { |
712 | struct pool *pool = tc->pool; | 718 | struct pool *pool = tc->pool; |
@@ -716,7 +722,7 @@ static void issue(struct thin_c *tc, struct bio *bio) | |||
716 | * Batch together any FUA/FLUSH bios we find and then issue | 722 | * Batch together any FUA/FLUSH bios we find and then issue |
717 | * a single commit for them in process_deferred_bios(). | 723 | * a single commit for them in process_deferred_bios(). |
718 | */ | 724 | */ |
719 | if (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) { | 725 | if (bio_triggers_commit(tc, bio)) { |
720 | spin_lock_irqsave(&pool->lock, flags); | 726 | spin_lock_irqsave(&pool->lock, flags); |
721 | bio_list_add(&pool->deferred_flush_bios, bio); | 727 | bio_list_add(&pool->deferred_flush_bios, bio); |
722 | spin_unlock_irqrestore(&pool->lock, flags); | 728 | spin_unlock_irqrestore(&pool->lock, flags); |