From: Yu Kuai <yukuai3@xxxxxxxxxx> Commit 1b0a151c10a6 ("blk-core: use pr_warn_ratelimited() in bio_check_ro()") fix message storm by limit the rate, however, there will still be lots of message in the long term. Fix it better by warn once for each partition. Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> --- block/blk-core.c | 14 +++++++++++--- include/linux/blk_types.h | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index f9f8b12ba626..6575f684d41e 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -502,9 +502,17 @@ static inline void bio_check_ro(struct bio *bio) if (op_is_write(bio_op(bio)) && bdev_read_only(bio->bi_bdev)) { if (op_is_flush(bio->bi_opf) && !bio_sectors(bio)) return; - pr_warn_ratelimited("Trying to write to read-only block-device %pg\n", - bio->bi_bdev); - /* Older lvm-tools actually trigger this */ + + if (bdev_flagged(bio->bi_bdev, BD_FLAG_RO_WARNED)) + return; + + bdev_set_flag(bio->bi_bdev, BD_FLAG_RO_WARNED); + /* + * Use ioctl to set underlying disk of raid/dm to read-only + * will trigger this. + */ + pr_warn("Trying to write to read-only block-device %pg\n", + bio->bi_bdev); } } diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index de652045111b..a2185d2f02d9 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -41,6 +41,7 @@ struct bio_crypt_ctx; #define BD_FLAG_WRITE_HOLDER 1 #define BD_FLAG_HAS_SUBMIT_BIO 2 #define BD_FLAG_MAKE_IT_FAIL 3 +#define BD_FLAG_RO_WARNED 4 struct block_device { sector_t bd_start_sect; -- 2.39.2