Browse Source

dasd: use aliases for formatted devices during format

Formatting of a previously formatted device is slower than newly
format a device when alias devices are available.
For already formatted devices the alias devices are not used for
formatting.

Fix the alias handling for already formatted devices.

Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Stefan Haberland 11 years ago
parent
commit
daa991bf30
3 changed files with 9 additions and 8 deletions
  1. 6 5
      drivers/s390/block/dasd.c
  2. 2 2
      drivers/s390/block/dasd_eckd.c
  3. 1 1
      drivers/s390/block/dasd_int.h

+ 6 - 5
drivers/s390/block/dasd.c

@@ -285,6 +285,12 @@ static int dasd_state_basic_to_known(struct dasd_device *device)
 {
 {
 	int rc;
 	int rc;
 
 
+	if (device->discipline->basic_to_known) {
+		rc = device->discipline->basic_to_known(device);
+		if (rc)
+			return rc;
+	}
+
 	if (device->block) {
 	if (device->block) {
 		dasd_profile_exit(&device->block->profile);
 		dasd_profile_exit(&device->block->profile);
 		debugfs_remove(device->block->debugfs_dentry);
 		debugfs_remove(device->block->debugfs_dentry);
@@ -375,11 +381,6 @@ static int dasd_state_ready_to_basic(struct dasd_device *device)
 {
 {
 	int rc;
 	int rc;
 
 
-	if (device->discipline->ready_to_basic) {
-		rc = device->discipline->ready_to_basic(device);
-		if (rc)
-			return rc;
-	}
 	device->state = DASD_STATE_BASIC;
 	device->state = DASD_STATE_BASIC;
 	if (device->block) {
 	if (device->block) {
 		struct dasd_block *block = device->block;
 		struct dasd_block *block = device->block;

+ 2 - 2
drivers/s390/block/dasd_eckd.c

@@ -2039,7 +2039,7 @@ static int dasd_eckd_online_to_ready(struct dasd_device *device)
 	return 0;
 	return 0;
 };
 };
 
 
-static int dasd_eckd_ready_to_basic(struct dasd_device *device)
+static int dasd_eckd_basic_to_known(struct dasd_device *device)
 {
 {
 	return dasd_alias_remove_device(device);
 	return dasd_alias_remove_device(device);
 };
 };
@@ -4511,7 +4511,7 @@ static struct dasd_discipline dasd_eckd_discipline = {
 	.verify_path = dasd_eckd_verify_path,
 	.verify_path = dasd_eckd_verify_path,
 	.basic_to_ready = dasd_eckd_basic_to_ready,
 	.basic_to_ready = dasd_eckd_basic_to_ready,
 	.online_to_ready = dasd_eckd_online_to_ready,
 	.online_to_ready = dasd_eckd_online_to_ready,
-	.ready_to_basic = dasd_eckd_ready_to_basic,
+	.basic_to_known = dasd_eckd_basic_to_known,
 	.fill_geometry = dasd_eckd_fill_geometry,
 	.fill_geometry = dasd_eckd_fill_geometry,
 	.start_IO = dasd_start_IO,
 	.start_IO = dasd_start_IO,
 	.term_IO = dasd_term_IO,
 	.term_IO = dasd_term_IO,

+ 1 - 1
drivers/s390/block/dasd_int.h

@@ -304,7 +304,7 @@ struct dasd_discipline {
 	 */
 	 */
 	int (*basic_to_ready) (struct dasd_device *);
 	int (*basic_to_ready) (struct dasd_device *);
 	int (*online_to_ready) (struct dasd_device *);
 	int (*online_to_ready) (struct dasd_device *);
-	int (*ready_to_basic)  (struct dasd_device *);
+	int (*basic_to_known)(struct dasd_device *);
 
 
 	/* (struct dasd_device *);
 	/* (struct dasd_device *);
 	 * Device operation functions. build_cp creates a ccw chain for
 	 * Device operation functions. build_cp creates a ccw chain for