]> git.hungrycats.org Git - linux/commitdiff
[PATCH] radix-tree locking fix
authorAndrew Morton <akpm@zip.com.au>
Sun, 5 May 2002 08:09:21 +0000 (01:09 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Sun, 5 May 2002 08:09:21 +0000 (01:09 -0700)
__delete_from_swap_cache modifies the radix tree.  We need to take the
lock for writing.

mm/swapfile.c

index 67bedbf68446c71a4bd67748688eb8023d225195..2ced3aaa6a4675961877e96355bfc5096daaf9e6 100644 (file)
@@ -308,13 +308,13 @@ int remove_exclusive_swap_page(struct page *page)
        retval = 0;
        if (p->swap_map[SWP_OFFSET(entry)] == 1) {
                /* Recheck the page count with the pagecache lock held.. */
-               read_lock(&swapper_space.page_lock);
+               write_lock(&swapper_space.page_lock);
                if (page_count(page) - !!PagePrivate(page) == 2) {
                        __delete_from_swap_cache(page);
                        SetPageDirty(page);
                        retval = 1;
                }
-               read_unlock(&swapper_space.page_lock);
+               write_unlock(&swapper_space.page_lock);
        }
        swap_info_put(p);