On 6/27/20 2:00 AM, Ming Lei wrote: > On Sat, Jun 27, 2020 at 2:12 AM Aleksei Marov <alekseymmm@xxxxxxx> wrote: >> >> The current behavior is that if bio flagged as BIO_QUIETis submitted to request based block device then the request >> that wraps this bio in a queue is not quiet. RQF_FLAG is not >> set anywhere. Hence, if errors happen we can see error >> messages (e.g. in print_req_error) even though bio is quiet. >> This patch fixes that by setting the flag in blk_rq_bio_prep. >> >> Signed-off-by: Aleksei Marov <alekseymmm@xxxxxxx> >> --- >> block/blk.h | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/block/blk.h b/block/blk.h >> index b5d1f0f..04ca4e0 100644 >> --- a/block/blk.h >> +++ b/block/blk.h >> @@ -108,6 +108,9 @@ static inline void blk_rq_bio_prep(struct request >> *rq, struct bio *bio, >> >> if (bio->bi_disk) >> rq->rq_disk = bio->bi_disk; >> + >> + if (bio_flagged(bio, BIO_QUIET)) >> + rq->rq_flags |= RQF_QUIET; >> } > > BIO_QUIET consumer is fs code, and RQF_QUIET consumer is block layer, > so you think > the two consumers' expectation is same? They should be the same, the intent is to say "don't log errors on this piece of IO". Would be much nicer if RQF_QUIET was just inherited naturally in req->cmd_flags from bio->bi_opf, like we do for the shared parts. Pretty confusing to have two different sets of flags and needing to inherit them independently, also more inefficient. -- Jens Axboe