aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorJan Höppner <hoeppner@linux.vnet.ibm.com>2015-08-19 11:16:35 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-03-07 13:12:00 +0100
commit570d237c19f8d0f1dfd214767f2d995b8291138a (patch)
treeedc7a9b752dc07604106987770fe39ba6429f2c0 /drivers/s390
parents390/dasd: Simplify code in format logic (diff)
downloadlinux-dev-570d237c19f8d0f1dfd214767f2d995b8291138a.tar.xz
linux-dev-570d237c19f8d0f1dfd214767f2d995b8291138a.zip
s390/dasd: Refactor dasd format functions
Prepare for new format checking function by renaming functions and moving reusable code to separate functions: - Move sanity checks into a new function and make it reusable. - Move common format code to a new function called dasd_eckd_format_process_data. - Create the generic function dasd_eckd_format_build_ccw_req, which itself will then decide what ccw request is being built according to the input data. (with upcoming functionality). 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_eckd.c58
1 files changed, 46 insertions, 12 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 8181d6724942..e679209755cf 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -2386,22 +2386,26 @@ dasd_eckd_build_format(struct dasd_device *base,
return fcp;
}
-static int
-dasd_eckd_format_device(struct dasd_device *base,
- struct format_data_t *fdata,
- int enable_pav)
+/*
+ * Wrapper function to build a CCW request depending on input data
+ */
+static struct dasd_ccw_req *
+dasd_eckd_format_build_ccw_req(struct dasd_device *base,
+ struct format_data_t *fdata, int enable_pav)
+{
+ return dasd_eckd_build_format(base, fdata, enable_pav);
+}
+
+/*
+ * Sanity checks on format_data
+ */
+static int dasd_eckd_format_sanity_checks(struct dasd_device *base,
+ struct format_data_t *fdata)
{
- struct dasd_ccw_req *cqr, *n;
struct dasd_eckd_private *private;
- struct list_head format_queue;
- struct dasd_device *device;
- int old_start, old_stop, format_step;
- int step, retry;
- int rc = 0;
private = (struct dasd_eckd_private *) base->private;
- /* Sanity checks. */
if (fdata->start_unit >=
(private->real_cyl * private->rdc_data.trk_per_cyl)) {
dev_warn(&base->cdev->dev,
@@ -2428,6 +2432,29 @@ dasd_eckd_format_device(struct dasd_device *base,
fdata->blksize);
return -EINVAL;
}
+ return 0;
+}
+
+/*
+ * This function will process format_data originally coming from an IOCTL
+ */
+static int dasd_eckd_format_process_data(struct dasd_device *base,
+ struct format_data_t *fdata,
+ int enable_pav)
+{
+ struct dasd_ccw_req *cqr, *n;
+ struct dasd_eckd_private *private;
+ struct list_head format_queue;
+ struct dasd_device *device;
+ int old_start, old_stop, format_step;
+ int step, retry;
+ int rc;
+
+ private = (struct dasd_eckd_private *) base->private;
+
+ rc = dasd_eckd_format_sanity_checks(base, fdata);
+ if (rc)
+ return rc;
INIT_LIST_HEAD(&format_queue);
@@ -2445,7 +2472,8 @@ dasd_eckd_format_device(struct dasd_device *base,
fdata->start_unit + format_step - 1;
}
- cqr = dasd_eckd_build_format(base, fdata, enable_pav);
+ cqr = dasd_eckd_format_build_ccw_req(base, fdata,
+ enable_pav);
if (IS_ERR(cqr)) {
rc = PTR_ERR(cqr);
if (rc == -ENOMEM) {
@@ -2492,6 +2520,12 @@ out:
return rc;
}
+static int dasd_eckd_format_device(struct dasd_device *base,
+ struct format_data_t *fdata, int enable_pav)
+{
+ return dasd_eckd_format_process_data(base, fdata, enable_pav);
+}
+
static void dasd_eckd_handle_terminated_request(struct dasd_ccw_req *cqr)
{
if (cqr->retries < 0) {