]> err.no Git - linux-2.6/blobdiff - mm/shmem.c
[LIB]: Drop the pcounter itself.
[linux-2.6] / mm / shmem.c
index 2f961a6dbf57a91d0c35329175ecc96db1d2f3e3..3372bc579e896f474ef24cffa929b69228ff9445 100644 (file)
@@ -85,6 +85,7 @@ enum sgp_type {
        SGP_WRITE,      /* may exceed i_size, may allocate page */
 };
 
+#ifdef CONFIG_TMPFS
 static unsigned long shmem_default_max_blocks(void)
 {
        return totalram_pages / 2;
@@ -94,6 +95,7 @@ static unsigned long shmem_default_max_inodes(void)
 {
        return min(totalram_pages - totalhigh_pages, totalram_pages / 2);
 }
+#endif
 
 static int shmem_getpage(struct inode *inode, unsigned long idx,
                         struct page **pagep, enum sgp_type sgp, int *type);
@@ -1368,14 +1370,17 @@ repeat:
                        shmem_swp_unmap(entry);
                        spin_unlock(&info->lock);
                        unlock_page(swappage);
-                       page_cache_release(swappage);
                        if (error == -ENOMEM) {
                                /* allow reclaim from this memory cgroup */
-                               error = mem_cgroup_cache_charge(NULL,
+                               error = mem_cgroup_cache_charge(swappage,
                                        current->mm, gfp & ~__GFP_HIGHMEM);
-                               if (error)
+                               if (error) {
+                                       page_cache_release(swappage);
                                        goto failed;
+                               }
+                               mem_cgroup_uncharge_page(swappage);
                        }
+                       page_cache_release(swappage);
                        goto repeat;
                }
        } else if (sgp == SGP_READ && !filepage) {