]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
s390/dasd: Fix gendisk parent after copy pair swap
authorStefan Haberland <sth@linux.ibm.com>
Wed, 26 Nov 2025 16:06:31 +0000 (17:06 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 26 Nov 2025 17:14:16 +0000 (10:14 -0700)
After a copy pair swap the block device's "device" symlink points to
the secondary CCW device, but the gendisk's parent remained the
primary, leaving /sys/block/<dasdx> under the wrong parent.

Move the gendisk to the secondary's device with device_move(), keeping
the sysfs topology consistent after the swap.

Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
Cc: stable@vger.kernel.org #6.1
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/s390/block/dasd_eckd.c

index 88fa17aea2ec843f8cec1e61a22867689c7ea226..ec0c62e5ef73b644e5a08a621f9a515ff3d45616 100644 (file)
@@ -6150,6 +6150,7 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid
        struct dasd_copy_relation *copy;
        struct dasd_block *block;
        struct gendisk *gdp;
+       int rc;
 
        copy = device->copy;
        if (!copy)
@@ -6184,6 +6185,13 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid
        /* swap blocklayer device link */
        gdp = block->gdp;
        dasd_add_link_to_gendisk(gdp, secondary);
+       rc = device_move(disk_to_dev(gdp), &secondary->cdev->dev, DPM_ORDER_NONE);
+       if (rc) {
+               dev_err(&primary->cdev->dev,
+                       "copy_pair_swap: moving blockdevice parent %s->%s failed (%d)\n",
+                       dev_name(&primary->cdev->dev),
+                       dev_name(&secondary->cdev->dev), rc);
+       }
 
        /* re-enable device */
        dasd_device_remove_stop_bits(primary, DASD_STOPPED_PPRC);