Avoid metadata flush to be blocked by the writeback throttling code in wbt_wait(). Otherwise, we can end up with a deadlock under heavy write load with all chunk works active. In such situation, a deadlock can happen if the flush work is blocked by the throttling code while holding the metadata lock: as the chunk works will wait for the metadata lock too, no progress can be made. Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx> --- drivers/md/dm-zoned-metadata.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 884ff7c170a0..f694fb98b002 100644 --- a/drivers/md/dm-zoned-metadata.c +++ b/drivers/md/dm-zoned-metadata.c @@ -567,7 +567,8 @@ static void dmz_write_mblock(struct dmz_metadata *zmd, struct dmz_mblock *mblk, bio->bi_bdev = zmd->dev->bdev; bio->bi_private = mblk; bio->bi_end_io = dmz_mblock_bio_end_io; - bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_META | REQ_PRIO); + bio_set_op_attrs(bio, REQ_OP_WRITE, + REQ_META | REQ_PRIO | REQ_SYNC | REQ_IDLE); bio_add_page(bio, mblk->page, DMZ_BLOCK_SIZE, 0); submit_bio(bio); } -- 2.13.3 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel