Hi,

If the check for "count >= SWAP_MAP_MAX" in __get_swap_page is true, we
will end up trying to unlock a not-yet-locked spinlock.

Here goes a patch to change this.

--- linux/mm/swapfile.c.orig    Thu Jan  4 04:10:08 2001
+++ linux/mm/swapfile.c Thu Jan  4 04:10:12 2001
@@ -90,8 +90,12 @@
        int type, wrapped = 0;
 
        entry.val = 0;  /* Out of memory */
-       if (count >= SWAP_MAP_MAX)
-               goto bad_count;
+       if (count >= SWAP_MAP_MAX) {
+               printk(KERN_ERR "get_swap_page: bad count %hd from %p\n",
+                       count, __builtin_return_address(0));
+               return entry;
+       }
+
        swap_list_lock();
        type = swap_list.next;
        if (type < 0)
@@ -130,11 +134,6 @@
 out:
        swap_list_unlock();
        return entry;
-
-bad_count:
-       printk(KERN_ERR "get_swap_page: bad count %hd from %p\n",
-              count, __builtin_return_address(0));
-       goto out;
 }
 
 

-
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/

Reply via email to