Hello Dave,
The following kernel commit changes the member "rq" to member
"root_rl" in the request_queue structure:
commit a051661ca6d134c18599498b185b667859d4339b
Author: Tejun Heo <tj(a)kernel.org>
Date: Tue Jun 26 15:05:44 2012 -0700
blkcg: implement per-blkg request allocation
- struct request_list rq;
+ struct request_list root_rl;
This breaks the "dev -d" crash command:
crash> dev -d
MAJOR GENDISK NAME REQUEST QUEUE TOTAL ASYNC SYNC DRV
dev: invalid structure member offset: request_queue_rq
FILE: dev.c LINE: 3807 FUNCTION: get_diskio_1()
80116438: OFFSET_verify+96
800f55da: get_diskio_1+62
800f5c52: display_all_diskio+1318
8006ff1c: exec_command+972
dev: invalid structure member offset: request_queue_rq
FILE: dev.c LINE: 3807 FUNCTION: get_diskio_1()
The following fix just uses "root_rl" instead of "rq". Not completely
sure, if
this is sufficient.
With the fix on my s390 system I get:
crash> dev -d
MAJOR GENDISK NAME REQUEST QUEUE TOTAL ASYNC SYNC DRV
94 0x1ea144a8 dasda 0x1ebcc2b8 0 0 0 0
9 0x1e93d9c8 md0 0x1ebcb560 0 0 0 0
---
dev.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- a/dev.c
+++ b/dev.c
@@ -4050,7 +4050,11 @@ void diskio_init(void)
MEMBER_OFFSET_INIT(request_list_count, "request_list", "count");
MEMBER_OFFSET_INIT(request_queue_in_flight, "request_queue",
"in_flight");
- MEMBER_OFFSET_INIT(request_queue_rq, "request_queue", "rq");
+ if (MEMBER_EXISTS("request_queue", "rq"))
+ MEMBER_OFFSET_INIT(request_queue_rq, "request_queue", "rq");
+ else
+ MEMBER_OFFSET_INIT(request_queue_rq,
+ "request_queue", "root_rl");
MEMBER_OFFSET_INIT(subsys_private_klist_devices, "subsys_private",
"klist_devices");
MEMBER_OFFSET_INIT(subsystem_kset, "subsystem", "kset");