[Crash-utility] [PATH] crash: Fix "dev -d" for recent kernels

Steffen Maier maier at linux.vnet.ibm.com
Thu Mar 14 18:10:56 UTC 2013


On 03/08/2013 03:40 PM, Dave Anderson wrote:
> ----- Original Message -----
>> 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 at 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
>> ---
>
> The patch works OK for me, and I suppose that there are simply no I/O's
> in progress.
>
> I wish that the authors of crash utility options would keep an eye on their
> own patches, and that that this would have been caught earlier.  I'll also
> remove those prepended "0x"'s from the addresses -- I'm surprised I letthat
> slip in when the patch was originally proposed.  (I'd actually forgotten that
> the option even existed...)
>
> Thanks,
>    Dave
>
>>   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");

Michael, thanks for the quick fix, appreciate it very much.

@all: Does above upstream commit in kernel 3.6 mean that, for such 
kernel versions, "dev -d" would only show the request stats of the root 
block cgroup but not of any of the now additionally possible individual 
blkcgs?
If so, should we mention this in the option help?

Steffen

Linux on System z Development

IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Martina Koederitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294





More information about the Crash-utility mailing list