Commit 570d237c authored by Jan Höppner's avatar Jan Höppner Committed by Martin Schwidefsky

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: default avatarJan Höppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 8542885b
...@@ -2386,22 +2386,26 @@ dasd_eckd_build_format(struct dasd_device *base, ...@@ -2386,22 +2386,26 @@ dasd_eckd_build_format(struct dasd_device *base,
return fcp; return fcp;
} }
static int /*
dasd_eckd_format_device(struct dasd_device *base, * Wrapper function to build a CCW request depending on input data
struct format_data_t *fdata, */
int enable_pav) 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 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; private = (struct dasd_eckd_private *) base->private;
/* Sanity checks. */
if (fdata->start_unit >= if (fdata->start_unit >=
(private->real_cyl * private->rdc_data.trk_per_cyl)) { (private->real_cyl * private->rdc_data.trk_per_cyl)) {
dev_warn(&base->cdev->dev, dev_warn(&base->cdev->dev,
...@@ -2428,6 +2432,29 @@ dasd_eckd_format_device(struct dasd_device *base, ...@@ -2428,6 +2432,29 @@ dasd_eckd_format_device(struct dasd_device *base,
fdata->blksize); fdata->blksize);
return -EINVAL; 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); INIT_LIST_HEAD(&format_queue);
...@@ -2445,7 +2472,8 @@ dasd_eckd_format_device(struct dasd_device *base, ...@@ -2445,7 +2472,8 @@ dasd_eckd_format_device(struct dasd_device *base,
fdata->start_unit + format_step - 1; 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)) { if (IS_ERR(cqr)) {
rc = PTR_ERR(cqr); rc = PTR_ERR(cqr);
if (rc == -ENOMEM) { if (rc == -ENOMEM) {
...@@ -2492,6 +2520,12 @@ dasd_eckd_format_device(struct dasd_device *base, ...@@ -2492,6 +2520,12 @@ dasd_eckd_format_device(struct dasd_device *base,
return rc; 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) static void dasd_eckd_handle_terminated_request(struct dasd_ccw_req *cqr)
{ {
if (cqr->retries < 0) { if (cqr->retries < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment