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>
This commit is contained in:
Jan Höppner 2015-08-19 11:16:35 +02:00 committed by Martin Schwidefsky
parent 8542885bf5
commit 570d237c19
1 changed files with 46 additions and 12 deletions

View 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 @@ dasd_eckd_format_device(struct dasd_device *base,
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) {