md: record dm-raid gendisk in mddev
authorYu Kuai <yukuai3@huawei.com>
Tue, 6 May 2025 12:49:00 +0000 (20:49 +0800)
committerYu Kuai <yukuai3@huawei.com>
Sat, 10 May 2025 08:12:19 +0000 (16:12 +0800)
Following patch will use gendisk to check if there are normal IO
completed or inflight, to fix a problem in mdraid that foreground IO
can be starved by background sync IO in later patches.

Link: https://lore.kernel.org/linux-raid/20250506124903.2540268-7-yukuai1@huaweicloud.com
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Xiao Ni <xni@redhat.com>
drivers/md/dm-raid.c
drivers/md/md.h

index 6adc55fd90d3d4aec020df7445b5193263d4cd6d..127138c61be58ab12ba560bd7def1e56432f78d3 100644 (file)
@@ -14,6 +14,7 @@
 #include "raid5.h"
 #include "raid10.h"
 #include "md-bitmap.h"
+#include "dm-core.h"
 
 #include <linux/device-mapper.h>
 
@@ -3308,6 +3309,7 @@ size_check:
 
        /* Disable/enable discard support on raid set. */
        configure_discard_support(rs);
+       rs->md.dm_gendisk = ti->table->md->disk;
 
        mddev_unlock(&rs->md);
        return 0;
@@ -3327,6 +3329,7 @@ static void raid_dtr(struct dm_target *ti)
 
        mddev_lock_nointr(&rs->md);
        md_stop(&rs->md);
+       rs->md.dm_gendisk = NULL;
        mddev_unlock(&rs->md);
 
        if (work_pending(&rs->md.event_work))
index 1cf00a04bcdd7fee590949e6b5e247cd16ff39a0..9d55b4630077c968b289c25fd0280c51fb6a0617 100644 (file)
@@ -404,7 +404,8 @@ struct mddev {
                                                       * are happening, so run/
                                                       * takeover/stop are not safe
                                                       */
-       struct gendisk                  *gendisk;
+       struct gendisk                  *gendisk;    /* mdraid gendisk */
+       struct gendisk                  *dm_gendisk; /* dm-raid gendisk */
 
        struct kobject                  kobj;
        int                             hold_active;