[Crash-utility] dev command deteriorates with new kernels

Dave Anderson anderson at redhat.com
Wed Jun 3 13:04:03 UTC 2009


----- "Bob Montgomery" <bob.montgomery at hp.com> wrote:

> With respect to character devices:
> 
> Sometime way back in the 2.6ish kernel, the fops field of struct
> char_device_struct ceased to be used for anything, and on those
> kernels
> (like 2.6.18), dev always reports the OPERATIONS field as "(none)":
> 
> crash-4.0-8.10> dev
> CHRDEV    NAME            OPERATIONS
>    1      mem                     (none)
>    2      pty                     (none)
>    3      ttyp                    (none)
>    4      /dev/vc/0               (none)
>    4      tty                     (none)
>    4      ttyS                    (none)
>    5      /dev/tty                (none)
>    5      /dev/console            (none)
>    5      /dev/ptmx               (none)
>    7      vcs                     (none)
>   10      misc                    (none)
>   13      input                   (none)
>   21      sg                      (none)
>   29      fb                      (none)
> ...
> 
> Then recently (by 2.6.28, anyway), someone noticed that the fops field
> was unused and removed it from struct char_device_struct altogether, so
> now we get:
> 
> crash-4.0-8.10> dev
> 
> dev: invalid structure member offset: char_device_struct_fops
>      FILE: dev.c  LINE: 221  FUNCTION: dump_chrdevs()
> 
> [/home/bobm/bin/crash-4.0-8.10] error trace: 452e75 => 4cf528 => 4cf957 => 50d8d3
> CHRDEV    NAME            OPERATIONS
> 
>   50d8d3: OFFSET_verify+168
>   4cf957: dump_chrdevs+1043
>   4cf528: cmd_dev+198
>   452e75: exec_command+306
> 
> dev: invalid structure member offset: char_device_struct_fops
>      FILE: dev.c  LINE: 221  FUNCTION: dump_chrdevs()
> 
> crash-4.0-8.10>
> 
> The attached patch changes the behavior in both cases to something like
> this:
> 
> crash-4.0-8.10fix> dev
> CHRDEV    NAME            OPERATIONS
>    1      mem           ffffffff8043ee00  <memory_fops>
>    2      pty                     (none)
>    3      ttyp                    (none)
>    4      /dev/vc/0               (none)
>    4      tty                     (none)
>    4      ttyS                    (none)
>    5      /dev/tty                (none)
>    5      /dev/console            (none)
>    5      /dev/ptmx               (none)
>    7      vcs           ffffffff8043ff40  <vcs_fops>
>   10      misc          ffffffff8043fe40  <misc_fops>
>   13      input         ffffffff805413c0  <input_fops>
>   21      sg                      (none)
>   29      fb            ffffffff80531c60  <fb_fops>
> 
> Which is definitely an improvement.
>   
> But wondering about those remaining (none) entries, I found that if I
> pursue info through the cdev_map with a series of crash commands like
> this:
> 
> crash-4.0-8.10fix> p (*cdev_map.probes[2]).data
> $7 = (void *) 0xffff81013a66c408
> crash-4.0-8.10fix> p (*(struct cdev *)0xffff81013a66c408).ops
> $8 = (const struct file_operations *) 0xffffffff8043f860
> crash-4.0-8.10fix> sym 0xffffffff8043f860
> ffffffff8043f860 (r) tty_fops
> 
> 
> crash-4.0-8.10fix> p (*cdev_map.probes[21]).data
> $9 = (void *) 0xffff81013acf8d80
> crash-4.0-8.10fix> p (*(struct cdev *)0xffff81013acf8d80).ops
> $10 = (const struct file_operations *) 0xffffffff8820ee00
> crash-4.0-8.10fix> sym 0xffffffff8820ee00
> ffffffff8820ee00 (d) sg_fops
> 
> I can come up with believable file_ops values for (most? all?) of the
> others.  And this leads me to wonder if crash shouldn't be collecting
> this info in a similar manner to fill in the other OPERATIONS fields.
> But now I'm quite a bit past what I know about how the character device
> stuff works.
> 
> 
> Thanks,
> Bob Montgomery
> Working at HP

Thanks Bob, I appreciate your investigation and patch.

I'll take a look (it's been years...), and build upon your patch to have the
command dig further when necessary.   

Dave




More information about the Crash-utility mailing list