On Mon, May 12, 2025 at 09:19:10AM +0800, Yu Kuai wrote: > +++ b/drivers/md/md.c > @@ -8849,14 +8849,24 @@ static void md_bitmap_start(struct mddev *mddev, > mddev->pers->bitmap_sector(mddev, &md_io_clone->offset, > &md_io_clone->sectors); > > - mddev->bitmap_ops->startwrite(mddev, md_io_clone->offset, > - md_io_clone->sectors); > + if (unlikely(md_io_clone->rw == STAT_DISCARD) && > + mddev->bitmap_ops->start_discard) > + mddev->bitmap_ops->start_discard(mddev, md_io_clone->offset, > + md_io_clone->sectors); > + else > + mddev->bitmap_ops->startwrite(mddev, md_io_clone->offset, > + md_io_clone->sectors); > }
This interface feels weird, as it would still call into the write interfaces when the discard ones are not defined instead of doing nothing. Also shouldn't discard also use a different interface than md_bitmap_start in the caller? I'd also expect the final version of this to be merged with the previous patch, as adding an interface without the only user is a bit odd.