[Drbd-dev] Panic in _drbd_send_page() again.
Graham, Simon
Simon.Graham at stratus.com
Wed May 2 16:06:44 CEST 2007
> Hi Ernest,
>
> Could you run this through ksymoops, to get the code line
> disassembled ? -- This does not look like a well-known distri kernel,
> or is it ?
>
> -Phil
This is running 2.6.16.38 with Xen 3.0.4 patches -- it's way too late to
run ksymoops on this specific case (the system has long since moved on!)
However, looking at the disassembly for
_debd_send_page:
00003df0 <_drbd_send_page>:
3df0: 55 push %ebp
3df1: 89 e5 mov %esp,%ebp
3df3: 57 push %edi
3df4: 89 cf mov %ecx,%edi
3df6: b9 00 e0 ff ff mov $0xffffe000,%ecx
3dfb: 56 push %esi
3dfc: 53 push %ebx
3dfd: 83 ec 24 sub $0x24,%esp
3e00: 8b 75 08 mov 0x8(%ebp),%esi
3e03: 89 45 f0 mov %eax,0xfffffff0(%ebp)
3e06: 89 55 ec mov %edx,0xffffffec(%ebp)
3e09: 21 e1 and %esp,%ecx
3e0b: 8b 41 18 mov 0x18(%ecx),%eax
3e0e: 89 45 e8 mov %eax,0xffffffe8(%ebp)
3e11: 8b 02 mov (%edx),%eax
3e13: f6 c4 40 test $0x40,%ah
3e16: 74 03 je 3e1b
<_drbd_send_page+0x2b>
3e18: 8b 52 0c mov 0xc(%edx),%edx
3e1b: 8b 42 04 mov 0x4(%edx),%eax
3e1e: 40 inc %eax
3e1f: 85 c0 test %eax,%eax
send_page+0x21 is 3e11 - loading from %edx which is 2nd param, page;
this is attempting to read the flags field as part of the page_count()
macro call:
int _drbd_send_page(drbd_dev *mdev, struct page *page,
int offset, size_t size)
{
mm_segment_t oldfs = get_fs();
int sent,ok;
int len = size;
#ifdef SHOW_SENDPAGE_USAGE
...
#endif
/* PARANOIA. if this ever triggers,
* something in the layers above us is really kaputt.
*one roundtrip later:
* doh. it triggered. so XFS _IS_ really kaputt ...
* oh well...
*/
if ( (page_count(page) < 1) || PageSlab(page) ) {
/* e.g. XFS meta- & log-data is in slab pages, which
have a
The Oops message shows that edx is 0x6b6b6b6b which is the poison value
for
free memory when using CONFIG_SLAB_DEBUG -- as Ernest pointed out, this
means that we're using a bio that has already been freed...
This is very similar to a bunch of problems found previously where the
bio
was freed too early -- the big difference with this one is that we
turned
on CONFIG_SLAB_DEBUG which enabled poisoning of freed memory...
Simon
More information about the drbd-dev
mailing list