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

Samuel Moelius <[email protected]>
Newsgroups dev.linux.lists.dm-devel,org.kernel.vger.linux-kernel
Message-ID <CAE+C+Da2DypH+ZOOw9Dha35gumZgz=hSe=m4AF1boUyFJcQEjQ@mail.gmail.com>
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.
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.