Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.4.13-ac1 /mm/shmem.c

Filename:/mm/shmem.c
Lines Added:13
Lines Deleted:2
Also changed in: (Previous) 2.4.13  2.4.13-pre6  2.4.13-pre5  2.4.13-pre4  2.4.13-pre3  2.4.12-ac6 
(Following) 2.4.13-ac2  2.4.13-ac3  2.4.13-ac4  2.4.13-ac5  2.4.13-ac6  2.4.13-ac7 

Location
[  2.4.13-ac1
  [  mm
     o  shmem.c

Patch

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/mm/shmem.c linux.ac/mm/shmem.c
--- linux.vanilla/mm/shmem.c   Thu Oct 25 16:26:39 2001
+++ linux.ac/mm/shmem.c   Sun Oct 21 18:54:37 2001
@@ -47,10 +47,15 @@
 
 LIST_HEAD (shmem_inodes);
 static spinlock_t shmem_ilock = SPIN_LOCK_UNLOCKED;
-atomic_t shmem_nrpages = ATOMIC_INIT(0); /* Not used right now */
+atomic_t shmem_nrpages = ATOMIC_INIT(0);
 
 #define BLOCKS_PER_PAGE (PAGE_CACHE_SIZE/512)
 
+static void shmem_removepage(struct page *page)
+{
+   atomic_dec(&shmem_nrpages);
+}
+
 /*
  * shmem_recalc_inode - recalculate the size of an inode
  *
@@ -386,10 +391,11 @@
    spin_unlock (&info->lock);
    return 0;
 found:
-   delete_from_swap_cache(page);
    add_to_page_cache(page, info->inode->i_mapping, offset + idx);
+   atomic_inc(&shmem_nrpages);
    SetPageDirty(page);
    SetPageUptodate(page);
+   UnlockPage(page);
    info->swapped--;
    spin_unlock(&info->lock);
    return 1;
@@ -465,6 +471,7 @@
        * Add page back to page cache, unref swap, try again.
        */
       add_to_page_cache_locked(page, mapping, index);
+      atomic_inc(&shmem_nrpages);
       spin_unlock(&info->lock);
       swap_free(swap);
       goto getswap;
@@ -531,8 +538,10 @@
       if (!page) {
          swp_entry_t swap = *entry;
          spin_unlock (&info->lock);
+         lock_kernel();
          swapin_readahead(*entry);
          page = read_swap_cache_async(*entry);
+         unlock_kernel();
          if (!page) {
             if (entry->val != swap.val)
                goto repeat;
@@ -587,6 +596,7 @@
    }
 
    /* We have the page */
+   atomic_inc(&shmem_nrpages);
    SetPageUptodate(page);
    if (info->locked)
       page_cache_get(page);
@@ -1351,6 +1361,7 @@
 
 
 static struct address_space_operations shmem_aops = {
+   removepage:   shmem_removepage,
    writepage:   shmem_writepage,
 };
 


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.