Re: kmem: WARNING: cannot find mem_map page for address

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




----- Original Message -----
> On 12/17/12 09:03, Dave Anderson wrote:
> >> That also removed the mysterious problem of having a duplicate
> >> error
> >> message show up on the console.
> > 
> > OK, if that works for you...
> 
> In the sense of being able to do my day job, yes.
> In the sense of aesthetics, not so much.
> 
> > Right -- I would never expect error() to be called while inside
> > an open_tmpfile() operation.  Normally the behind-the-scenes data
> > is parsed, and if anything is to be displayed while open_tmpfile()
> > is still in play, it would be fprint()'ed using pc->saved_fp.
> 
> I think the aesthetically pleasing solution is an "i_am_playing_with_tmpfile()"
> call that says it isn't closed and crash functions shouldn't be using it.
> Plus a parallel "i_am_done_with_tmpfile()" that gets implied by "close_tmpfile()".
> I can supply a patch, if you like.  Probably with less verbose function names.

If pc->tmpfile is non-NULL, then open_tmpfile() is in use.  What would be
the purpose of the extra functions?

> 
> >>> crash> gdb set $tp = (struct cfs_trace_page *)0xffff8807fb590740
> >>> crash> p $tp->page
> >>> $7 = (cfs_page_t *) 0xffffea001bb1d1e8
> >>> crash> p *$tp->page
> >>> $8 = {
> >>>   flags = 144115188075855872,
> >>>   _count = {
> >>>     counter = 1
> >>>   },
> >>> [...]
> >>>   lru = {
> >>>     next = 0xdead000000100100,
> >>>     prev = 0xdead000000200200
> >>>   }
> >>> }
> >>> crash> kmem 0xffffea001bb1d1e8
> >>> kmem: WARNING: cannot find mem_map page for address:
> >>> ffffea001bb1d1e8
> >>> 879b1d1e8: kernel virtual address not found in mem map
> >>
> >> So I can print out the page_t structure (renamed as cfs_page_t in
> >> Lustre)
> >> at address 0xffff8807fb590740, but when I try to get kmem
> >> information about
> >> it, it cannot find the  page.  What am I missing?
> >>
> >> Thanks for hints/pointers!  Regards, Bruce
> > 
> > I'm not sure, other than it doesn't seem to be able to find
> > ffffea001bb1d1e8
> 
> I was able to figure that out.  I also printed out the "kmem -v" table and
> sorted the result.  The result with "kmem -n"
> 
> [...]
> 66  ffff88087fffa420  ffffea0000000000  ffffea0007380000  2162688
> 67  ffff88087fffa430  ffffea0000000000  ffffea0007540000  2195456
> 132608  ffff88083c9bdb98  ffff88083c9bdd98  ffff8840e49bdd98  4345298944
> 132609  ffff88083c9bdba8  ffff88083c9796c0  ffff8840e4b396c0  4345331712
> ;...]
> 
> viz. it ain't there.  Which is quite interesting, because if the lustre
> cluster file system structure "cfs_trace_data" actually pointed off into
> unmapped memory, it would have fallen over long, long before the point
> where it did fall over.

I don't see the vmemmap range in the "kmem -v" output.  It is mapped
kernel memory, but AFAIK it's not kept in the kernel's "vmlist" list.
Do you see that range in your "kmem -v" output? 

> >>>> ffff8807fb590740
> >>>> struct cfs_trace_page {
> >>>>  page = 0xffffea001bb1d1e8,  <<<<==== address in question
> >>>>  linkage = {
> >>>>    next = 0xffff8807fb590ee8,
> >>>>    prev = 0xffff880824e3d810
> >>>>  },
> 
> It seems like it is both there and not there, so I am misunderstanding something.
> For sure.
> 
> > crash> whatis $tp->page
> > cfs_page_t *
> > crash> p $tp->page
> > $8 = (cfs_page_t *) 0xffffea001bb1d1e8
> > crash> p *$tp->page
> > $9 = {
> >   flags = 0x200000000000000,
> >   _count = {
> >     counter = 1
> >   },
> >   {
> >     _mapcount = {
> >       counter = -1
> >     },
> >     {
> >       inuse = 65535,
> >       objects = 65535
> >     }
> >   },
> >   {
> >     {
> >       private = 0,
> >       mapping = 0x0
> >     },
> >     ptl = {
> >       {
> >         rlock = {
> >           raw_lock = {
> >             slock = 0
> >           }
> >         }
> >       }
> >     },
> >     slab = 0x0,
> >     first_page = 0x0
> >   },
> >   {
> >     index = 0,
> >     freelist = 0x0,
> >     pfmemalloc = false
> >   },
> >   lru = {
> >     next = 0xdead000000100100,
> >     prev = 0xdead000000200200
> >   }
> > }
> 
> So clearly, I am able to read cfs_page_t data at that address.
> But I cannot get the mappings for it, and neither can my lustre
> extensions.  (We are trying to extract trace data from an in-kernel
> circular buffer that is 5,100 pages in size (20 Meg).)
> 
> Thank you any help at all!  Regards, Bruce

OK so you say you cannot get the mappings for it, but what 
does "vtop 0xffffea001bb1d1e8" show?

Dave

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility


[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux