aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHorst Hummel <horst.hummel@de.ibm.com>2005-01-14 23:33:00 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-14 23:33:00 -0800
commit20f9cb264c0ffa0a676ff66632c3d48b83b0106b (patch)
treec2b06bb0240a119fcb6cc7610860253621307872 /drivers
parentf172f42182829b6d6de12417295ca9e1c3ddce3c (diff)
downloadhistory-20f9cb264c0ffa0a676ff66632c3d48b83b0106b.tar.gz
[PATCH] s390: dasd driver debug log
dasd driver changes: - Fix debug feature usage. The sprinf event/exception functions write a pointer to a format string (%s) to the log. These strings must be valid at the time the DBF-log is read. - Some coding style reformatting. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/block/dasd.c52
-rw-r--r--drivers/s390/block/dasd_3990_erp.c42
-rw-r--r--drivers/s390/block/dasd_devmap.c6
-rw-r--r--drivers/s390/block/dasd_diag.c55
-rw-r--r--drivers/s390/block/dasd_eckd.c193
-rw-r--r--drivers/s390/block/dasd_eckd.h12
-rw-r--r--drivers/s390/block/dasd_erp.c9
-rw-r--r--drivers/s390/block/dasd_fba.c120
-rw-r--r--drivers/s390/block/dasd_int.h17
-rw-r--r--drivers/s390/block/dasd_ioctl.c5
-rw-r--r--drivers/s390/block/dasd_proc.c4
11 files changed, 328 insertions, 187 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index be8ce08e51de2d..fd54f7332ebca5 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -7,7 +7,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001
*
- * $Revision: 1.151 $
+ * $Revision: 1.154 $
*/
#include <linux/config.h>
@@ -179,7 +179,7 @@ dasd_state_known_to_basic(struct dasd_device * device)
device->debug_area = debug_register(device->cdev->dev.bus_id, 0, 2,
8 * sizeof (long));
debug_register_view(device->debug_area, &debug_sprintf_view);
- debug_set_level(device->debug_area, DBF_ERR);
+ debug_set_level(device->debug_area, DBF_DEBUG);
DBF_DEV_EVENT(DBF_EMERG, device, "%s", "debug area created");
device->state = DASD_STATE_BASIC;
@@ -520,10 +520,6 @@ dasd_kmalloc_request(char *magic, int cplength, int datasize,
if ( magic == NULL || datasize > PAGE_SIZE ||
(cplength*sizeof(struct ccw1)) > PAGE_SIZE)
BUG();
- debug_text_event ( dasd_debug_area, 1, "ALLC");
- debug_text_event ( dasd_debug_area, 1, magic);
- debug_int_event ( dasd_debug_area, 1, cplength);
- debug_int_event ( dasd_debug_area, 1, datasize);
cqr = kmalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC);
if (cqr == NULL)
@@ -570,10 +566,6 @@ dasd_smalloc_request(char *magic, int cplength, int datasize,
if ( magic == NULL || datasize > PAGE_SIZE ||
(cplength*sizeof(struct ccw1)) > PAGE_SIZE)
BUG();
- debug_text_event ( dasd_debug_area, 1, "ALLC");
- debug_text_event ( dasd_debug_area, 1, magic);
- debug_int_event ( dasd_debug_area, 1, cplength);
- debug_int_event ( dasd_debug_area, 1, datasize);
size = (sizeof(struct dasd_ccw_req) + 7L) & -8L;
if (cplength > 0)
@@ -623,8 +615,6 @@ dasd_kfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device)
clear_normalized_cda(ccw);
} while (ccw++->flags & (CCW_FLAG_CC | CCW_FLAG_DC));
#endif
- debug_text_event ( dasd_debug_area, 1, "FREE");
- debug_int_event ( dasd_debug_area, 1, (long) cqr);
if (cqr->cpaddr != NULL)
kfree(cqr->cpaddr);
if (cqr->data != NULL)
@@ -638,8 +628,6 @@ dasd_sfree_request(struct dasd_ccw_req * cqr, struct dasd_device * device)
{
unsigned long flags;
- debug_text_event(dasd_debug_area, 1, "FREE");
- debug_int_event(dasd_debug_area, 1, (long) cqr);
spin_lock_irqsave(&device->mem_lock, flags);
dasd_free_chunk(&device->ccw_chunks, cqr);
spin_unlock_irqrestore(&device->mem_lock, flags);
@@ -696,6 +684,9 @@ dasd_term_IO(struct dasd_ccw_req * cqr)
} else
cqr->status = DASD_CQR_FAILED;
cqr->stopclk = get_clock();
+ DBF_DEV_EVENT(DBF_DEBUG, device,
+ "terminate cqr %p successful",
+ cqr);
break;
case -ENODEV:
DBF_DEV_EVENT(DBF_ERR, device, "%s",
@@ -754,6 +745,8 @@ dasd_start_IO(struct dasd_ccw_req * cqr)
switch (rc) {
case 0:
cqr->status = DASD_CQR_IN_IO;
+ DBF_DEV_EVENT(DBF_DEBUG, device, "%s",
+ "start_IO: request %p started successful");
break;
case -EBUSY:
DBF_DEV_EVENT(DBF_ERR, device, "%s",
@@ -964,8 +957,8 @@ dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
cdev->dev.bus_id, cqr->status);
return;
}
- DBF_DEV_EVENT(DBF_DEBUG, device, "Int: CS/DS 0x%04x",
- ((irb->scsw.cstat << 8) | irb->scsw.dstat));
+ DBF_DEV_EVENT(DBF_DEBUG, device, "Int: CS/DS 0x%04x for cqr %p",
+ ((irb->scsw.cstat << 8) | irb->scsw.dstat), cqr);
/* Find out the appropriate era_action. */
if (irb->scsw.fctl & SCSW_FCTL_HALT_FUNC)
@@ -1080,7 +1073,8 @@ restart:
cqr->stopclk = get_clock();
} else {
if (cqr->irb.esw.esw0.erw.cons) {
- erp_fn = device->discipline->erp_action(cqr);
+ erp_fn = device->discipline->
+ erp_action(cqr);
erp_fn(cqr);
} else
dasd_default_erp_action(cqr);
@@ -1153,10 +1147,9 @@ __dasd_process_blk_queue(struct dasd_device * device)
req = elv_next_request(queue);
if (test_bit(DASD_FLAG_RO, &device->flags) &&
rq_data_dir(req) == WRITE) {
- DBF_EVENT(DBF_ERR,
- "(%s) Rejecting write request %p",
- device->cdev->dev.bus_id,
- req);
+ DBF_DEV_EVENT(DBF_ERR, device,
+ "Rejecting write request %p",
+ req);
blkdev_dequeue_request(req);
dasd_end_request(req, 0);
continue;
@@ -1170,10 +1163,10 @@ __dasd_process_blk_queue(struct dasd_device * device)
if (IS_ERR(cqr)) {
if (PTR_ERR(cqr) == -ENOMEM)
break; /* terminate request queue loop */
- DBF_EVENT(DBF_ERR,
- "(%s) CCW creation failed on request %p",
- device->cdev->dev.bus_id,
- req);
+ DBF_DEV_EVENT(DBF_ERR, device,
+ "CCW creation failed (rc=%ld) "
+ "on request %p",
+ PTR_ERR(cqr), req);
blkdev_dequeue_request(req);
dasd_end_request(req, 0);
continue;
@@ -1678,9 +1671,8 @@ dasd_open(struct inode *inp, struct file *filp)
}
if (dasd_probeonly) {
- MESSAGE(KERN_INFO,
- "No access to device %s due to probeonly mode",
- disk->disk_name);
+ DEV_MESSAGE(KERN_INFO, device, "%s",
+ "No access to device due to probeonly mode");
rc = -EPERM;
goto out;
}
@@ -1970,8 +1962,8 @@ dasd_init(void)
rc = -ENOMEM;
goto failed;
}
- debug_register_view(dasd_debug_area, &debug_hex_ascii_view);
- debug_set_level(dasd_debug_area, DBF_ERR);
+ debug_register_view(dasd_debug_area, &debug_sprintf_view);
+ debug_set_level(dasd_debug_area, DBF_DEBUG);
DBF_EVENT(DBF_EMERG, "%s", "debug area created");
diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c
index 6a39ead68c8fb2..c143ecb53d9d1e 100644
--- a/drivers/s390/block/dasd_3990_erp.c
+++ b/drivers/s390/block/dasd_3990_erp.c
@@ -5,7 +5,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000, 2001
*
- * $Revision: 1.34 $
+ * $Revision: 1.36 $
*/
#include <linux/timer.h>
@@ -20,9 +20,9 @@
struct DCTL_data {
- unsigned char subcommand; /* e.g Inhibit Write, Enable Write,... */
- unsigned char modifier; /* Subcommand modifier */
- unsigned short res; /* reserved */
+ unsigned char subcommand; /* e.g Inhibit Write, Enable Write,... */
+ unsigned char modifier; /* Subcommand modifier */
+ unsigned short res; /* reserved */
} __attribute__ ((packed));
/*
@@ -422,7 +422,8 @@ dasd_3990_erp_action_1(struct dasd_ccw_req * erp)
* Setup ERP to do the ERP action 4 (see Reference manual).
* Set the current request to PENDING to block the CQR queue for that device
* until the state change interrupt appears.
- * Use a timer (20 seconds) to retry the cqr if the interrupt is still missing.
+ * Use a timer (20 seconds) to retry the cqr if the interrupt is still
+ * missing.
*
* PARAMETER
* sense sense data of the actual error
@@ -443,9 +444,8 @@ dasd_3990_erp_action_4(struct dasd_ccw_req * erp, char *sense)
/* interrupt (this enables easier enqueing of the cqr) */
if (erp->function != dasd_3990_erp_action_4) {
- DEV_MESSAGE(KERN_INFO, device,
- "dasd_3990_erp_action_4: first time retry"
- "%s", " ");
+ DEV_MESSAGE(KERN_INFO, device, "%s",
+ "dasd_3990_erp_action_4: first time retry");
erp->retries = 256;
erp->function = dasd_3990_erp_action_4;
@@ -826,7 +826,7 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)
}
break;
- case 0x50: /* Format 5 - Data Check with displacement information */
+ case 0x50: /* Format 5 - Data Check with displacement information */
switch (msg_no) {
case 0x00:
DEV_MESSAGE(KERN_WARNING, device, "%s",
@@ -871,7 +871,7 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)
}
break;
- case 0x60: /* Format 6 - Usage Statistics/Overrun Errors */
+ case 0x60: /* Format 6 - Usage Statistics/Overrun Errors */
switch (msg_no) {
case 0x00:
DEV_MESSAGE(KERN_WARNING, device, "%s",
@@ -911,7 +911,7 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)
}
break;
- case 0x70: /* Format 7 - Device Connection Control Checks */
+ case 0x70: /* Format 7 - Device Connection Control Checks */
switch (msg_no) {
case 0x00:
DEV_MESSAGE(KERN_WARNING, device, "%s",
@@ -988,7 +988,7 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)
}
break;
- case 0x80: /* Format 8 - Additional Device Equipment Checks */
+ case 0x80: /* Format 8 - Additional Device Equipment Checks */
switch (msg_no) {
case 0x00: /* No Message */
case 0x01:
@@ -1041,7 +1041,7 @@ dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense)
}
break;
- case 0x90: /* Format 9 - Device Read, Write, and Seek Checks */
+ case 0x90: /* Format 9 - Device Read, Write, and Seek Checks */
switch (msg_no) {
case 0x00:
break; /* No Message */
@@ -2159,7 +2159,7 @@ dasd_3990_erp_inspect_32(struct dasd_ccw_req * erp, char *sense)
erp = dasd_3990_erp_int_req(erp);
break;
- case 0x0F: /* length mismatch during update write command */
+ case 0x0F: /* length mismatch during update write command */
DEV_MESSAGE(KERN_ERR, device, "%s",
"update write command error - should not "
"happen;\n"
@@ -2170,7 +2170,7 @@ dasd_3990_erp_inspect_32(struct dasd_ccw_req * erp, char *sense)
erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED);
break;
- case 0x10: /* logging required for other channel program */
+ case 0x10: /* logging required for other channel program */
erp = dasd_3990_erp_action_10_32(erp, sense);
break;
@@ -2197,8 +2197,8 @@ dasd_3990_erp_inspect_32(struct dasd_ccw_req * erp, char *sense)
/* not possible to handle this situation in Linux */
panic
- ("Invalid data - No way to inform appliction about "
- "the possibly incorret data");
+ ("Invalid data - No way to inform application "
+ "about the possibly incorrect data");
break;
case 0x1D: /* state-change pending */
@@ -2263,11 +2263,10 @@ dasd_3990_erp_inspect(struct dasd_ccw_req * erp)
/* inspect the 32 byte sense data */
erp_new = dasd_3990_erp_inspect_32(erp, sense);
- } /* end distinguish between 24 and 32 byte sense data */
+ } /* end distinguish between 24 and 32 byte sense data */
return erp_new;
-
-} /* END dasd_3990_erp_inspect */
+}
/*
* DASD_3990_ERP_ADD_ERP
@@ -2520,7 +2519,8 @@ dasd_3990_erp_further_erp(struct dasd_ccw_req *erp)
erp = dasd_3990_erp_compound(erp, sense);
} else {
- /* no retry left and no additional special handling necessary */
+ /* No retry left and no additional special handling */
+ /*necessary */
DEV_MESSAGE(KERN_ERR, device,
"no retries left for erp %p - "
"set status to FAILED", erp);
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
index b1596d916af5b3..0dea49d3dc9623 100644
--- a/drivers/s390/block/dasd_devmap.c
+++ b/drivers/s390/block/dasd_devmap.c
@@ -11,7 +11,7 @@
* functions may not be called from interrupt context. In particular
* dasd_get_device is a no-no from interrupt context.
*
- * $Revision: 1.35 $
+ * $Revision: 1.37 $
*/
#include <linux/config.h>
@@ -70,7 +70,6 @@ int dasd_autodetect = 0; /* is true, when autodetection is active */
* strings when running as a module.
*/
static char *dasd[256];
-
/*
* Single spinlock to protect devmap structures and lists.
*/
@@ -485,7 +484,8 @@ dasd_devmap_from_cdev(struct ccw_device *cdev)
devmap = dasd_find_busid(cdev->dev.bus_id);
if (IS_ERR(devmap))
- devmap = dasd_add_busid(cdev->dev.bus_id, DASD_FEATURE_DEFAULT);
+ devmap = dasd_add_busid(cdev->dev.bus_id,
+ DASD_FEATURE_DEFAULT);
return devmap;
}
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index a0f5a93d99141b..127699830fa18a 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -6,7 +6,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
*
- * $Revision: 1.40 $
+ * $Revision: 1.42 $
*/
#include <linux/config.h>
@@ -138,7 +138,7 @@ dasd_start_diag(struct dasd_ccw_req * cqr)
rc = dia250(&private->iob, RW_BIO);
if (rc > 8) {
- MESSAGE(KERN_WARNING, "dia250 returned CC %d", rc);
+ DEV_MESSAGE(KERN_WARNING, device, "dia250 returned CC %d", rc);
cqr->status = DASD_CQR_ERROR;
} else if (rc == 0) {
cqr->status = DASD_CQR_DONE;
@@ -201,8 +201,9 @@ dasd_ext_handler(struct pt_regs *regs, __u16 code)
if (dasd_start_diag(next) == 0)
expires = next->expires;
else
- MESSAGE(KERN_WARNING, "%s",
- "Interrupt fastpath failed!");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "Interrupt fastpath "
+ "failed!");
}
}
} else
@@ -231,7 +232,7 @@ dasd_diag_check_device(struct dasd_device *device)
if (private == NULL) {
private = kmalloc(sizeof(struct dasd_diag_private),GFP_KERNEL);
if (private == NULL) {
- MESSAGE(KERN_WARNING, "%s",
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
"memory allocation failed for private data");
return -ENOMEM;
}
@@ -258,11 +259,11 @@ dasd_diag_check_device(struct dasd_device *device)
return -ENOTSUPP;
}
- DBF_EVENT(DBF_INFO,
- "%04X: %04X on real %04X/%02X",
- rdc_data->dev_nr,
- rdc_data->vdev_type,
- rdc_data->rdev_type, rdc_data->rdev_model);
+ DBF_DEV_EVENT(DBF_INFO, device,
+ "%04X: %04X on real %04X/%02X",
+ rdc_data->dev_nr,
+ rdc_data->vdev_type,
+ rdc_data->rdev_type, rdc_data->rdev_model);
/* terminate all outstanding operations */
mdsk_term_io(device);
@@ -270,8 +271,8 @@ dasd_diag_check_device(struct dasd_device *device)
/* figure out blocksize of device */
label = (long *) get_zeroed_page(GFP_KERNEL);
if (label == NULL) {
- MESSAGE(KERN_WARNING, "%s",
- "No memory to allocate initialization request");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "No memory to allocate initialization request");
return -ENOMEM;
}
/* try all sizes - needed for ECKD devices */
@@ -451,20 +452,8 @@ static void
dasd_diag_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
struct irb *stat)
{
- char *page;
-
- page = (char *) get_zeroed_page(GFP_KERNEL);
- if (page == NULL) {
- MESSAGE(KERN_ERR, "%s", "No memory to dump sense data");
- return;
- }
- sprintf(page, KERN_WARNING PRINTK_HEADER
- "device %s: I/O status report:\n",
- device->cdev->dev.bus_id);
-
- MESSAGE(KERN_ERR, "Sense data:\n%s", page);
-
- free_page((unsigned long) page);
+ DEV_MESSAGE(KERN_ERR, device, "%s",
+ "dump sense not available for DIAG data");
}
/*
@@ -500,9 +489,10 @@ static int __init
dasd_diag_init(void)
{
if (!MACHINE_IS_VM) {
- MESSAGE(KERN_INFO,
- "Machine is not VM: %s discipline not initializing",
- dasd_diag_discipline.name);
+ MESSAGE_LOG(KERN_INFO,
+ "Machine is not VM: %s "
+ "discipline not initializing",
+ dasd_diag_discipline.name);
return -EINVAL;
}
ASCEBC(dasd_diag_discipline.ebcname, 4);
@@ -517,9 +507,10 @@ static void __exit
dasd_diag_cleanup(void)
{
if (!MACHINE_IS_VM) {
- MESSAGE(KERN_INFO,
- "Machine is not VM: %s discipline not initializing",
- dasd_diag_discipline.name);
+ MESSAGE_LOG(KERN_INFO,
+ "Machine is not VM: %s "
+ "discipline not cleaned",
+ dasd_diag_discipline.name);
return;
}
unregister_external_interrupt(0x2603, dasd_ext_handler);
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 387abd140a7e88..df8902364762d8 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -7,7 +7,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
*
- * $Revision: 1.66 $
+ * $Revision: 1.68 $
*/
#include <linux/config.h>
@@ -37,9 +37,12 @@
#define ECKD_C0(i) (i->home_bytes)
#define ECKD_F(i) (i->formula)
-#define ECKD_F1(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f1):(i->factors.f_0x02.f1))
-#define ECKD_F2(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f2):(i->factors.f_0x02.f2))
-#define ECKD_F3(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f3):(i->factors.f_0x02.f3))
+#define ECKD_F1(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f1):\
+ (i->factors.f_0x02.f1))
+#define ECKD_F2(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f2):\
+ (i->factors.f_0x02.f2))
+#define ECKD_F3(i) (ECKD_F(i)==0x01?(i->factors.f_0x01.f3):\
+ (i->factors.f_0x02.f3))
#define ECKD_F4(i) (ECKD_F(i)==0x02?(i->factors.f_0x02.f4):0)
#define ECKD_F5(i) (ECKD_F(i)==0x02?(i->factors.f_0x02.f5):0)
#define ECKD_F6(i) (i->factor6)
@@ -151,7 +154,6 @@ bytes_per_record(struct dasd_eckd_characteristics *rdc, int kl, int dl)
bpr = fl1 + fl2;
break;
default:
- MESSAGE(KERN_ERR, "unknown formula%d", rdc->formula);
bpr = 0;
break;
}
@@ -209,8 +211,8 @@ check_XRC (struct ccw1 *de_ccw,
/* switch on System Time Stamp - needed for XRC Support */
if (private->rdc_data.facilities.XRC_supported) {
- data->ga_extended |= 0x08; /* switch on 'Time Stamp Valid' */
- data->ga_extended |= 0x02; /* switch on 'Extended Parameter' */
+ data->ga_extended |= 0x08; /* switch on 'Time Stamp Valid' */
+ data->ga_extended |= 0x02; /* switch on 'Extended Parameter' */
data->ep_sys_time = get_clock ();
@@ -272,7 +274,7 @@ define_extent(struct ccw1 * ccw, struct DE_eckd_data * data, int trk,
check_XRC (ccw, data, device);
break;
default:
- MESSAGE(KERN_ERR, "unknown opcode 0x%x", cmd);
+ DEV_MESSAGE(KERN_ERR, device, "unknown opcode 0x%x", cmd);
break;
}
@@ -318,7 +320,7 @@ locate_record(struct ccw1 *ccw, struct LO_eckd_data *data, int trk,
private = (struct dasd_eckd_private *) device->private;
- DBF_EVENT(DBF_INFO,
+ DBF_DEV_EVENT(DBF_INFO, device,
"Locate: trk %d, rec %d, no_rec %d, cmd %d, reclen %d",
trk, rec_on_trk, no_rec, cmd, reclen);
@@ -400,7 +402,7 @@ locate_record(struct ccw1 *ccw, struct LO_eckd_data *data, int trk,
data->operation.operation = 0x0b;
break;
default:
- MESSAGE(KERN_ERR, "unknown opcode 0x%x", cmd);
+ DEV_MESSAGE(KERN_ERR, device, "unknown opcode 0x%x", cmd);
}
data->seek_addr.cyl = data->search_arg.cyl =
trk / private->rdc_data.trk_per_cyl;
@@ -458,8 +460,9 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
private = kmalloc(sizeof(struct dasd_eckd_private),
GFP_KERNEL | GFP_DMA);
if (private == NULL) {
- MESSAGE(KERN_WARNING, "%s",
- "memory allocation failed for private data");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "memory allocation failed for private "
+ "data");
return -ENOMEM;
}
device->private = (void *) private;
@@ -474,8 +477,9 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
rdc_data = (void *) &(private->rdc_data);
rc = read_dev_chars(device->cdev, &rdc_data, 64);
if (rc) {
- MESSAGE(KERN_WARNING,
- "Read device characteristics returned error %d", rc);
+ DEV_MESSAGE(KERN_WARNING, device,
+ "Read device characteristics returned error %d",
+ rc);
return rc;
}
@@ -492,19 +496,20 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
/* Read Configuration Data */
rc = read_conf_data(device->cdev, &conf_data, &conf_len);
if (rc && rc != -EOPNOTSUPP) { /* -EOPNOTSUPP is ok */
- MESSAGE(KERN_WARNING,
- "Read configuration data returned error %d", rc);
+ DEV_MESSAGE(KERN_WARNING, device,
+ "Read configuration data returned error %d", rc);
return rc;
}
if (conf_data == NULL) {
- MESSAGE(KERN_WARNING, "%s", "No configuration data retrieved");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "No configuration data retrieved");
return 0; /* no errror */
}
if (conf_len != sizeof (struct dasd_eckd_confdata)) {
- MESSAGE(KERN_WARNING,
- "sizes of configuration data mismatch"
- "%d (read) vs %ld (expected)",
- conf_len, sizeof (struct dasd_eckd_confdata));
+ DEV_MESSAGE(KERN_WARNING, device,
+ "sizes of configuration data mismatch"
+ "%d (read) vs %ld (expected)",
+ conf_len, sizeof (struct dasd_eckd_confdata));
kfree(conf_data); /* allocated by read_conf_data() */
return 0; /* no errror */
@@ -746,8 +751,9 @@ dasd_eckd_format_device(struct dasd_device * device,
return ERR_PTR(-EINVAL);
}
if (dasd_check_blocksize(fdata->blksize) != 0) {
- MESSAGE(KERN_WARNING, "Invalid blocksize %d...terminating!",
- fdata->blksize);
+ DEV_MESSAGE(KERN_WARNING, device,
+ "Invalid blocksize %d...terminating!",
+ fdata->blksize);
return ERR_PTR(-EINVAL);
}
@@ -783,7 +789,8 @@ dasd_eckd_format_device(struct dasd_device * device,
sizeof(struct eckd_count);
break;
default:
- MESSAGE(KERN_WARNING, "Invalid flags 0x%x.", fdata->intensity);
+ DEV_MESSAGE(KERN_WARNING, device, "Invalid flags 0x%x.",
+ fdata->intensity);
return ERR_PTR(-EINVAL);
}
/* Allocate the format ccw request. */
@@ -918,8 +925,8 @@ dasd_eckd_examine_error(struct dasd_ccw_req * cqr, struct irb * irb)
return dasd_9343_erp_examine(cqr, irb);
case 0x3880:
default:
- MESSAGE(KERN_WARNING, "%s",
- "default (unknown CU type) - RECOVERABLE return");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "default (unknown CU type) - RECOVERABLE return");
return dasd_era_recover;
}
}
@@ -937,7 +944,6 @@ dasd_eckd_erp_action(struct dasd_ccw_req * cqr)
case 0x1750:
return dasd_3990_erp_action;
case 0x9343:
- /* Return dasd_9343_erp_action; */
case 0x3880:
default:
return dasd_default_erp_action;
@@ -995,7 +1001,8 @@ dasd_eckd_build_cp(struct dasd_device * device, struct request *req)
return ERR_PTR(-EINVAL);
count += bv->bv_len >> (device->s2b_shift + 9);
#if defined(CONFIG_ARCH_S390X)
- if (idal_is_needed (page_address(bv->bv_page), bv->bv_len))
+ if (idal_is_needed (page_address(bv->bv_page),
+ bv->bv_len))
cidaw += bv->bv_len >> (device->s2b_shift + 9);
#endif
}
@@ -1193,8 +1200,8 @@ dasd_eckd_release(struct block_device *bdev, int no, long args)
cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
1, 32, device);
if (IS_ERR(cqr)) {
- MESSAGE(KERN_WARNING, "%s",
- "Could not allocate initialization request");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "Could not allocate initialization request");
return PTR_ERR(cqr);
}
cqr->cpaddr->cmd_code = DASD_ECKD_CCW_RELEASE;
@@ -1237,8 +1244,8 @@ dasd_eckd_reserve(struct block_device *bdev, int no, long args)
cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
1, 32, device);
if (IS_ERR(cqr)) {
- MESSAGE(KERN_WARNING, "%s",
- "Could not allocate initialization request");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "Could not allocate initialization request");
return PTR_ERR(cqr);
}
cqr->cpaddr->cmd_code = DASD_ECKD_CCW_RESERVE;
@@ -1280,8 +1287,8 @@ dasd_eckd_steal_lock(struct block_device *bdev, int no, long args)
cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
1, 32, device);
if (IS_ERR(cqr)) {
- MESSAGE(KERN_WARNING, "%s",
- "Could not allocate initialization request");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "Could not allocate initialization request");
return PTR_ERR(cqr);
}
cqr->cpaddr->cmd_code = DASD_ECKD_CCW_SLCK;
@@ -1324,8 +1331,8 @@ dasd_eckd_performance(struct block_device *bdev, int no, long args)
sizeof (struct dasd_rssd_perf_stats_t)),
device);
if (IS_ERR(cqr)) {
- MESSAGE(KERN_WARNING, "%s",
- "Could not allocate initialization request");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "Could not allocate initialization request");
return PTR_ERR(cqr);
}
cqr->device = device;
@@ -1422,58 +1429,47 @@ dasd_eckd_set_attrib(struct block_device *bdev, int no, long args)
sizeof (struct attrib_data_t))) {
return -EFAULT;
}
-
private = (struct dasd_eckd_private *) device->private;
-
private->attrib = attrib;
- DBF_DEV_EVENT(DBF_ERR, device,
- "cache operation mode set to "
- "%x (%i cylinder prestage)",
- private->attrib.operation, private->attrib.nr_cyl);
-
+ DEV_MESSAGE(KERN_INFO, device,
+ "cache operation mode set to %x (%i cylinder prestage)",
+ private->attrib.operation, private->attrib.nr_cyl);
return 0;
}
+/*
+ * Print sense data and related channel program.
+ * Parts are printed because printk buffer is only 1024 bytes.
+ */
static void
dasd_eckd_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
struct irb *irb)
{
-
char *page;
- struct ccw1 *act;
- int len, sl, sct;
+ struct ccw1 *act, *end, *last;
+ int len, sl, sct, count;
page = (char *) get_zeroed_page(GFP_ATOMIC);
if (page == NULL) {
- MESSAGE(KERN_ERR, "%s", "No memory to dump sense data");
+ DEV_MESSAGE(KERN_ERR, device, " %s",
+ "No memory to dump sense data");
return;
}
len = sprintf(page, KERN_ERR PRINTK_HEADER
- "device %s: I/O status report:\n",
+ " I/O status report for device %s:\n",
device->cdev->dev.bus_id);
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "in req: %p CS: 0x%02X DS: 0x%02X\n", req,
+ " in req: %p CS: 0x%02X DS: 0x%02X\n", req,
irb->scsw.cstat, irb->scsw.dstat);
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "Failing CCW: %p\n",
+ " device %s: Failing CCW: %p\n",
+ device->cdev->dev.bus_id,
(void *) (addr_t) irb->scsw.cpa);
- act = req->cpaddr;
- do {
- DBF_EVENT(DBF_INFO,
- "CCW %p: %08X %08X",
- act, ((int *) act)[0], ((int *) act)[1]);
- DBF_EVENT(DBF_INFO,
- "DAT: %08X %08X %08X %08X",
- ((int *) (addr_t) act->cda)[0],
- ((int *) (addr_t) act->cda)[1],
- ((int *) (addr_t) act->cda)[2],
- ((int *) (addr_t) act->cda)[3]);
- } while (act++->flags & (CCW_FLAG_CC | CCW_FLAG_DC));
if (irb->esw.esw0.erw.cons) {
for (sl = 0; sl < 4; sl++) {
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "Sense(hex) %2d-%2d:",
+ " Sense(hex) %2d-%2d:",
(8 * sl), ((8 * sl) + 7));
for (sct = 0; sct < 8; sct++) {
@@ -1486,23 +1482,86 @@ dasd_eckd_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
if (irb->ecw[27] & DASD_SENSE_BIT_0) {
/* 24 Byte Sense Data */
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "24 Byte: %x MSG %x, %s MSGb to SYSOP\n",
+ " 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 */
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "32 Byte: Format: %x "
+ " 32 Byte: Format: %x "
"Exception class %x\n",
irb->ecw[6] & 0x0f, irb->ecw[22] >> 4);
}
} else {
len += sprintf(page + len, KERN_ERR PRINTK_HEADER
- "SORRY - NO VALID SENSE AVAILABLE\n");
+ " SORRY - NO VALID SENSE AVAILABLE\n");
}
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
- MESSAGE(KERN_ERR, "Sense data:\n%s", page);
+ /* dump the Channel Program */
+ /* print first CCWs (maximum 8) */
+ act = req->cpaddr;
+ for (last = act; last->flags & (CCW_FLAG_CC | CCW_FLAG_DC); last++);
+ end = min(act + 8, last);
+ len = sprintf(page, KERN_ERR PRINTK_HEADER
+ " Related CP in req: %p\n", req);
+ while (act <= end) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
+
+ /* print failing CCW area */
+ len = 0;
+ if (act < ((struct ccw1 *)(addr_t) irb->scsw.cpa) - 2) {
+ act = ((struct ccw1 *)(addr_t) irb->scsw.cpa) - 2;
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER "......\n");
+ }
+ end = min((struct ccw1 *)(addr_t) irb->scsw.cpa + 2, last);
+ while (act <= end) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+ /* print last CCWs */
+ if (act < last - 2) {
+ act = last - 2;
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER "......\n");
+ }
+ while (act <= last) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+ if (len > 0)
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
free_page((unsigned long) page);
}
diff --git a/drivers/s390/block/dasd_eckd.h b/drivers/s390/block/dasd_eckd.h
index daa2de58c069ef..3e1a051d4ab835 100644
--- a/drivers/s390/block/dasd_eckd.h
+++ b/drivers/s390/block/dasd_eckd.h
@@ -5,15 +5,15 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
*
- * $Revision: 1.8 $
+ * $Revision: 1.9 $
*/
#ifndef DASD_ECKD_H
#define DASD_ECKD_H
-/*******************************************************************************
+/*****************************************************************************
* SECTION: CCW Definitions
- ******************************************************************************/
+ ****************************************************************************/
#define DASD_ECKD_CCW_WRITE 0x05
#define DASD_ECKD_CCW_READ 0x06
#define DASD_ECKD_CCW_WRITE_HOME_ADDRESS 0x09
@@ -45,9 +45,9 @@
*/
#define PSF_ORDER_PRSSD 0x18
-/*******************************************************************************
+/*****************************************************************************
* SECTION: Type Definitions
- ******************************************************************************/
+ ****************************************************************************/
struct eckd_count {
__u16 cyl;
@@ -112,7 +112,7 @@ struct DE_eckd_data {
__u8 ga_extended; /* Global Attributes Extended */
struct ch_t beg_ext;
struct ch_t end_ext;
- unsigned long long ep_sys_time; /* Extended Parameter - System Time Stamp */
+ unsigned long long ep_sys_time; /* Ext Parameter - System Time Stamp */
__u8 ep_format; /* Extended Parameter format byte */
__u8 ep_prio; /* Extended Parameter priority I/O byte */
__u8 ep_reserved[6]; /* Extended Parameter Reserved */
diff --git a/drivers/s390/block/dasd_erp.c b/drivers/s390/block/dasd_erp.c
index 4c7423ac3190e7..82a864719e2e3d 100644
--- a/drivers/s390/block/dasd_erp.c
+++ b/drivers/s390/block/dasd_erp.c
@@ -7,7 +7,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001
*
- * $Revision: 1.12 $
+ * $Revision: 1.13 $
*/
#include <linux/config.h>
@@ -36,10 +36,6 @@ dasd_alloc_erp_request(char *magic, int cplength, int datasize,
if ( magic == NULL || datasize > PAGE_SIZE ||
(cplength*sizeof(struct ccw1)) > PAGE_SIZE)
BUG();
- debug_text_event ( dasd_debug_area, 1, "ALLC");
- debug_text_event ( dasd_debug_area, 1, magic);
- debug_int_event ( dasd_debug_area, 1, cplength);
- debug_int_event ( dasd_debug_area, 1, datasize);
size = (sizeof(struct dasd_ccw_req) + 7L) & -8L;
if (cplength > 0)
@@ -77,8 +73,6 @@ dasd_free_erp_request(struct dasd_ccw_req * cqr, struct dasd_device * device)
{
unsigned long flags;
- debug_text_event(dasd_debug_area, 1, "FREE");
- debug_int_event(dasd_debug_area, 1, (long) cqr);
spin_lock_irqsave(&device->mem_lock, flags);
dasd_free_chunk(&device->erp_chunks, cqr);
spin_unlock_irqrestore(&device->mem_lock, flags);
@@ -105,7 +99,6 @@ dasd_default_erp_action(struct dasd_ccw_req * cqr)
} else {
DEV_MESSAGE (KERN_WARNING, device, "%s",
"default ERP called (NO retry left)");
-
cqr->status = DASD_CQR_FAILED;
cqr->stopclk = get_clock ();
}
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index e51bae9cc31e02..7963ae343eef84 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -4,7 +4,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
*
- * $Revision: 1.37 $
+ * $Revision: 1.39 $
*/
#include <linux/config.h>
@@ -134,8 +134,9 @@ dasd_fba_check_characteristics(struct dasd_device *device)
if (private == NULL) {
private = kmalloc(sizeof(struct dasd_fba_private), GFP_KERNEL);
if (private == NULL) {
- MESSAGE(KERN_WARNING, "%s",
- "memory allocation failed for private data");
+ DEV_MESSAGE(KERN_WARNING, device, "%s",
+ "memory allocation failed for private "
+ "data");
return -ENOMEM;
}
device->private = (void *) private;
@@ -144,8 +145,9 @@ dasd_fba_check_characteristics(struct dasd_device *device)
rdc_data = (void *) &(private->rdc_data);
rc = read_dev_chars(device->cdev, &rdc_data, 32);
if (rc) {
- MESSAGE(KERN_WARNING,
- "Read device characteristics returned error %d", rc);
+ DEV_MESSAGE(KERN_WARNING, device,
+ "Read device characteristics returned error %d",
+ rc);
return rc;
}
@@ -227,8 +229,8 @@ dasd_fba_erp_postaction(struct dasd_ccw_req * cqr)
if (cqr->function == dasd_default_erp_action)
return dasd_default_erp_postaction;
- MESSAGE(KERN_WARNING, "unknown ERP action %p", cqr->function);
-
+ DEV_MESSAGE(KERN_WARNING, cqr->device, "unknown ERP action %p",
+ cqr->function);
return NULL;
}
@@ -270,7 +272,8 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req)
return ERR_PTR(-EINVAL);
count += bv->bv_len >> (device->s2b_shift + 9);
#if defined(CONFIG_ARCH_S390X)
- if (idal_is_needed (page_address(bv->bv_page), bv->bv_len))
+ if (idal_is_needed (page_address(bv->bv_page),
+ bv->bv_len))
cidaw += bv->bv_len / blksize;
#endif
}
@@ -423,18 +426,107 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
struct irb *irb)
{
char *page;
+ struct ccw1 *act, *end, *last;
+ int len, sl, sct, count;
- page = (char *) get_zeroed_page(GFP_KERNEL);
+ page = (char *) get_zeroed_page(GFP_ATOMIC);
if (page == NULL) {
- MESSAGE(KERN_ERR, "%s", "No memory to dump sense data");
+ DEV_MESSAGE(KERN_ERR, device, " %s",
+ "No memory to dump sense data");
return;
}
- sprintf(page, KERN_WARNING PRINTK_HEADER
- "device %s: I/O status report:\n",
- device->cdev->dev.bus_id);
+ len = sprintf(page, KERN_ERR PRINTK_HEADER
+ " I/O status report for device %s:\n",
+ device->cdev->dev.bus_id);
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " in req: %p CS: 0x%02X DS: 0x%02X\n", req,
+ irb->scsw.cstat, irb->scsw.dstat);
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " device %s: Failing CCW: %p\n",
+ device->cdev->dev.bus_id,
+ (void *) (addr_t) irb->scsw.cpa);
+ if (irb->esw.esw0.erw.cons) {
+ for (sl = 0; sl < 4; sl++) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " Sense(hex) %2d-%2d:",
+ (8 * sl), ((8 * sl) + 7));
+
+ for (sct = 0; sct < 8; sct++) {
+ len += sprintf(page + len, " %02x",
+ irb->ecw[8 * sl + sct]);
+ }
+ len += sprintf(page + len, "\n");
+ }
+ } else {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " SORRY - NO VALID SENSE AVAILABLE\n");
+ }
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
+
+ /* dump the Channel Program */
+ /* print first CCWs (maximum 8) */
+ act = req->cpaddr;
+ for (last = act; last->flags & (CCW_FLAG_CC | CCW_FLAG_DC); last++);
+ end = min(act + 8, last);
+ len = sprintf(page, KERN_ERR PRINTK_HEADER
+ " Related CP in req: %p\n", req);
+ while (act <= end) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
- MESSAGE(KERN_ERR, "Sense data:\n%s", page);
+ /* print failing CCW area */
+ len = 0;
+ if (act < ((struct ccw1 *)(addr_t) irb->scsw.cpa) - 2) {
+ act = ((struct ccw1 *)(addr_t) irb->scsw.cpa) - 2;
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER "......\n");
+ }
+ end = min((struct ccw1 *)(addr_t) irb->scsw.cpa + 2, last);
+ while (act <= end) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+
+ /* print last CCWs */
+ if (act < last - 2) {
+ act = last - 2;
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER "......\n");
+ }
+ while (act <= last) {
+ len += sprintf(page + len, KERN_ERR PRINTK_HEADER
+ " CCW %p: %08X %08X DAT:",
+ act, ((int *) act)[0], ((int *) act)[1]);
+ for (count = 0; count < 32 && count < act->count;
+ count += sizeof(int))
+ len += sprintf(page + len, " %08X",
+ ((int *) (addr_t) act->cda)
+ [(count>>2)]);
+ len += sprintf(page + len, "\n");
+ act++;
+ }
+ if (len > 0)
+ MESSAGE_LOG(KERN_ERR, "%s",
+ page + sizeof(KERN_ERR PRINTK_HEADER));
free_page((unsigned long) page);
}
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h
index 7e1f435b59b3df..4586e0ecc526fa 100644
--- a/drivers/s390/block/dasd_int.h
+++ b/drivers/s390/block/dasd_int.h
@@ -6,7 +6,7 @@
* Bugreports.to..: <Linux390@de.ibm.com>
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
*
- * $Revision: 1.61 $
+ * $Revision: 1.63 $
*/
#ifndef DASD_INT_H
@@ -150,6 +150,18 @@ do { \
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", \
+ d_device->cdev->dev.bus_id, 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)
+
struct dasd_ccw_req {
unsigned int magic; /* Eye catcher */
struct list_head list; /* list_head for request queueing. */
@@ -520,7 +532,8 @@ void dasd_proc_exit(void);
/* externals in dasd_erp.c */
struct dasd_ccw_req *dasd_default_erp_action(struct dasd_ccw_req *);
struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *);
-struct dasd_ccw_req *dasd_alloc_erp_request(char *, int, int, struct dasd_device *);
+struct dasd_ccw_req *dasd_alloc_erp_request(char *, int, int,
+ struct dasd_device *);
void dasd_free_erp_request(struct dasd_ccw_req *, struct dasd_device *);
void dasd_log_sense(struct dasd_ccw_req *, struct irb *);
void dasd_log_ccw(struct dasd_ccw_req *, int, __u32);
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index 8cbddce1f34494..f1892baa3b18f0 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -257,8 +257,9 @@ dasd_format(struct dasd_device * device, struct format_data_t * fdata)
fdata->stop_unit, fdata->blksize, fdata->intensity);
/* Since dasdfmt keeps the device open after it was disabled,
- * there still exists an inode for this device. We must update i_blkbits,
- * otherwise we might get errors when enabling the device later.
+ * there still exists an inode for this device.
+ * We must update i_blkbits, otherwise we might get errors when
+ * enabling the device later.
*/
if (fdata->start_unit == 0) {
struct block_device *bdev = bdget_disk(device->gdp, 0);
diff --git a/drivers/s390/block/dasd_proc.c b/drivers/s390/block/dasd_proc.c
index 6e15f2afcc25da..353d41118c6291 100644
--- a/drivers/s390/block/dasd_proc.c
+++ b/drivers/s390/block/dasd_proc.c
@@ -9,7 +9,7 @@
*
* /proc interface for the dasd driver.
*
- * $Revision: 1.29 $
+ * $Revision: 1.30 $
*/
#include <linux/config.h>
@@ -250,7 +250,7 @@ dasd_statistics_write(struct file *file, const char __user *user_buf,
buffer = dasd_get_user_string(user_buf, user_len);
if (IS_ERR(buffer))
return PTR_ERR(buffer);
- MESSAGE(KERN_INFO, "/proc/dasd/statictics: '%s'", buffer);
+ MESSAGE_LOG(KERN_INFO, "/proc/dasd/statictics: '%s'", buffer);
/* check for valid verbs */
for (str = buffer; isspace(*str); str++);