2023-11-07 03:18:19

by Yu Kuai

[permalink] [raw]
Subject: [PATCH] blk-core: use pr_warn_ratelimited() in bio_check_ro()

From: Yu Kuai <[email protected]>

If one of the underlying disks of raid or dm is set to read-only, then
each io will generate new log, which will cause message storm. This
environment is indeed problematic, however we can't make sure our
naive custormer won't do this, hence use pr_warn_ratelimited() to
prevent message storm in this case.

Signed-off-by: Yu Kuai <[email protected]>
---
block/blk-core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index 9d51e9894ece..fdf25b8d6e78 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -501,8 +501,8 @@ 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("Trying to write to read-only block-device %pg\n",
- bio->bi_bdev);
+ pr_warn_ratelimited("Trying to write to read-only block-device %pg\n",
+ bio->bi_bdev);
/* Older lvm-tools actually trigger this */
}
}
--
2.39.2


2023-11-07 03:50:58

by yebin (H)

[permalink] [raw]
Subject: Re: [PATCH] blk-core: use pr_warn_ratelimited() in bio_check_ro()



On 2023/11/7 19:12, Yu Kuai wrote:
> From: Yu Kuai <[email protected]>
>
> If one of the underlying disks of raid or dm is set to read-only, then
> each io will generate new log, which will cause message storm. This
> environment is indeed problematic, however we can't make sure our
> naive custormer won't do this, hence use pr_warn_ratelimited() to
> prevent message storm in this case.
>
> Signed-off-by: Yu Kuai <[email protected]>
> ---
> block/blk-core.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 9d51e9894ece..fdf25b8d6e78 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -501,8 +501,8 @@ 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("Trying to write to read-only block-device %pg\n",
> - bio->bi_bdev);
> + pr_warn_ratelimited("Trying to write to read-only block-device %pg\n",
> + bio->bi_bdev);
Acctually, before commit 57e95e4670d1 ("block: fix and cleanup
bio_check_ro") , there's only print warning once.
I wrote a patch earlier, set GD_ROWR_WARNED flag for disk after emit
warning. You can look at the patch in the
attachment, Is it possible to solve your problem.
> /* Older lvm-tools actually trigger this */
> }
> }


Attachments:
0001-block-only-print-warning-once-when-write-to-readonly.patch (2.52 kB)