Commit c943bfc6 authored by Stefan Haberland's avatar Stefan Haberland Committed by Jens Axboe
Browse files

s390/dasd: Fix gendisk parent after copy pair swap



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: 413862ca ("s390/dasd: add copy pair swap capability")
Cc: stable@vger.kernel.org #6.1
Reviewed-by: default avatarJan Hoeppner <hoeppner@linux.ibm.com>
Signed-off-by: default avatarStefan Haberland <sth@linux.ibm.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 7d09a8e2
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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);