Hi,

在 2025/05/12 12:41, Christoph Hellwig 写道:
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?

This is because the old bitmap handle discard the same as write, I
can't do nothing in this case. Do you prefer also reuse the write
api to new discard api for old bitmap?

For the caller, I think it's fine, since bitmap framwork already
calculate sectors and len for discard as well.

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.

Sure.

Thanks,
Kuai

.



Reply via email to