On Mon, Jun 8, 2026 at 10:16 AM Mikulas Patocka <[email protected]> wrote: > > > > On Wed, 3 Jun 2026, Samuel Moelius wrote: > > > dm-ebs can discard a block while a dirty dm-bufio buffer for the > > same block is still cached. If that buffer is later written back, > > stale data can be written over the discarded state. > > > > That resurrects data that userspace explicitly discarded and breaks > > the expected discard semantics of the target. > > > > Invalidate or clean the matching bufio state when processing discards > > so that old dirty buffers cannot be written back after the discard. > > > > Assisted-by: Codex:gpt-5.5-cyber-preview > > Signed-off-by: Samuel Moelius <[email protected]> > > --- > > drivers/md/dm-ebs-target.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/md/dm-ebs-target.c b/drivers/md/dm-ebs-target.c > > index 1e52bde48b91..9fece535a0b3 100644 > > --- a/drivers/md/dm-ebs-target.c > > +++ b/drivers/md/dm-ebs-target.c > > @@ -212,8 +212,12 @@ static void __ebs_process_bios(struct work_struct *ws) > > write = true; > > r = __ebs_rw_bio(ec, REQ_OP_WRITE, bio); > > } else if (bio_op(bio) == REQ_OP_DISCARD) { > > - __ebs_forget_bio(ec, bio); > > - r = __ebs_discard_bio(ec, bio); > > + if (write) > > + r = dm_bufio_write_dirty_buffers(ec->bufio); > > + if (!r) { > > + __ebs_forget_bio(ec, bio); > > + r = __ebs_discard_bio(ec, bio); > > + } > > } > > > > if (r < 0) > > Hi > > There's a bug in the patch - when the "write" variable is false, "r" is > equal to -EIO, thus __ebs_forget_bio and __ebs_discard_bio is skipped at > all. > > If dm_bufio_write_dirty_buffers returns non-zero, the error is erroneously > reported on the discard bio (that is innocent) and not on the write bios > that triggered the error.
v2 forthcoming.

