s390/dasd: string handling cleanups
Subsystems (3)
Stefan Haberland
maintainercover s390/dasd: string handling cleanups
Hi Jens,
looks like the patchset was not applied for the last merge window. So I am resending it rebased to the current for-next branch. Please apply the patches for the upcomming merge window. They clean up the string handling in the DASD driver.
In addition there is a patch that fixes double module refcount decrement.
Jan Höppner (10):
s390/dasd: Simplify uid string generation
s390/dasd: Use sysfs_emit() over sprintf() s390/dasd: Remove unnecessary errorstring generation s390/dasd: Move allocation error message to DBF s390/dasd: Remove unused message logging macros s390/dasd: Use dev_err() over printk()
s390/dasd: Remove %p format specifier from error messages s390/dasd: Remove PRINTK_HEADER and KMSG_COMPONENT definitions s390/dasd: Use dev_*() for device log messages s390/dasd: Improve ERP error messages
Miroslav Franc (1):
s390/dasd: fix double module refcount decrement
drivers/s390/block/dasd.c | 106 +++++++------------ drivers/s390/block/dasd_3990_erp.c | 80 ++++----------- drivers/s390/block/dasd_alias.c | 8 -- drivers/s390/block/dasd_devmap.c | 34 +++---- drivers/s390/block/dasd_diag.c | 4 - drivers/s390/block/dasd_eckd.c | 157 +++++++++++------------------ drivers/s390/block/dasd_eer.c | 7 -- drivers/s390/block/dasd_erp.c | 9 +- drivers/s390/block/dasd_fba.c | 55 ++++------ drivers/s390/block/dasd_genhd.c | 5 - drivers/s390/block/dasd_int.h | 29 ------ drivers/s390/block/dasd_ioctl.c | 6 -- drivers/s390/block/dasd_proc.c | 5 - 13 files changed, 154 insertions(+), 351 deletions(-)
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 1/11 s390/dasd: Simplify uid string generation
From: Jan Höppner <[email protected]>
There are two variants of the device uid string. One containing the virtual device unit information table (vduit) identifying the device as a virtual device located on a real device in a z/VM environment. The other variant does not contain those additional information.
Simplify the string generation with a shorter check of an existing vduit embedded in the snprintf() calls.
--- drivers/s390/block/dasd_devmap.c | 12 +++--------- drivers/s390/block/dasd_eckd.c | 16 ++++------------ 2 files changed, 7 insertions(+), 21 deletions(-)
drivers/s390/block/dasd_devmap.c +3 -9
@@ -1412,15 +1412,9 @@ dasd_uid_show(struct device *dev, struct device_attribute *attr, char *buf)break ; } -if (strlen (uid.vduit) >0 ) -snprintf (uid_string,sizeof (uid_string), -"%s.%s.%04x.%s.%s" , - uid.vendor, uid.serial, uid.ssid, ua_string, - uid.vduit); -else -snprintf (uid_string,sizeof (uid_string), -"%s.%s.%04x.%s" , - uid.vendor, uid.serial, uid.ssid, ua_string); +snprintf (uid_string,sizeof (uid_string),"%s.%s.%04x.%s%s%s" , + uid.vendor, uid.serial, uid.ssid, ua_string, + uid.vduit[0 ] ?"." :"" , uid.vduit); }dasd_put_device (device);
drivers/s390/block/dasd_eckd.c +4 -12
@@ -1072,22 +1072,14 @@ static void dasd_eckd_read_fc_security(struct dasd_device *device) } } -static void dasd_eckd_get_uid_string (struct dasd_conf *conf, -char *print_uid) +static void dasd_eckd_get_uid_string (struct dasd_conf *conf,char *print_uid) {struct dasd_uid uid;create_uid (conf, &uid); -if (strlen (uid.vduit) >0 ) -snprintf (print_uid,DASD_UID_STRLEN , -"%s.%s.%04x.%02x.%s" , - uid.vendor, uid.serial, uid.ssid, - uid.real_unit_addr, uid.vduit); -else -snprintf (print_uid,DASD_UID_STRLEN , -"%s.%s.%04x.%02x" , - uid.vendor, uid.serial, uid.ssid, - uid.real_unit_addr); +snprintf (print_uid,DASD_UID_STRLEN ,"%s.%s.%04x.%02x%s%s" , + uid.vendor, uid.serial, uid.ssid, uid.real_unit_addr, + uid.vduit[0 ] ?"." :"" , uid.vduit); } static int dasd_eckd_check_cabling(struct dasd_device *device,
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 2/11 s390/dasd: Use sysfs_emit() over sprintf()
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
sysfs_emit() should be used in show() functions. There are still a couple of functions that use sprintf().
Replace outstanding occurrences of sprintf() in all show() functions with sysfs_emit().
--- drivers/s390/block/dasd_devmap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/s390/block/dasd_devmap.c +9 -9
@@ -1114,7 +1114,7 @@ dasd_use_diag_show(struct device *dev, struct device_attribute *attr, char *buf) use_diag = (devmap->features &DASD_FEATURE_USEDIAG ) !=0 ; else use_diag = (DASD_FEATURE_DEFAULT &DASD_FEATURE_USEDIAG ) !=0 ; -return sprintf (buf, use_diag ?"1\n" :"0\n" ); +return sysfs_emit (buf, use_diag ?"1\n" :"0\n" ); } static ssize_t
@@ -1163,7 +1163,7 @@ dasd_use_raw_show(struct device *dev, struct device_attribute *attr, char *buf) use_raw = (devmap->features &DASD_FEATURE_USERAW ) !=0 ; else use_raw = (DASD_FEATURE_DEFAULT &DASD_FEATURE_USERAW ) !=0 ; -return sprintf (buf, use_raw ?"1\n" :"0\n" ); +return sysfs_emit (buf, use_raw ?"1\n" :"0\n" ); } static ssize_t
@@ -1259,7 +1259,7 @@ dasd_access_show(struct device *dev, struct device_attribute *attr,if (count <0 )return count; -return sprintf (buf,"%d\n" , count); +return sysfs_emit (buf,"%d\n" , count); } static DEVICE_ATTR(host_access_count, 0444, dasd_access_show, NULL);
@@ -1338,19 +1338,19 @@ static ssize_t dasd_alias_show(struct device *dev, device =dasd_device_from_cdev (to_ccwdev (dev));if (IS_ERR (device)) -return sprintf (buf,"0\n" ); +return sysfs_emit (buf,"0\n" );if (device->discipline && device->discipline->get_uid && !device->discipline->get_uid (device, &uid)) {if (uid.type ==UA_BASE_PAV_ALIAS || uid.type ==UA_HYPER_PAV_ALIAS ) {dasd_put_device (device); -return sprintf (buf,"1\n" ); +return sysfs_emit (buf,"1\n" ); } }dasd_put_device (device); -return sprintf (buf,"0\n" ); +return sysfs_emit (buf,"0\n" ); } static DEVICE_ATTR(alias, 0444, dasd_alias_show, NULL);
@@ -1856,7 +1856,7 @@ static ssize_t dasd_pm_show(struct device *dev, device =dasd_device_from_cdev (to_ccwdev (dev));if (IS_ERR (device)) -return sprintf (buf,"0\n" ); +return sysfs_emit (buf,"0\n" ); opm =dasd_path_get_opm (device); nppm =dasd_path_get_nppm (device);
@@ -1866,8 +1866,8 @@ static ssize_t dasd_pm_show(struct device *dev, ifccpm =dasd_path_get_ifccpm (device);dasd_put_device (device); -return sprintf (buf,"%02x %02x %02x %02x %02x %02x\n" , opm, nppm, - cablepm, cuirpm, hpfpm, ifccpm); +return sysfs_emit (buf,"%02x %02x %02x %02x %02x %02x\n" , opm, nppm, + cablepm, cuirpm, hpfpm, ifccpm); } static DEVICE_ATTR(path_masks, 0444, dasd_pm_show, NULL);
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 3/11 s390/dasd: Remove unnecessary errorstring generation
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
In quite a few cases an errorstring is generated using snprintf() before it's passed to dev_err(). This indirection is unnecessary and all information can simply be passed directly to dev_err() instead. The errrorstring and ERRORLENGTH definitions are removed entirely.
While at it, rephrase the error messages to provide more context where possible. Also, fix a few incorrectly used format specifier (e.g. %x02 -> %02x) in those messages.
--- drivers/s390/block/dasd.c | 26 ++++++-------------------- drivers/s390/block/dasd_3990_erp.c | 8 ++------ drivers/s390/block/dasd_int.h | 3 --- 3 files changed, 8 insertions(+), 29 deletions(-)
drivers/s390/block/dasd.c +6 -20
@@ -1301,7 +1301,6 @@ int dasd_term_IO(struct dasd_ccw_req *cqr) {struct dasd_device *device;int retries, rc; -char errorstring[ERRORLENGTH ];/* Check the cqr */ rc =dasd_check_cqr (cqr);
@@ -1340,10 +1339,8 @@ int dasd_term_IO(struct dasd_ccw_req *cqr) rc =0 ;break ;default : -/* internal error 10 - unknown rc*/ -snprintf (errorstring,ERRORLENGTH ,"10 %d" , rc); -dev_err (&device->cdev->dev,"An error occurred in the " -"DASD device driver, reason=%s\n" , errorstring); +dev_err (&device->cdev->dev, +"Unexpected error during request termination %d\n" , rc);BUG ();break ; }
@@ -1362,7 +1359,6 @@ int dasd_start_IO(struct dasd_ccw_req *cqr) {struct dasd_device *device;int rc; -char errorstring[ERRORLENGTH ];/* Check the cqr */ rc =dasd_check_cqr (cqr);
@@ -1382,10 +1378,8 @@ int dasd_start_IO(struct dasd_ccw_req *cqr)return -EPERM ; }if (cqr->retries <0 ) { -/* internal error 14 - start_IO run out of retries */ -sprintf (errorstring,"14 %p" , cqr); -dev_err (&device->cdev->dev,"An error occurred in the DASD " -"device driver, reason=%s\n" , errorstring); +dev_err (&device->cdev->dev, +"Start I/O ran out of retries %p\n" , cqr); cqr->status =DASD_CQR_ERROR ;return -EIO ; }
@@ -1463,11 +1457,8 @@ int dasd_start_IO(struct dasd_ccw_req *cqr) "not accessible");break ;default : -/* internal error 11 - unknown rc */ -snprintf (errorstring,ERRORLENGTH ,"11 %d" , rc);dev_err (&device->cdev->dev, -"An error occurred in the DASD device driver, " -"reason=%s\n" , errorstring); +"Unexpected error during request start %d" , rc);BUG ();break ; }
@@ -1904,8 +1895,6 @@ static void __dasd_device_process_ccw_queue(struct dasd_device *device,static void __dasd_process_cqr (struct dasd_device *device,struct dasd_ccw_req *cqr) { -char errorstring[ERRORLENGTH ]; -switch (cqr->status) {case DASD_CQR_SUCCESS : cqr->status =DASD_CQR_DONE ;
@@ -1917,11 +1906,8 @@ static void __dasd_process_cqr(struct dasd_device *device, cqr->status =DASD_CQR_TERMINATED ;break ;default : -/* internal error 12 - wrong cqr status*/ -snprintf (errorstring,ERRORLENGTH ,"12 %p %x02" , cqr, cqr->status);dev_err (&device->cdev->dev, -"An error occurred in the DASD device driver, " -"reason=%s\n" , errorstring); +"Unexpected CQR status %p %02x" , cqr, cqr->status);BUG (); }if (cqr->callback)
drivers/s390/block/dasd_3990_erp.c +2 -6
@@ -398,7 +398,6 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)struct dasd_device *device = erp->startdev;char msg_format = (sense[7 ] &0xF0 );char msg_no = (sense[7 ] &0x0F ); -char errorstring[ERRORLENGTH ];switch (msg_format) {case 0x00 :/* Format 0 - Program or System Checks */
@@ -1004,12 +1003,9 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense) }break ; -default :/* unknown message format - should not happen -internal error 03 - unknown message format */ -snprintf (errorstring,ERRORLENGTH ,"03 %x02" , msg_format); +default :dev_err (&device->cdev->dev, -"An error occurred in the DASD device driver, " -"reason=%s\n" , errorstring); +"Unknown message format %02x" , msg_format);break ; }/* end switch message format */
drivers/s390/block/dasd_int.h +0 -3
@@ -113,9 +113,6 @@ do { \ __dev_id.ssid, __dev_id.devno, d_data); \ }while (0 ) -/* limit size for an errorstring */ -#define ERRORLENGTH 30 - /* definition of dbf debug levels */#define DBF_EMERG 0/* system is unusable */ #define DBF_ALERT 1/* action must be taken immediately */
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 4/11 s390/dasd: Move allocation error message to DBF
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
All error messages for a failling dasd_smalloc_request() call are logged via DBF, except one. There is no value in logging this particular allocation failure via dev_err(). Move the message to DBF, too, to be in line with the rest.
--- drivers/s390/block/dasd.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/s390/block/dasd.c +2 -4
@@ -3963,10 +3963,8 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device, NULL);if (IS_ERR (cqr)) { -/* internal error 13 - Allocating the RDC request failed*/ -dev_err (&device->cdev->dev, -"An error occurred in the DASD device driver, " -"reason=%s\n" ,"13" ); +DBF_EVENT_DEVID (DBF_WARNING , device->cdev,"%s" , +"Could not allocate RDC request" );return cqr; }
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 5/11 s390/dasd: Remove unused message logging macros
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
The macros DEV_MESSAGE, MESSAGE, DEV_MESSAGE_LOG, and MESSAGE_LOG, are not used and there is no history anymore of any usage. Remove them.
--- drivers/s390/block/dasd_int.h | 26 -------------------------- 1 file changed, 26 deletions(-)
drivers/s390/block/dasd_int.h +0 -26
@@ -123,32 +123,6 @@ do { \#define DBF_INFO 6/* informational */ #define DBF_DEBUG 6/* debug-level messages */ -/* messages to be written via klogd and dbf */ -#define DEV_MESSAGE(d_loglevel,d_device,d_string,d_args...)\ -do { \ - printk(d_loglevel PRINTK_HEADER " %s: " d_string "\n", \ - dev_name(&d_device->cdev->dev), d_args); \ - DBF_DEV_EVENT(DBF_ALERT, d_device, d_string, d_args); \ -} while(0) - -#define MESSAGE(d_loglevel,d_string,d_args...)\ -do { \ - printk(d_loglevel PRINTK_HEADER " " d_string "\n", d_args); \ - DBF_EVENT(DBF_ALERT, d_string, d_args); \ -} while(0) - -/* messages to be written via klogd only */ -#define DEV_MESSAGE_LOG(d_loglevel,d_device,d_string,d_args...)\ -do { \ - printk(d_loglevel PRINTK_HEADER " %s: " d_string "\n", \ - dev_name(&d_device->cdev->dev), d_args); \ -} while(0) - -#define MESSAGE_LOG(d_loglevel,d_string,d_args...)\ -do { \ - printk(d_loglevel PRINTK_HEADER " " d_string "\n", d_args); \ -} while(0) -/* Macro to calculate number of blocks per page */ #define BLOCKS_PER_PAGE (blksize) (PAGE_SIZE / blksize)
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 6/11 s390/dasd: Use dev_err() over printk()
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
To reduce the information required for the string generation in the sense dump functions, use the more concise dev_err() variant over printk(KERN_ERR, ...) to improve code readability.
The dev_err() function provides the component and device name for free and the separate dev_name() calls as well as the PRINTK_HEADER can be dropped.
Dropping PRINTK_HEADER removes the "dasd(eckd):" for all lines. Only the first line of a dev_err() call is prefixed with the component and device (e.g. "dasd-eckd 0.0.95d0:").
The format specifier for printed pointers is also changed to unhashed (%px) as this can help with debugging and servicing.
--- drivers/s390/block/dasd_eckd.c | 139 +++++++++++++-------------------- drivers/s390/block/dasd_fba.c | 55 +++++-------- 2 files changed, 76 insertions(+), 118 deletions(-)
drivers/s390/block/dasd_eckd.c +55 -84
@@ -37,11 +37,6 @@#include "dasd_int.h" #include "dasd_eckd.h" -#ifdef PRINTK_HEADER -#undef PRINTK_HEADER -#endif /* PRINTK_HEADER */ -#define PRINTK_HEADER "dasd(eckd):" -/* * raw track access always map to 64k in memory * so it maps to 16 blocks of 4k per track
@@ -5521,15 +5516,15 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp)* and return number of printed chars. */ static void -dasd_eckd_dump_ccw_range (struct ccw1 *from,struct ccw1 *to,char *page) +dasd_eckd_dump_ccw_range (struct dasd_device *device,struct ccw1 *from, +struct ccw1 *to,char *page) {int len, count;char *datap; len =0 ;while (from <= to) { - len +=sprintf (page + len,PRINTK_HEADER -" CCW %p: %08X %08X DAT:" , + len +=sprintf (page + len,"CCW %px: %08X %08X DAT:" , from, ((int *) from)[0 ], ((int *) from)[1 ]);/* get pointer to data (consider IDALs) */
@@ -5552,7 +5547,7 @@ dasd_eckd_dump_ccw_range(struct ccw1 *from, struct ccw1 *to, char *page) from++; }if (len >0 ) -printk (KERN_ERR "%s" , page); +dev_err (&device->cdev->dev,"%s" , page); } static void
@@ -5583,9 +5578,12 @@ dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct irb *irb,static void dasd_eckd_dump_sense_ccw (struct dasd_device *device,struct dasd_ccw_req *req,struct irb *irb) { -char *page;struct ccw1 *first, *last, *fail, *from, *to; +struct device *dev;int len, sl, sct; +char *page; + + dev = &device->cdev->dev; page = (char *)get_zeroed_page (GFP_ATOMIC );if (page ==NULL ) {
@@ -5594,24 +5592,18 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device,return ; }/* dump the sense data */ - len =sprintf (page,PRINTK_HEADER -" I/O status report for device %s:\n" , -dev_name (&device->cdev->dev)); - len +=sprintf (page + len,PRINTK_HEADER -" in req: %p CC:%02X FC:%02X AC:%02X SC:%02X DS:%02X " -"CS:%02X RC:%d\n" , + len =sprintf (page,"I/O status report:\n" ); + len +=sprintf (page + len, +"in req: %px CC:%02X FC:%02X AC:%02X SC:%02X DS:%02X CS:%02X RC:%d\n" , req,scsw_cc (&irb->scsw),scsw_fctl (&irb->scsw),scsw_actl (&irb->scsw),scsw_stctl (&irb->scsw),scsw_dstat (&irb->scsw),scsw_cstat (&irb->scsw), req ? req->intrc :0 ); - len +=sprintf (page + len,PRINTK_HEADER -" device %s: Failing CCW: %p\n" , -dev_name (&device->cdev->dev), + len +=sprintf (page + len,"Failing CCW: %px\n" ,phys_to_virt (irb->scsw.cmd.cpa));if (irb->esw.esw0.erw.cons) {for (sl =0 ; sl <4 ; sl++) { - len +=sprintf (page + len,PRINTK_HEADER -" Sense(hex) %2d-%2d:" , + len +=sprintf (page + len,"Sense(hex) %2d-%2d:" , (8 * sl), ((8 * sl) +7 ));for (sct =0 ; sct <8 ; sct++) {
@@ -5623,23 +5615,20 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device,if (irb->ecw[27 ] &DASD_SENSE_BIT_0 ) {/* 24 Byte Sense Data */ -sprintf (page + len,PRINTK_HEADER -" 24 Byte: %x MSG %x, " -"%s MSGb to SYSOP\n" , +sprintf (page + len, +"24 Byte: %x MSG %x, %s MSGb to SYSOP\n" , irb->ecw[7 ] >>4 , irb->ecw[7 ] &0x0f , irb->ecw[1 ] &0x10 ?"" :"no" ); }else {/* 32 Byte Sense Data */ -sprintf (page + len,PRINTK_HEADER -" 32 Byte: Format: %x " -"Exception class %x\n" , +sprintf (page + len, +"32 Byte: Format: %x Exception class %x\n" , irb->ecw[6 ] &0x0f , irb->ecw[22 ] >>4 ); } }else { -sprintf (page + len,PRINTK_HEADER -" SORRY - NO VALID SENSE AVAILABLE\n" ); +sprintf (page + len,"SORRY - NO VALID SENSE AVAILABLE\n" ); } -printk (KERN_ERR "%s" , page); +dev_err (dev,"%s" , page);if (req) {/* req == NULL for unsolicited interrupts */
@@ -5648,8 +5637,8 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device, first = req->cpaddr;for (last = first; last->flags & (CCW_FLAG_CC |CCW_FLAG_DC ); last++); to =min (first +6 , last); - printk(KERN_ERR PRINTK_HEADER " Related CP in req: %p\n", req); -dasd_eckd_dump_ccw_range (first, to, page); +dev_err (dev,"Related CP in req: %px\n" , req); +dasd_eckd_dump_ccw_range (device, first, to, page);/* print failing CCW area (maximum 4) */ /* scsw->cda is either valid or zero */
@@ -5657,19 +5646,19 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device, fail =phys_to_virt (irb->scsw.cmd.cpa);/* failing CCW */ if (from < fail -2 ) { from = fail -2 ;/* there is a gap - print header */ - printk(KERN_ERR PRINTK_HEADER "......\n"); +dev_err (dev,"......\n" ); } to =min (fail +1 , last); -dasd_eckd_dump_ccw_range (from, to, page + len); +dasd_eckd_dump_ccw_range (device, from, to, page + len);/* print last CCWs (maximum 2) */ len =0 ; from =max (from, ++to);if (from < last -1 ) { from = last -1 ;/* there is a gap - print header */ - printk(KERN_ERR PRINTK_HEADER "......\n"); +dev_err (dev,"......\n" ); } -dasd_eckd_dump_ccw_range (from, last, page + len); +dasd_eckd_dump_ccw_range (device, from, last, page + len); }free_page ((unsigned long ) page); }
@@ -5693,11 +5682,9 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device,return ; }/* dump the sense data */ - len =sprintf (page,PRINTK_HEADER -" I/O status report for device %s:\n" , -dev_name (&device->cdev->dev)); - len += sprintf(page + len, PRINTK_HEADER - " in req: %p CC:%02X FC:%02X AC:%02X SC:%02X DS:%02X " + len =sprintf (page,"I/O status report:\n" ); + len += sprintf(page + len, + "in req: %px CC:%02X FC:%02X AC:%02X SC:%02X DS:%02X " "CS:%02X fcxs:%02X schxs:%02X RC:%d\n", req, scsw_cc(&irb->scsw), scsw_fctl(&irb->scsw), scsw_actl(&irb->scsw), scsw_stctl(&irb->scsw),
@@ -5705,9 +5692,7 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device, irb->scsw.tm.fcxs, (irb->scsw.tm.ifob <<7 ) | irb->scsw.tm.sesq, req ? req->intrc : 0); - len +=sprintf (page + len,PRINTK_HEADER -" device %s: Failing TCW: %p\n" , -dev_name (&device->cdev->dev), + len +=sprintf (page + len,"Failing TCW: %px\n" ,phys_to_virt (irb->scsw.tm.tcw)); tsb =NULL ;
@@ -5716,47 +5701,37 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device, tsb =tcw_get_tsb (phys_to_virt (irb->scsw.tm.tcw));if (tsb) { - len +=sprintf (page + len,PRINTK_HEADER -" tsb->length %d\n" , tsb->length); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->flags %x\n" , tsb->flags); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->dcw_offset %d\n" , tsb->dcw_offset); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->count %d\n" , tsb->count); + len +=sprintf (page + len,"tsb->length %d\n" , tsb->length); + len +=sprintf (page + len,"tsb->flags %x\n" , tsb->flags); + len +=sprintf (page + len,"tsb->dcw_offset %d\n" , tsb->dcw_offset); + len +=sprintf (page + len,"tsb->count %d\n" , tsb->count); residual = tsb->count -28 ; - len +=sprintf (page + len,PRINTK_HEADER -" residual %d\n" , residual); + len +=sprintf (page + len,"residual %d\n" , residual);switch (tsb->flags &0x07 ) {case 1 :/* tsa_iostat */ - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.iostat.dev_time %d\n" , + len +=sprintf (page + len,"tsb->tsa.iostat.dev_time %d\n" , tsb->tsa.iostat.dev_time); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.iostat.def_time %d\n" , + len +=sprintf (page + len,"tsb->tsa.iostat.def_time %d\n" , tsb->tsa.iostat.def_time); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.iostat.queue_time %d\n" , + len +=sprintf (page + len,"tsb->tsa.iostat.queue_time %d\n" , tsb->tsa.iostat.queue_time); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.iostat.dev_busy_time %d\n" , + len +=sprintf (page + len,"tsb->tsa.iostat.dev_busy_time %d\n" , tsb->tsa.iostat.dev_busy_time); - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.iostat.dev_act_time %d\n" , + len +=sprintf (page + len,"tsb->tsa.iostat.dev_act_time %d\n" , tsb->tsa.iostat.dev_act_time); sense = tsb->tsa.iostat.sense;break ;case 2 :/* ts_ddpc */ - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.ddpc.rc %d\n" , tsb->tsa.ddpc.rc); + len +=sprintf (page + len,"tsb->tsa.ddpc.rc %d\n" , + tsb->tsa.ddpc.rc);for (sl =0 ; sl <2 ; sl++) { - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.ddpc.rcq %2d-%2d: " , + len +=sprintf (page + len, +"tsb->tsa.ddpc.rcq %2d-%2d: " , (8 * sl), ((8 * sl) +7 )); rcq = tsb->tsa.ddpc.rcq;for (sct =0 ; sct <8 ; sct++) { - len +=sprintf (page + len," %02x" , + len +=sprintf (page + len,"%02x" , rcq[8 * sl + sct]); } len +=sprintf (page + len,"\n" );
@@ -5764,15 +5739,15 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device, sense = tsb->tsa.ddpc.sense;break ;case 3 :/* tsa_intrg */ - len +=sprintf (page + len,PRINTK_HEADER -" tsb->tsa.intrg.: not supported yet\n" ); + len +=sprintf (page + len, +"tsb->tsa.intrg.: not supported yet\n" );break ; }if (sense) {for (sl =0 ; sl <4 ; sl++) { - len +=sprintf (page + len,PRINTK_HEADER -" Sense(hex) %2d-%2d:" , + len +=sprintf (page + len, +"Sense(hex) %2d-%2d:" , (8 * sl), ((8 * sl) +7 ));for (sct =0 ; sct <8 ; sct++) { len += sprintf(page + len, " %02x",
@@ -5783,27 +5758,23 @@ static void dasd_eckd_dump_sense_tcw(struct dasd_device *device,if (sense[27 ] &DASD_SENSE_BIT_0 ) {/* 24 Byte Sense Data */ -sprintf (page + len,PRINTK_HEADER -" 24 Byte: %x MSG %x, " -"%s MSGb to SYSOP\n" , +sprintf (page + len, +"24 Byte: %x MSG %x, %s MSGb to SYSOP\n" , sense[7 ] >>4 , sense[7 ] &0x0f , sense[1 ] &0x10 ?"" :"no" ); }else {/* 32 Byte Sense Data */ -sprintf (page + len,PRINTK_HEADER -" 32 Byte: Format: %x " -"Exception class %x\n" , +sprintf (page + len, +"32 Byte: Format: %x Exception class %x\n" , sense[6 ] &0x0f , sense[22 ] >>4 ); } }else { -sprintf (page + len,PRINTK_HEADER -" SORRY - NO VALID SENSE AVAILABLE\n" ); +sprintf (page + len,"SORRY - NO VALID SENSE AVAILABLE\n" ); } }else { -sprintf (page + len,PRINTK_HEADER -" SORRY - NO TSB DATA AVAILABLE\n" ); +sprintf (page + len,"SORRY - NO TSB DATA AVAILABLE\n" ); } -printk (KERN_ERR "%s" , page); +dev_err (&device->cdev->dev,"%s" , page);free_page ((unsigned long ) page); }
drivers/s390/block/dasd_fba.c +21 -34
119 lines not on this page · raw message
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 7/11 s390/dasd: Remove %p format specifier from error messages
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
Printing pointer in error messages doesn't add any value since the addresses are hashed. Remove the %p format specifier and adapt the error messages slightly.
Replace %p with %px in ERP to get the actual addresses since ERP is used for debugging purposes only anyway.
--- drivers/s390/block/dasd.c | 20 ++++++++------------ drivers/s390/block/dasd_3990_erp.c | 14 +++++--------- drivers/s390/block/dasd_erp.c | 4 ++-- 3 files changed, 15 insertions(+), 23 deletions(-)
drivers/s390/block/dasd.c +8 -12
@@ -1379,7 +1379,7 @@ int dasd_start_IO(struct dasd_ccw_req *cqr) }if (cqr->retries <0 ) {dev_err (&device->cdev->dev, -"Start I/O ran out of retries %p\n" , cqr); +"Start I/O ran out of retries\n" ); cqr->status =DASD_CQR_ERROR ;return -EIO ; }
@@ -1907,7 +1907,7 @@ static void __dasd_process_cqr(struct dasd_device *device,break ;default :dev_err (&device->cdev->dev, -"Unexpected CQR status %p %02x" , cqr, cqr->status); +"Unexpected CQR status %02x" , cqr->status);BUG (); }if (cqr->callback)
@@ -1972,16 +1972,14 @@ static void __dasd_device_check_expire(struct dasd_device *device)if (device->discipline->term_IO (cqr) !=0 ) {/* Hmpf, try again in 5 sec */ dev_err (&device->cdev->dev, -"cqr %p timed out (%lus) but cannot be " -"ended, retrying in 5 s\n" , - cqr, (cqr->expires/HZ )); +"CQR timed out (%lus) but cannot be ended, retrying in 5s\n" , + (cqr->expires /HZ )); cqr->expires +=5 *HZ ;dasd_device_set_timer (device,5 *HZ ); }else {dev_err (&device->cdev->dev, -"cqr %p timed out (%lus), %i retries " -"remaining\n" , cqr, (cqr->expires/HZ ), - cqr->retries); +"CQR timed out (%lus), %i retries remaining\n" , + (cqr->expires /HZ ), cqr->retries); }__dasd_device_check_autoquiesce_timeout (device, cqr); }
@@ -2102,8 +2100,7 @@ int dasd_flush_device_queue(struct dasd_device *device)if (rc) {/* unable to terminate requeust */ dev_err (&device->cdev->dev, -"Flushing the DASD request queue " -"failed for request %p\n" , cqr); +"Flushing the DASD request queue failed\n" );/* stop flush processing */ goto finished; }
@@ -2619,8 +2616,7 @@ static int __dasd_cancel_req(struct dasd_ccw_req *cqr) rc = device->discipline->term_IO (cqr);if (rc) {dev_err (&device->cdev->dev, -"Cancelling request %p failed with rc=%d\n" , - cqr, rc); +"Cancelling request failed with rc=%d\n" , rc); }else { cqr->stopclk =get_tod_clock (); }
drivers/s390/block/dasd_3990_erp.c +5 -9
@@ -2659,7 +2659,7 @@ dasd_3990_erp_further_erp(struct dasd_ccw_req *erp)* necessary */ dev_err (&device->cdev->dev, -"ERP %p has run out of retries and failed\n" , erp); +"ERP %px has run out of retries and failed\n" , erp); erp->status =DASD_CQR_FAILED ; }
@@ -2782,11 +2782,9 @@ dasd_3990_erp_action(struct dasd_ccw_req * cqr) "ERP chain at BEGINNING of ERP-ACTION\n");for (temp_erp = cqr; temp_erp !=NULL ; temp_erp = temp_erp->refers) { -dev_err (&device->cdev->dev, -"ERP %p (%02x) refers to %p\n" , - temp_erp, temp_erp->status, - temp_erp->refers); +"ERP %px (%02x) refers to %px\n" , + temp_erp, temp_erp->status, temp_erp->refers); } }
@@ -2833,11 +2831,9 @@ dasd_3990_erp_action(struct dasd_ccw_req * cqr) "ERP chain at END of ERP-ACTION\n");for (temp_erp = erp; temp_erp !=NULL ; temp_erp = temp_erp->refers) { -dev_err (&device->cdev->dev, -"ERP %p (%02x) refers to %p\n" , - temp_erp, temp_erp->status, - temp_erp->refers); +"ERP %px (%02x) refers to %px\n" , + temp_erp, temp_erp->status, temp_erp->refers); } }
drivers/s390/block/dasd_erp.c +2 -2
@@ -170,12 +170,12 @@ dasd_log_sense(struct dasd_ccw_req *cqr, struct irb *irb) device = cqr->startdev;if (cqr->intrc == -ETIMEDOUT ) {dev_err (&device->cdev->dev, -"A timeout error occurred for cqr %p\n" , cqr); +"A timeout error occurred for cqr %px\n" , cqr);return ; }if (cqr->intrc == -ENOLINK ) {dev_err (&device->cdev->dev, -"A transport error occurred for cqr %p\n" , cqr); +"A transport error occurred for cqr %px\n" , cqr);return ; }/* dump sense data */
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 8/11 s390/dasd: Remove PRINTK_HEADER and KMSG_COMPONENT definitions
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
PRINTK_HEADER was mainly used to prefix log messages with the module name. Most components don't use this definition anymore. Either because there are no log messages being generated anymore, or pr_*() were replaced by dev_*(), which contains device and component information already.
PRINTK_HEADER is also dropped in the function dasd_3990_erp_handle_match_erp() in dasd_3990_erp.c from a panic() call as panic() already provides all relevant information.
KMSG_COMPONENT was mainly used to identify a component in a long gone kernel message catalog feature.
Remove both definition since they're either not used or alternatives make the code slightly shorter and more readable.
--- drivers/s390/block/dasd.c | 3 --- drivers/s390/block/dasd_3990_erp.c | 7 +------ drivers/s390/block/dasd_alias.c | 8 -------- drivers/s390/block/dasd_devmap.c | 4 ---- drivers/s390/block/dasd_diag.c | 4 ---- drivers/s390/block/dasd_eckd.c | 2 -- drivers/s390/block/dasd_eer.c | 7 ------- drivers/s390/block/dasd_erp.c | 5 ----- drivers/s390/block/dasd_genhd.c | 5 ----- drivers/s390/block/dasd_ioctl.c | 6 ------ drivers/s390/block/dasd_proc.c | 5 ----- 11 files changed, 1 insertion(+), 55 deletions(-)
drivers/s390/block/dasd.c +0 -3
@@ -30,9 +30,6 @@#include <asm/itcw.h> #include <asm/diag.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd:" -#include "dasd_int.h" /* * SECTION: Constant definitions to be used within this file
drivers/s390/block/dasd_3990_erp.c +1 -6
@@ -7,13 +7,9 @@* */ -#define KMSG_COMPONENT "dasd-eckd" -#include <linux/timer.h> #include <asm/idals.h> -#define PRINTK_HEADER "dasd_erp(3990): " -#include "dasd_int.h" #include "dasd_eckd.h"
@@ -2700,8 +2696,7 @@ dasd_3990_erp_handle_match_erp(struct dasd_ccw_req *erp_head,while (erp_done != erp) {if (erp_done ==NULL )/* end of chain reached */ -panic (PRINTK_HEADER "Programming error in ERP! The " -"original request was lost\n" ); +panic ("Programming error in ERP! The original request was lost\n" );/* remove the request from the device queue */ list_del (&erp_done->blocklist);
drivers/s390/block/dasd_alias.c +0 -8
@@ -6,20 +6,12 @@* Author(s): Stefan Weinhuber <[email protected]> */ -#define KMSG_COMPONENT "dasd-eckd" -#include <linux/list.h> #include <linux/slab.h> #include <asm/ebcdic.h> #include "dasd_int.h" #include "dasd_eckd.h" -#ifdef PRINTK_HEADER -#undef PRINTK_HEADER -#endif /* PRINTK_HEADER */ -#define PRINTK_HEADER "dasd(eckd):" - -/* * General concept of alias management: * - PAV and DASD alias management is specific to the eckd discipline.
drivers/s390/block/dasd_devmap.c +0 -4
@@ -13,8 +13,6 @@* */ -#define KMSG_COMPONENT "dasd" -#include <linux/ctype.h> #include <linux/init.h> #include <linux/module.h>
@@ -24,8 +22,6 @@#include <linux/uaccess.h> #include <asm/ipl.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd_devmap:"#define DASD_MAX_PARAMS 256#include "dasd_int.h"
drivers/s390/block/dasd_diag.c +0 -4
@@ -8,8 +8,6 @@* */ -#define KMSG_COMPONENT "dasd" -#include <linux/kernel_stat.h> #include <linux/stddef.h> #include <linux/kernel.h>
@@ -31,8 +29,6 @@#include "dasd_int.h" #include "dasd_diag.h" -#define PRINTK_HEADER "dasd(diag):" -MODULE_LICENSE ("GPL" );/* The maximum number of blocks per request (max_blocks) is dependent on the
drivers/s390/block/dasd_eckd.c +0 -2
@@ -10,8 +10,6 @@* Author.........: Nigel Hislop <[email protected]> */ -#define KMSG_COMPONENT "dasd-eckd" -#include <linux/stddef.h> #include <linux/kernel.h> #include <linux/slab.h>
drivers/s390/block/dasd_eer.c +0 -7
@@ -7,8 +7,6 @@* Author(s): Stefan Weinhuber <[email protected]> */ -#define KMSG_COMPONENT "dasd-eckd" -#include <linux/init.h> #include <linux/fs.h> #include <linux/kernel.h>
@@ -28,11 +26,6 @@#include "dasd_int.h" #include "dasd_eckd.h" -#ifdef PRINTK_HEADER -#undef PRINTK_HEADER -#endif /* PRINTK_HEADER */ -#define PRINTK_HEADER "dasd(eer):" -/* * SECTION: the internal buffer */
drivers/s390/block/dasd_erp.c +0 -5
@@ -9,8 +9,6 @@* */ -#define KMSG_COMPONENT "dasd" -#include <linux/ctype.h> #include <linux/init.h>
@@ -18,9 +16,6 @@#include <asm/ebcdic.h> #include <linux/uaccess.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd_erp:" -#include "dasd_int.h" struct dasd_ccw_req *
drivers/s390/block/dasd_genhd.c +0 -5
@@ -11,8 +11,6 @@* */ -#define KMSG_COMPONENT "dasd" -#include <linux/interrupt.h> #include <linux/major.h> #include <linux/fs.h>
@@ -20,9 +18,6 @@#include <linux/uaccess.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd_gendisk:" -#include "dasd_int.h" static unsigned int queue_depth =32 ;
drivers/s390/block/dasd_ioctl.c +0 -6
@@ -10,8 +10,6 @@* i/o controls for the dasd driver. */ -#define KMSG_COMPONENT "dasd" -#include <linux/interrupt.h> #include <linux/compat.h> #include <linux/major.h>
@@ -24,12 +22,8 @@#include <linux/uaccess.h> #include <linux/dasd_mod.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd_ioctl:" -#include "dasd_int.h" -static int dasd_ioctl_api_version (void __user *argp) {
drivers/s390/block/dasd_proc.c +0 -5
@@ -11,8 +11,6 @@* */ -#define KMSG_COMPONENT "dasd" -#include <linux/ctype.h> #include <linux/slab.h> #include <linux/string.h>
@@ -23,9 +21,6 @@#include <asm/debug.h> #include <linux/uaccess.h> -/* This is ugly... */ -#define PRINTK_HEADER "dasd_proc:" -#include "dasd_int.h" static struct proc_dir_entry *dasd_proc_root_entry =NULL ;
Signature · 1 line
2.40.1
Stefan Haberland
maintainerPATCH RESEND 9/11 s390/dasd: Use dev_*() for device log messages
In reply to Stefan HaberlandFrom: Jan Höppner <[email protected]>
All log messages in dasd.c use the printk variants of pr_*(). They all add the name of the affected device manually to the log message. This can be simplified by using the dev_*() variants of printk, which include the device information and make a separate call to dev_name() unnecessary.
The KMSG_COMPONENT and the pr_fmt() definition can be dropped. Note that this removes the "dasd: " prefix from the one pr_info() call in dasd_init(). However, the log message already provides all relevant information.
--- drivers/s390/block/dasd.c | 50 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 26 deletions(-)
drivers/s390/block/dasd.c +24 -26
@@ -8,9 +8,6 @@* Copyright IBM Corp. 1999, 2009 */ -#define KMSG_COMPONENT "dasd" -#define pr_fmt (fmt) KMSG_COMPONENT ": " fmt -#include <linux/kmod.h> #include <linux/init.h> #include <linux/interrupt.h>
@@ -3381,8 +3378,7 @@ static void dasd_generic_auto_online(void *data, async_cookie_t cookie) ret =ccw_device_set_online (cdev);if (ret) -pr_warn ("%s: Setting the DASD online failed with rc=%d\n" , -dev_name (&cdev->dev), ret); +dev_warn (&cdev->dev,"Setting the DASD online failed with rc=%d\n" , ret); }/*
@@ -3469,8 +3465,11 @@ int dasd_generic_set_online(struct ccw_device *cdev, {struct dasd_discipline *discipline;struct dasd_device *device; +struct device *dev;int rc; + dev = &cdev->dev; +/* first online clears initial online feature flag */ dasd_set_feature (cdev,DASD_FEATURE_INITIAL_ONLINE ,0 ); device =dasd_create_device (cdev);
@@ -3483,11 +3482,10 @@ int dasd_generic_set_online(struct ccw_device *cdev,/* Try to load the required module. */ rc =request_module (DASD_DIAG_MOD );if (rc) { -pr_warn ("%s Setting the DASD online failed " -"because the required module %s " -"could not be loaded (rc=%d)\n" , -dev_name (&cdev->dev),DASD_DIAG_MOD , - rc); +dev_warn (dev,"Setting the DASD online failed " +"because the required module %s " +"could not be loaded (rc=%d)\n" , +DASD_DIAG_MOD , rc);dasd_delete_device (device);return -ENODEV ; }
@@ -3495,8 +3493,7 @@ int dasd_generic_set_online(struct ccw_device *cdev,/* Module init could have failed, so check again here after * request_module(). */ if (!dasd_diag_discipline_pointer) { -pr_warn ("%s Setting the DASD online failed because of missing DIAG discipline\n" , -dev_name (&cdev->dev)); +dev_warn (dev,"Setting the DASD online failed because of missing DIAG discipline\n" );dasd_delete_device (device);return -ENODEV ; }
@@ -3517,8 +3514,8 @@ int dasd_generic_set_online(struct ccw_device *cdev,/* check_device will allocate block device if necessary */ rc = discipline->check_device (device);if (rc) { -pr_warn ("%s Setting the DASD online with discipline %s failed with rc=%i\n" , -dev_name (&cdev->dev), discipline->name, rc); +dev_warn (dev,"Setting the DASD online with discipline %s failed with rc=%i\n" , + discipline->name, rc);module_put (discipline->owner);module_put (base_discipline->owner);dasd_delete_device (device);
@@ -3527,16 +3524,15 @@ int dasd_generic_set_online(struct ccw_device *cdev,dasd_set_target_state (device,DASD_STATE_ONLINE );if (device->state <=DASD_STATE_KNOWN ) { -pr_warn ("%s Setting the DASD online failed because of a missing discipline\n" , -dev_name (&cdev->dev)); +dev_warn (dev,"Setting the DASD online failed because of a missing discipline\n" ); rc = -ENODEV ;dasd_set_target_state (device,DASD_STATE_NEW );if (device->block)dasd_free_block (device->block);dasd_delete_device (device); - }else -pr_debug ("dasd_generic device %s found\n" , -dev_name (&cdev->dev)); + }else { +dev_dbg (dev,"dasd_generic device found\n" ); + }wait_event (dasd_init_waitq,_wait_for_device (device));
@@ -3547,10 +3543,13 @@ EXPORT_SYMBOL_GPL(dasd_generic_set_online);int dasd_generic_set_offline (struct ccw_device *cdev) { +int max_count, open_count, rc;struct dasd_device *device;struct dasd_block *block; -int max_count, open_count, rc;unsigned long flags; +struct device *dev; + + dev = &cdev->dev; rc =0 ;spin_lock_irqsave (get_ccwdev_lock (cdev), flags);
@@ -3571,11 +3570,10 @@ int dasd_generic_set_offline(struct ccw_device *cdev) open_count =atomic_read (&device->block->open_count);if (open_count > max_count) {if (open_count >0 ) -pr_warn ("%s: The DASD cannot be set offline with open count %i\n" , -dev_name (&cdev->dev), open_count); +dev_warn (dev,"The DASD cannot be set offline with open count %i\n" , + open_count);else -pr_warn ("%s: The DASD cannot be set offline while it is in use\n" , -dev_name (&cdev->dev)); +dev_warn (dev,"The DASD cannot be set offline while it is in use\n" ); rc = -EBUSY ; goto out_err; }
@@ -3935,8 +3933,8 @@ static int dasd_handle_autoquiesce(struct dasd_device *device,if (dasd_eer_enabled (device))dasd_eer_write (device,NULL ,DASD_EER_AUTOQUIESCE ); -pr_info ("%s: The DASD has been put in the quiesce state\n" , -dev_name (&device->cdev->dev)); +dev_info (&device->cdev->dev, +"The DASD has been put in the quiesce state\n" );dasd_device_set_stop_bits (device,DASD_STOPPED_QUIESCE );if (device->features &DASD_FEATURE_REQUEUEQUIESCE )
Signature · 1 line
2.40.1
Quoted 8 lines · Stefan Haberland
looks like the patchset was not applied for the last merge window. So I am resending it rebased to the current for-next branch. Please apply the patches for the upcomming merge window. They clean up the string handling in the DASD driver.
In addition there is a patch that fixes double module refcount decrement.
[...]
Applied, thanks!
[01/11] s390/dasd: Simplify uid string generation
commit: e5de34db1e95ef549236f9a2630d396a41c208a2
[02/11] s390/dasd: Use sysfs_emit() over sprintf()
commit: 9c386d0f6e04fee1b4161e49f8e9f5756bcab04c
[03/11] s390/dasd: Remove unnecessary errorstring generation
commit: 8d7ac904c90be7a1ed1aafa34953c40270c30bd0
[04/11] s390/dasd: Move allocation error message to DBF
commit: 4849494f05994f411c9cc0504843c6adefd1f2de
[05/11] s390/dasd: Remove unused message logging macros
commit: 32312cf229117b781bd02d93b0b11c8b47dfcc0a
[06/11] s390/dasd: Use dev_err() over printk()
commit: 0b3644b475e2564abe26a916af8447beb7c4966b
[07/11] s390/dasd: Remove %p format specifier from error messages
commit: 4ba6366dbb03c2a58d0e7cbe140942bcf715006c
[08/11] s390/dasd: Remove PRINTK_HEADER and KMSG_COMPONENT definitions
commit: c6c6c69df6598aacf3921f26f89b12d5e321ea83
[09/11] s390/dasd: Use dev_*() for device log messages
commit: 79ae56fc475869d636071f66d9e4ef2a3819eee6Best regards,
Signature · 1 line
Jens Axboe