summaryrefslogtreecommitdiff
path: root/drivers/s390
diff options
context:
space:
mode:
authorJan Höppner <hoeppner@linux.vnet.ibm.com>2015-09-21 17:32:11 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-03-07 13:11:58 +0100
commit8542885bf5338bfccf779868a5d143620e794ff9 (patch)
tree5c103a4fd91ff9cd2dba328b629e06e32d29024c /drivers/s390
parent46d1c03c82a717735dddc7a47f321abaccbcec78 (diff)
s390/dasd: Simplify code in format logic
Currently, dasd_format is calling the format logic of a DASD discipline with PAV enabled. If that fails with an error code of -EAGAIN the value of retries is decremented and the discipline function is called with PAV turned off. The loop is supposed to try this up to 255 times until success. However, -EAGAIN can only occur once here and therefore the loop will never reach the 255 retries. So, replace the unnecessarily complicated loop logic and simply try again without PAV enabled in case of an -EAGAIN error. Signed-off-by: Jan Höppner <hoeppner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/dasd_ioctl.c33
1 files changed, 6 insertions, 27 deletions
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index 02837d0ad942..16bb5ec4b30b 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -203,9 +203,7 @@ static int
dasd_format(struct dasd_block *block, struct format_data_t *fdata)
{
struct dasd_device *base;
- int enable_pav = 1;
- int rc, retries;
- int start, stop;
+ int rc;
base = block->base;
if (base->discipline->format_device == NULL)
@@ -233,30 +231,11 @@ dasd_format(struct dasd_block *block, struct format_data_t *fdata)
bdput(bdev);
}
- retries = 255;
- /* backup start- and endtrack for retries */
- start = fdata->start_unit;
- stop = fdata->stop_unit;
- do {
- rc = base->discipline->format_device(base, fdata, enable_pav);
- if (rc) {
- if (rc == -EAGAIN) {
- retries--;
- /* disable PAV in case of errors */
- enable_pav = 0;
- fdata->start_unit = start;
- fdata->stop_unit = stop;
- } else
- return rc;
- } else
- /* success */
- break;
- } while (retries);
-
- if (!retries)
- return -EIO;
- else
- return 0;
+ rc = base->discipline->format_device(base, fdata, 1);
+ if (rc == -EAGAIN)
+ rc = base->discipline->format_device(base, fdata, 0);
+
+ return rc;
}
/*