diff options
Diffstat (limited to 'drivers/staging/android')
-rw-r--r-- | drivers/staging/android/ashmem.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c index 4511420849b..e84dbecd099 100644 --- a/drivers/staging/android/ashmem.c +++ b/drivers/staging/android/ashmem.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/file.h> | 20 | #include <linux/file.h> |
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/falloc.h> | ||
22 | #include <linux/miscdevice.h> | 23 | #include <linux/miscdevice.h> |
23 | #include <linux/security.h> | 24 | #include <linux/security.h> |
24 | #include <linux/mm.h> | 25 | #include <linux/mm.h> |
@@ -363,11 +364,12 @@ static int ashmem_shrink(struct shrinker *s, struct shrink_control *sc) | |||
363 | 364 | ||
364 | mutex_lock(&ashmem_mutex); | 365 | mutex_lock(&ashmem_mutex); |
365 | list_for_each_entry_safe(range, next, &ashmem_lru_list, lru) { | 366 | list_for_each_entry_safe(range, next, &ashmem_lru_list, lru) { |
366 | struct inode *inode = range->asma->file->f_dentry->d_inode; | ||
367 | loff_t start = range->pgstart * PAGE_SIZE; | 367 | loff_t start = range->pgstart * PAGE_SIZE; |
368 | loff_t end = (range->pgend + 1) * PAGE_SIZE - 1; | 368 | loff_t end = (range->pgend + 1) * PAGE_SIZE; |
369 | 369 | ||
370 | vmtruncate_range(inode, start, end); | 370 | do_fallocate(range->asma->file, |
371 | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, | ||
372 | start, end - start); | ||
371 | range->purged = ASHMEM_WAS_PURGED; | 373 | range->purged = ASHMEM_WAS_PURGED; |
372 | lru_del(range); | 374 | lru_del(range); |
373 | 375 | ||