Re: [PATCH] dm ebs: drop dirty bufio state when discarding blocks

Mikulas Patocka <[email protected]>
Newsgroups dev.linux.lists.dm-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

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.

Mikulas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.