Skip to contentSkip to conversation

Oops with 2.4.0-test13pre3 - swapoff

DISCUSSION Douglas Gilbert 4 participants 4 messages Dec 20, 2000 – Dec 22, 2000

Subsystems (2)
lore
Share & tools
lore
#0 lore raw
Quoted 6 lines · Zdenek Kabelac

This is oops I've got when rebooting after some heavy disk activity on my SMP system:

Written by hand:

kernel BUG swap_state.c:78!

[snip]

Same here during a halt of a RH 6.2 based K6-2 500 MHz UP machine running lk240t13p3. The machine had been on for a while and had built a kernel amongst other things.

Lead up was:

$ halt
.....
Sending all processes the KILL signal    [OK]
Turning off swap VM: __lru_cache_del, found unknown page ?!
kernel BUG at swap_state.c:78
....

Doug Gilbert

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#1 lore raw
Quoted 4 lines
Quoted 3 lines · Zdenek Kabelac

This is oops I've got when rebooting after some heavy disk activity on my SMP system:

Quoted 9 lines
Quoted 3 lines

Written by hand:

kernel BUG swap_state.c:78!

[snip]

Same here during a halt of a RH 6.2 based K6-2 500 MHz UP machine running lk240t13p3. The machine had been on for a while and had built a kernel amongst other things.

I'll just append that my machine has been up for just several minutes (maybe 10) but has been doing heavy copying - several 600MB files between some partitions.

So maybe the problem with memory thrashing is still not fully fixed ???

Signature · 7 lines
             There are three types of people in the world:
               those who can count, and those who can't.
  Zdenek Kabelac  http://i.am/kabi/ [email protected] {debian.org; fi.muni.cz}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#2 lore raw
Quoted 14 lines · Zdenek Kabelac
Quoted 4 lines
Quoted 3 lines · Zdenek Kabelac

This is oops I've got when rebooting after some heavy disk activity on my SMP system:

Quoted 9 lines
Quoted 3 lines

Written by hand:

kernel BUG swap_state.c:78!

[snip]

Same here during a halt of a RH 6.2 based K6-2 500 MHz UP machine running lk240t13p3. The machine had been on for a while and had built a kernel amongst other things.

Quoted 5 lines

I'll just append that my machine has been up for just several minutes (maybe 10) but has been doing heavy copying - several 600MB files between some partitions.

So maybe the problem with memory thrashing is still not fully fixed ???

The bug was in new shm's code it seems.

Christoph is already looking at it and should have a fix soon.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#3 lore raw
Quoted 1 line · Marcelo Tosatti

Christoph is already looking at it and should have a fix soon.

Here it comes against 13-pre4 ...

We cannot call delete_from_swap_cache, it was called already in try_to_unuse.

There is still a race when we page in the page which is just freed in try_to_unuse. I am not sure how to fix this.

Also the add_to_page_cache forgot the offset :-(

Greetings
Christoph

mm/shmem.c +10 -8
@@ -761,14 +761,16 @@
 	swp_entry_t **base, **ptr;
 	unsigned long idx;
 	int offset;
+	struct shmem_inode_info *info = &inode->u.shmem_i;
 	
 	idx = 0;
-	if ((offset = shmem_clear_swp (entry, inode->u.shmem_i.i_direct, SHMEM_NR_DIRECT)) >= 0)
+	spin_lock (&info->lock);
+	if ((offset = shmem_clear_swp (entry,info->i_direct, SHMEM_NR_DIRECT)) >= 0)
 		goto found;
 
 	idx = SHMEM_NR_DIRECT;
-	if (!(base = inode->u.shmem_i.i_indirect))
-		return 0;
+	if (!(base = info->i_indirect))
+		goto out;
 
 	for (ptr = base; ptr < base + ENTRIES_PER_PAGE; ptr++) {
 		if (*ptr &&
@@ -776,16 +778,16 @@
 			goto found;
 		idx += ENTRIES_PER_PAGE;
 	}
+out:
+	spin_unlock (&info->lock);
 	return 0;
 found:
-	delete_from_swap_cache (page);
-	add_to_page_cache (page, inode->i_mapping, idx);
+	add_to_page_cache (page, inode->i_mapping, offset + idx);
 	SetPageDirty (page);
 	SetPageUptodate (page);
 	UnlockPage (page);
-	spin_lock (&inode->u.shmem_i.lock);
-	inode->u.shmem_i.swapped--;
-	spin_unlock (&inode->u.shmem_i.lock);
+	info->swapped--;
+	spin_unlock (&info->lock);
 	return 1;
 }
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/