Re: [Patch] shm cleanup

From: Christoph Rohland (cr@sap.com)
Date: Sun Dec 17 2000 - 16:06:14 EST


Linus Torvalds <torvalds@transmeta.com> writes:
> The only comment I have is that as far as I can tell, your shm_writepage()
> has a small bug: if "__get_swap_page()" fails, we can't just drop the
> dirty page in question, so instead of returning -ENOMEM we should really
> return a "1" to tell the VM to keep the page dirty.

Right, here comes the (incremental) patch

        Christoph

diff -uNr c/mm/shmem.c c1/mm/shmem.c
--- c/mm/shmem.c Sun Dec 17 21:31:46 2000
+++ c1/mm/shmem.c Sun Dec 17 21:35:08 2000
@@ -210,31 +210,33 @@
 {
         int error;
         struct shmem_inode_info *info;
- swp_entry_t *entry;
+ swp_entry_t *entry, swap;
 
         info = &((struct inode *)page->mapping->host)->u.shmem_i;
         if (info->locked)
                 return 1;
+ swap = __get_swap_page(2);
+ if (!swap.val)
+ return 1;
+
         spin_lock(&info->lock);
         entry = shmem_swp_entry (info, page->index);
         if (!entry) /* this had been allocted on page allocation */
                 BUG();
         error = -EAGAIN;
- if (entry->val)
- goto out;
-
- error = -ENOMEM;
- *entry = __get_swap_page(2);
- if (!entry->val)
+ if (entry->val) {
+ __swap_free(swap, 2);
                 goto out;
+ }
 
+ *entry = swap;
         error = 0;
         /* Remove the from the page cache */
         lru_cache_del(page);
         remove_inode_page(page);
 
         /* Add it to the swap cache */
- add_to_swap_cache(page,*entry);
+ add_to_swap_cache(page, swap);
         page_cache_release(page);
         SetPageDirty(page);
         info->swapped++;

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



This archive was generated by hypermail 2b29 : Sat Dec 23 2000 - 21:00:20 EST