diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-10-22 14:34:09 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-10-22 14:34:09 -0400 |
commit | f20e3b5fe7ead0615309433260b9784d8da0bbbd (patch) | |
tree | eabb2e47a0355ac4e8024b7087b4e7cb9f324358 /mm/shmem.c | |
parent | bcbfe664e7af019e698cef2feb85ac2b4f1ac11d (diff) | |
parent | f030d7b65e4e6399f23de2a41a58d1b607b6bd89 (diff) |
Merge branch 'for-rmk' of git://git.android.com/kernel into devel
Diffstat (limited to 'mm/shmem.c')
-rw-r--r-- | mm/shmem.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/shmem.c b/mm/shmem.c index d87958a5f03e..d38d7e61fcd0 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -199,7 +199,7 @@ static struct vm_operations_struct shmem_vm_ops; | |||
199 | 199 | ||
200 | static struct backing_dev_info shmem_backing_dev_info __read_mostly = { | 200 | static struct backing_dev_info shmem_backing_dev_info __read_mostly = { |
201 | .ra_pages = 0, /* No readahead */ | 201 | .ra_pages = 0, /* No readahead */ |
202 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK, | 202 | .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK | BDI_CAP_SWAP_BACKED, |
203 | .unplug_io_fn = default_unplug_io_fn, | 203 | .unplug_io_fn = default_unplug_io_fn, |
204 | }; | 204 | }; |
205 | 205 | ||
@@ -1367,6 +1367,7 @@ repeat: | |||
1367 | error = -ENOMEM; | 1367 | error = -ENOMEM; |
1368 | goto failed; | 1368 | goto failed; |
1369 | } | 1369 | } |
1370 | SetPageSwapBacked(filepage); | ||
1370 | 1371 | ||
1371 | /* Precharge page while we can wait, compensate after */ | 1372 | /* Precharge page while we can wait, compensate after */ |
1372 | error = mem_cgroup_cache_charge(filepage, current->mm, | 1373 | error = mem_cgroup_cache_charge(filepage, current->mm, |
@@ -1476,12 +1477,16 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) | |||
1476 | if (!user_shm_lock(inode->i_size, user)) | 1477 | if (!user_shm_lock(inode->i_size, user)) |
1477 | goto out_nomem; | 1478 | goto out_nomem; |
1478 | info->flags |= VM_LOCKED; | 1479 | info->flags |= VM_LOCKED; |
1480 | mapping_set_unevictable(file->f_mapping); | ||
1479 | } | 1481 | } |
1480 | if (!lock && (info->flags & VM_LOCKED) && user) { | 1482 | if (!lock && (info->flags & VM_LOCKED) && user) { |
1481 | user_shm_unlock(inode->i_size, user); | 1483 | user_shm_unlock(inode->i_size, user); |
1482 | info->flags &= ~VM_LOCKED; | 1484 | info->flags &= ~VM_LOCKED; |
1485 | mapping_clear_unevictable(file->f_mapping); | ||
1486 | scan_mapping_unevictable_pages(file->f_mapping); | ||
1483 | } | 1487 | } |
1484 | retval = 0; | 1488 | retval = 0; |
1489 | |||
1485 | out_nomem: | 1490 | out_nomem: |
1486 | spin_unlock(&info->lock); | 1491 | spin_unlock(&info->lock); |
1487 | return retval; | 1492 | return retval; |