Message ID | 20230110132710.252015-2-damien.lemoal@opensource.wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Improve libata support for FUA | expand |
On 1/10/23 22:27, Damien Le Moal wrote: > From: Christoph Hellwig <hch@infradead.org> > > Check that the PREFUSH and FUA flags are only set on write bios, > given that the flush state machine expects that. > > [Damien] The check is also extended to REQ_OP_ZONE_APPEND operations as > these are data write operations used by btrfs and zonefs and may also > have the REQ_FUA bit set. > > Reported-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> > Signed-off-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> > Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com> Christoph, Jens, Are you OK with this patch ? I am going to queue up patches 2 to 6 in libata tree as we have another series on top of these patches (CDL series rebased). Jens, if you could take this one in the block tree, that would be great. Thanks ! > --- > block/blk-core.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/block/blk-core.c b/block/blk-core.c > index 9321767470dc..c644aac498ef 100644 > --- a/block/blk-core.c > +++ b/block/blk-core.c > @@ -744,12 +744,16 @@ void submit_bio_noacct(struct bio *bio) > * Filter flush bio's early so that bio based drivers without flush > * support don't have to worry about them. > */ > - if (op_is_flush(bio->bi_opf) && > - !test_bit(QUEUE_FLAG_WC, &q->queue_flags)) { > - bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA); > - if (!bio_sectors(bio)) { > - status = BLK_STS_OK; > + if (op_is_flush(bio->bi_opf)) { > + if (WARN_ON_ONCE(bio_op(bio) != REQ_OP_WRITE && > + bio_op(bio) != REQ_OP_ZONE_APPEND)) > goto end_io; > + if (!test_bit(QUEUE_FLAG_WC, &q->queue_flags)) { > + bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA); > + if (!bio_sectors(bio)) { > + status = BLK_STS_OK; > + goto end_io; > + } > } > } >
Yes, I'm ok with the updates to it.
On Jan 10, 2023, at 2:58 PM, Damien Le Moal <damien.lemoal@opensource.wdc.com> wrote: > > On 1/10/23 22:27, Damien Le Moal wrote: >> From: Christoph Hellwig <hch@infradead.org> >> >> Check that the PREFUSH and FUA flags are only set on write bios, >> given that the flush state machine expects that. >> >> [Damien] The check is also extended to REQ_OP_ZONE_APPEND operations as >> these are data write operations used by btrfs and zonefs and may also >> have the REQ_FUA bit set. >> >> Reported-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> >> Signed-off-by: Christoph Hellwig <hch@lst.de> >> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> >> Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com> > > Christoph, Jens, > > Are you OK with this patch ? I already acked a previous version, you just didn’t pick it up. — Jens Axboe
On 1/11/23 13:32, Jens Axboe wrote: > On Jan 10, 2023, at 2:58 PM, Damien Le Moal <damien.lemoal@opensource.wdc.com> wrote: >> >> On 1/10/23 22:27, Damien Le Moal wrote: >>> From: Christoph Hellwig <hch@infradead.org> >>> >>> Check that the PREFUSH and FUA flags are only set on write bios, >>> given that the flush state machine expects that. >>> >>> [Damien] The check is also extended to REQ_OP_ZONE_APPEND operations as >>> these are data write operations used by btrfs and zonefs and may also >>> have the REQ_FUA bit set. >>> >>> Reported-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> >>> Signed-off-by: Christoph Hellwig <hch@lst.de> >>> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> >>> Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com> >> >> Christoph, Jens, >> >> Are you OK with this patch ? > > I already acked a previous version, you just didn’t pick it up. I noticed your ack. But since I changed the patch, I wanted confirmation again. Do you want me to pickup this version through the ATA tree ? You can take it through the block tree as the block patch can go in separately. There are no conflicts/dependencies for compile with the ATA part. Whichever is fine with me. > > — > Jens Axboe >
diff --git a/block/blk-core.c b/block/blk-core.c index 9321767470dc..c644aac498ef 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -744,12 +744,16 @@ void submit_bio_noacct(struct bio *bio) * Filter flush bio's early so that bio based drivers without flush * support don't have to worry about them. */ - if (op_is_flush(bio->bi_opf) && - !test_bit(QUEUE_FLAG_WC, &q->queue_flags)) { - bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA); - if (!bio_sectors(bio)) { - status = BLK_STS_OK; + if (op_is_flush(bio->bi_opf)) { + if (WARN_ON_ONCE(bio_op(bio) != REQ_OP_WRITE && + bio_op(bio) != REQ_OP_ZONE_APPEND)) goto end_io; + if (!test_bit(QUEUE_FLAG_WC, &q->queue_flags)) { + bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA); + if (!bio_sectors(bio)) { + status = BLK_STS_OK; + goto end_io; + } } }