Marcelo Tosatti writes:
 > 
 > While taking a look at page_launder()...

 ...

 > set_page_dirty() may lock the pagecache_lock which means potential
 > deadlock since we have the pagemap_lru_lock locked.

Indeed, the following should work as a fix:

--- mm/vmscan.c.~1~     Thu Jan 11 02:22:19 2001
+++ mm/vmscan.c Sun Jan 14 05:26:17 2001
@@ -493,12 +493,15 @@
                        page_cache_release(page);
 
                        /* And re-start the thing.. */
-                       spin_lock(&pagemap_lru_lock);
-                       if (result != 1)
+                       if (result != 1) {
+                               spin_lock(&pagemap_lru_lock);
                                continue;
-                       /* writepage refused to do anything */
-                       set_page_dirty(page);
-                       goto page_active;
+                       } else {
+                               /* writepage refused to do anything */
+                               set_page_dirty(page);
+                               spin_lock(&pagemap_lru_lock);
+                               goto page_active;
+                       }
                }
 
                /*
-
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