From: Yu Kuai <yuku...@huawei.com> It's not used for now, and prepare to handle discard for llbitmap in following patches.
Signed-off-by: Yu Kuai <yuku...@huawei.com> --- drivers/md/md-bitmap.c | 4 ++-- drivers/md/md-bitmap.h | 4 ++-- drivers/md/md.c | 10 ++++++++-- drivers/md/md.h | 1 + 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index 733fbb886f67..0cef5c199d32 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -1667,7 +1667,7 @@ __acquires(bitmap->lock) } static int bitmap_startwrite(struct mddev *mddev, sector_t offset, - unsigned long sectors) + unsigned long sectors, bool is_discard) { struct bitmap *bitmap = mddev->bitmap; @@ -1722,7 +1722,7 @@ static int bitmap_startwrite(struct mddev *mddev, sector_t offset, } static void bitmap_endwrite(struct mddev *mddev, sector_t offset, - unsigned long sectors) + unsigned long sectors, bool is_discard) { struct bitmap *bitmap = mddev->bitmap; diff --git a/drivers/md/md-bitmap.h b/drivers/md/md-bitmap.h index d3d50629af91..504d33d4980b 100644 --- a/drivers/md/md-bitmap.h +++ b/drivers/md/md-bitmap.h @@ -91,9 +91,9 @@ struct bitmap_operations { void (*wait_behind_writes)(struct mddev *mddev); int (*startwrite)(struct mddev *mddev, sector_t offset, - unsigned long sectors); + unsigned long sectors, bool is_discard); void (*endwrite)(struct mddev *mddev, sector_t offset, - unsigned long sectors); + unsigned long sectors, bool is_discard); bool (*start_sync)(struct mddev *mddev, sector_t offset, sector_t *blocks, bool degraded); void (*end_sync)(struct mddev *mddev, sector_t offset, sector_t *blocks); diff --git a/drivers/md/md.c b/drivers/md/md.c index 4a9aa6879e98..c06c41e39609 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -8805,13 +8805,15 @@ static void md_bitmap_start(struct mddev *mddev, &md_io_clone->sectors); mddev->bitmap_ops->startwrite(mddev, md_io_clone->offset, - md_io_clone->sectors); + md_io_clone->sectors, + md_io_clone->is_discard); } static void md_bitmap_end(struct mddev *mddev, struct md_io_clone *md_io_clone) { mddev->bitmap_ops->endwrite(mddev, md_io_clone->offset, - md_io_clone->sectors); + md_io_clone->sectors, + md_io_clone->is_discard); } static void md_end_clone_io(struct bio *bio) @@ -8850,6 +8852,10 @@ static void md_clone_bio(struct mddev *mddev, struct bio **bio) if (bio_data_dir(*bio) == WRITE && md_bitmap_enabled(mddev)) { md_io_clone->offset = (*bio)->bi_iter.bi_sector; md_io_clone->sectors = bio_sectors(*bio); + if (unlikely(bio_op(*bio) == REQ_OP_DISCARD)) + md_io_clone->is_discard = true; + else + md_io_clone->is_discard = false; md_bitmap_start(mddev, md_io_clone); } diff --git a/drivers/md/md.h b/drivers/md/md.h index 254bbab6f443..ad18ef9b5061 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -858,6 +858,7 @@ struct md_io_clone { unsigned long start_time; sector_t offset; unsigned long sectors; + bool is_discard; struct bio bio_clone; }; -- 2.39.2