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:
parent
8542885bf5
commit
570d237c19
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue