lkml.org 
[lkml]   [2000]   [Dec]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [Patch] shm cleanup
From
Date
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/

\
 
 \ /
  Last update: 2005-03-22 12:52    [W:0.045 / U:0.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site