Skip to content

Commit

Permalink
s390/dasd: Refactor dasd format functions
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jan Höppner authored and Martin Schwidefsky committed Mar 7, 2016
1 parent 8542885 commit 570d237
Showing 1 changed file with 46 additions and 12 deletions.
58 changes: 46 additions & 12 deletions drivers/s390/block/dasd_eckd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);

Expand All @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 570d237

Please sign in to comment.