[Crash-utility] dev command deteriorates with new kernels
Dave Anderson
anderson at redhat.com
Mon Jun 8 19:50:41 UTC 2009
----- "Dave Anderson" <anderson at redhat.com> wrote:
> ----- "Bob Montgomery" <bob.montgomery at hp.com> wrote:
>
> > On Fri, 2009-06-05 at 14:53 +0000, Dave Anderson wrote:
> >
> > >
> > > I've attached what I'm going with. I've added the capability of getting
> > > the file_operations from the cdev_map when necessary. The block device
> > > code was also suffering from bit-rot as well, and so I put in a new
> > > collector function that uses the bdev_map as well.
> >
> > Dave, this looks good. Two issues:
> >
> > 1) Add "-f" to dev help? (What does it mean to still be a "(none)" device?)
>
> It means that a pointer to a file_operations either doesn't exist
> (or that I have no clue how to find it...) For the hell of it I
> added that -f flag to show those devices in case somebody's
> interested.
>
> >
> > 2) The old code found the block extended device number (a feature added
> > to the kernel by a 25 Aug 2008 patch from Tejun Heo):
> >
> > 259 blkext (unknown)
> >
> > Also shown in /proc/devices:
> > ...
> > Block devices:
> > 1 ramdisk
> > 259 blkext
> > 7 loop
> > 11 sr
> > 104 cciss0
> >
> > Deliberate omission?
>
> I did see that, and I forget now how the old code found it (although the
> function still exists), but the structures being used now are bdev_map.probes[]
> and major_names[]:
>
> crash> whatis struct kobj_map
> struct kobj_map {
> struct probe *probes[255];
> struct mutex *lock;
> }
> SIZE: 2048
> crash> whatis major_names
> struct blk_major_name *major_names[255];
> crash>
>
> where the kernel's kobj_map.probes[] array size is just hardwired to 255,
> and the major_names[] array size is BLKDEV_MAJOR_HASH_SIZE which is 255.
> So obviously 259 won't be found.
Correction -- it does appear in the major_names[] array, in a 2.6.30
kernel for example, like this:
crash> p * major_names[4]
$51 = {
next = 0x0,
major = 259,
name = "blkext\000\000\000\000\000\000\000\000\000"
}
where it appears to be the only major_names[] entry whose "major" value
doesn't equal the index into the array (i.e., 259 != 4). But the
bdev_map.probes[4] entry is unused.
Dave
>
> If you want to figure out how to show it, send me a patch.
>
> At this point I'm about ready to deprecate the whole command... ;-)
>
> Dave
>
>
>
> >
> > Thanks for cleaning this up,
> > Bob Montgomery
More information about the Crash-utility
mailing list