s390/dasd: Refactor dasd format functions
authorJan Höppner <hoeppner@linux.vnet.ibm.com>
Wed, 19 Aug 2015 09:16:35 +0000 (11:16 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 7 Mar 2016 12:12:00 +0000 (13:12 +0100)
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>
drivers/s390/block/dasd_eckd.c

index 8181d67249425eb5a9e138f4dd331ea7f2286097..e679209755cfcc73f9ae8f0371129564d88c1cf0 100644 (file)
@@ -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) {