OSDN Git Service

dasd: use aliases for formatted devices during format
authorStefan Haberland <stefan.haberland@de.ibm.com>
Fri, 18 Jul 2014 12:19:25 +0000 (14:19 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 22 Jul 2014 07:26:21 +0000 (09:26 +0200)
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>
drivers/s390/block/dasd.c
drivers/s390/block/dasd_eckd.c
drivers/s390/block/dasd_int.h

index 1e50626..5e8442c 100644 (file)
@@ -285,6 +285,12 @@ static int dasd_state_basic_to_known(struct dasd_device *device)
 {
        int rc;
 
+       if (device->discipline->basic_to_known) {
+               rc = device->discipline->basic_to_known(device);
+               if (rc)
+                       return rc;
+       }
+
        if (device->block) {
                dasd_profile_exit(&device->block->profile);
                debugfs_remove(device->block->debugfs_dentry);
@@ -375,11 +381,6 @@ static int dasd_state_ready_to_basic(struct dasd_device *device)
 {
        int rc;
 
-       if (device->discipline->ready_to_basic) {
-               rc = device->discipline->ready_to_basic(device);
-               if (rc)
-                       return rc;
-       }
        device->state = DASD_STATE_BASIC;
        if (device->block) {
                struct dasd_block *block = device->block;
index 2e8e075..39748fd 100644 (file)
@@ -2039,7 +2039,7 @@ static int dasd_eckd_online_to_ready(struct dasd_device *device)
        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);
 };
@@ -4511,7 +4511,7 @@ static struct dasd_discipline dasd_eckd_discipline = {
        .verify_path = dasd_eckd_verify_path,
        .basic_to_ready = dasd_eckd_basic_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,
        .start_IO = dasd_start_IO,
        .term_IO = dasd_term_IO,
index 690001a..7a14582 100644 (file)
@@ -304,7 +304,7 @@ struct dasd_discipline {
         */
        int (*basic_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 *);
         * Device operation functions. build_cp creates a ccw chain for