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) -- 2.43.0

