----- Original Message -----
----- Original Message -----
> Hi Dave,
>
> I found it useful to be able listing structure's fields which are resided
> deeper than the first level:
>
> crash> list super_block.s_list -s
> super_block.s_id,s_dquot.info[1].dqi_dirty_list,s_dquot.dqonoff_mutex.count.counter
> -H 0xc0a9c800
> de805c00
> s_id =
>
"sysfs\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",
> s_dquot.info[1].dqi_dirty_list = {
> next = 0x0,
> prev = 0x0
> },
> s_dquot.dqonoff_mutex.count.counter = 1
> de805800
> s_id =
>
"rootfs\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",
> s_dquot.info[1].dqi_dirty_list = {
> next = 0x0,
> prev = 0x0
> },
> s_dquot.dqonoff_mutex.count.counter = 1
>
> Here is a draft patch which contains corresponding logic.
> I will appreciate your comments and suggestions.
>
> Best regards,
> Alexandr
Hi Alexandr,
This looks quite useful.
I haven't looked at the details, but this kind of change modifies an a critical
area of usage that I cannot risk breaking.
To prevent any kind of possible regression/breakage or other unexpected behavior,
would it be possible to call parse_for_member_new() *only* if it is required?
In other words, if the commented-out MEMBER_EXISTS() call fails, then you could
set a flag to force it to attempt parse_for_member_new(). Otherwise, it could
continue to use the older/simpler parse_for_member() function.
I'll dig into the patch later, test it out, etc., and it's entirely possible
that I'll change my mind, but paranoia forces me to err on the side of caution.
Dave
Another issue that comes to mind is that there are several other instances
in the crash utility command set besides the "list" command that specify
arguments that can be expressed in the "struct.member" format.
By any chance, did you also attempt to fit this capability into the "struct"
command itself? And then there's also "tree", "task -R",
"waitq", etc.
Dave