]> www.infradead.org Git - nvme.git/commitdiff
dm-ebs: fix prefetch-vs-suspend race
authorMikulas Patocka <mpatocka@redhat.com>
Fri, 28 Mar 2025 15:19:07 +0000 (16:19 +0100)
committerMikulas Patocka <mpatocka@redhat.com>
Fri, 28 Mar 2025 17:26:11 +0000 (18:26 +0100)
There's a possible race condition in dm-ebs - dm bufio prefetch may be in
progress while the device is suspended. Fix this by calling
dm_bufio_client_reset in the postsuspend hook.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
drivers/md/dm-ebs-target.c

index 18ae45dcbfb28b74779d9ff90fc90831e46fbaea..b19b0142a690a34e39d323f38411a02b5da01416 100644 (file)
@@ -390,6 +390,12 @@ static int ebs_map(struct dm_target *ti, struct bio *bio)
        return DM_MAPIO_REMAPPED;
 }
 
+static void ebs_postsuspend(struct dm_target *ti)
+{
+       struct ebs_c *ec = ti->private;
+       dm_bufio_client_reset(ec->bufio);
+}
+
 static void ebs_status(struct dm_target *ti, status_type_t type,
                       unsigned int status_flags, char *result, unsigned int maxlen)
 {
@@ -447,6 +453,7 @@ static struct target_type ebs_target = {
        .ctr             = ebs_ctr,
        .dtr             = ebs_dtr,
        .map             = ebs_map,
+       .postsuspend     = ebs_postsuspend,
        .status          = ebs_status,
        .io_hints        = ebs_io_hints,
        .prepare_ioctl   = ebs_prepare_ioctl,