Re: "Trying to free nonexistent swap-page" error message.

Troy Benjegerdes (hozer@drgw.net)
Tue, 10 Jul 2001 14:28:13 -0500


On Fri, Jun 29, 2001 at 03:02:03AM -0600, Andreas Dilger wrote:
> Johan Seland
> > One one of our Linux Oracle servers the following messages has started
> > to appear :
> >
> > Jun 29 07:16:32 blanco kernel: swap_free: Trying to free nonexistent swap-page
> > Jun 29 07:16:32 blanco kernel: swap_free: Trying to free nonexistent swap-page
> >
> > I also find some of these:
> >
> > Jun 29 06:25:01 blanco kernel: EXT2-fs error (device sd(8,10)): ext2_readdir: bad entry in directory #172258: rec_len %% 4 != 0 - offset=192, inode=812610409, rec_len=11833, name_len=115
> > Jun 29 06:25:32 blanco kernel: EXT2-fs error (device sd(8,10)): ext2_readdir: bad entry in directory #172258: rec_len %% 4 != 0 - offset=192, inode=812610409, rec_len=11833, name_len=115
> >
> > Machine is a 2x933MhZ P3 with 2GB of memory. Kernel version is now
> > 2.2.19, but the same problem appeared with 2.2.18 as well.
>
> My first guess would be some sort of hardware/software problem with your
> SCSI controller, cables, disk, etc. I'm not sure about the swap problem,
> but the ext2 problems are caused by corruption of the disk or memory.

My first guess would be hardware also, except in this case I've seen
similiar things on three different dual processor G4 systems running 2.2,
and they work fine with 2.4.

Does Oracle for Linux us pthreads or the 'clone()' system call?

Can you try running the included pthreads program on an 2.2.19 SMP system
(but make it's idle, since if this is a genric 2.2 SMP bug it will
probably crash the system)

Compile with the following command:
gcc -o pt pthread-test.c -lpthread

Run it repeatedly:
I=0; while [ $? -eq 0 ] ; let I=I+1; do ./pt ; done ; echo $I

on 2.2.19 on a mac dual G4, the pthreads program will sometimes get
segfaults and illegal instructions, and if I run it long enough, I will
eventually get the following in dmesg:

swap_free: Trying to free nonexistent swap-page
swap_free: offset exceeds max
swap_free: Trying to free nonexistent swap-page
swap_free: Trying to free nonexistent swap-page
swap_free: offset exceeds max
swap_free: Trying to free nonexistent swap-page
swap_free: Trying to free nonexistent swap-page
swap_free: offset exceeds max
swap_free: offset exceeds max
swap_free: offset exceeds max
swap_free: Trying to free nonexistent swap-page
swap_free: Trying to free nonexistent swap-page
swap_free: Trying to free nonexistent swap-page
swap_free: Trying to free nonexistent swap-page
swap_free: offset exceeds max
swap_free: offset exceeds max
swap_free: offset exceeds max

If I keep running it, I will eventually wind up with a kernel panic on an
illegal instruction. Something is corrupting memory, and in my case, the
kernel panics are caused by a '0x00000008' being written over a random
location in the kernel code.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

#define NTH 8

void
thread(void *arg)
{
printf("THREAD: pid %d\n", getpid());

return;
}

int
main(int argc, char **argv)
{
int i;
pthread_t t[NTH];

for (i=0; i<NTH; i++)
pthread_create(t+i, NULL, thread, NULL);

for (i=0; i<NTH; i++)
pthread_join(t[i], NULL);

return 0;
}

-- 
Troy Benjegerdes | master of mispeeling | 'da hozer' |  hozer@drgw.net
-----"If this message isn't misspelled, I didn't write it" -- Me -----
"Why do musicians compose symphonies and poets write poems? They do it
because life wouldn't have any meaning for them if they didn't. That's 
why I draw cartoons. It's my life." -- Charles Shulz
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/