Skip to content

Commit

Permalink
s390/dasd: Always store parameter elements in an array
Browse files Browse the repository at this point in the history
When the DASD driver is built into the kernel, the entire comma
separated parameter list is stored as one single element in the dasd[]
array, opposed to the module build where each element is stored
separately in dasd[].
There is no point in doing so. Therefore, store each part of the list as
single elements in dasd[] as well when built into the kernel.
Also, create a define for the maximum of 256 parameters.

Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Reviewed-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
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 Jan 31, 2017
1 parent 7fbe5c0 commit 09762dc
Showing 1 changed file with 16 additions and 16 deletions.
32 changes: 16 additions & 16 deletions drivers/s390/block/dasd_devmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
/* This is ugly... */
#define PRINTK_HEADER "dasd_devmap:"
#define DASD_BUS_ID_SIZE 20
#define DASD_MAX_PARAMS 256

#include "dasd_int.h"

Expand Down Expand Up @@ -76,7 +77,7 @@ EXPORT_SYMBOL_GPL(dasd_nofcx);
* it is named 'dasd' to directly be filled by insmod with the comma separated
* strings when running as a module.
*/
static char *dasd[256];
static char *dasd[DASD_MAX_PARAMS];
module_param_array(dasd, charp, NULL, S_IRUGO);

/*
Expand Down Expand Up @@ -104,18 +105,19 @@ dasd_hash_busid(const char *bus_id)
}

#ifndef MODULE
/*
* The parameter parsing functions for builtin-drivers are called
* before kmalloc works. Store the pointers to the parameters strings
* into dasd[] for later processing.
*/
static int __init
dasd_call_setup(char *str)
static int __init dasd_call_setup(char *opt)
{
static int count = 0;
static int i;
char *tmp;

while (i < DASD_MAX_PARAMS) {
tmp = strsep(&opt, ",");
if (!tmp)
break;

dasd[i++] = tmp;
}

if (count < 256)
dasd[count++] = str;
return 1;
}

Expand Down Expand Up @@ -364,10 +366,8 @@ dasd_parse_next_element( char *parsestring ) {
/*
* Parse parameters stored in dasd[]
* The 'dasd=...' parameter allows to specify a comma separated list of
* keywords and device ranges. When the dasd driver is build into the kernel,
* the complete list will be stored as one element of the dasd[] array.
* When the dasd driver is build as a module, then the list is broken into
* it's elements and each dasd[] entry contains one element.
* keywords and device ranges. The parameters in that list will be stored as
* separate elementes in dasd[].
*/
int
dasd_parse(void)
Expand All @@ -376,7 +376,7 @@ dasd_parse(void)
char *parsestring;

rc = 0;
for (i = 0; i < 256; i++) {
for (i = 0; i < DASD_MAX_PARAMS; i++) {
if (dasd[i] == NULL)
break;
parsestring = dasd[i];
Expand Down

0 comments on commit 09762dc

Please sign in to comment.