diff options
-rw-r--r-- | fs/gfs2/glock.c | 2 | ||||
-rw-r--r-- | fs/gfs2/quota.c | 2 | ||||
-rw-r--r-- | fs/mbcache.c | 2 | ||||
-rw-r--r-- | fs/nfs/dir.c | 2 | ||||
-rw-r--r-- | fs/quota/dquot.c | 5 | ||||
-rw-r--r-- | fs/super.c | 14 | ||||
-rw-r--r-- | fs/xfs/xfs_qm.c | 2 | ||||
-rw-r--r-- | include/linux/dcache.h | 4 |
8 files changed, 18 insertions, 15 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 722329cac98f..b782bb56085d 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -1462,7 +1462,7 @@ static int gfs2_shrink_glock_memory(struct shrinker *shrink, | |||
1462 | gfs2_scan_glock_lru(sc->nr_to_scan); | 1462 | gfs2_scan_glock_lru(sc->nr_to_scan); |
1463 | } | 1463 | } |
1464 | 1464 | ||
1465 | return (atomic_read(&lru_count) / 100) * sysctl_vfs_cache_pressure; | 1465 | return vfs_pressure_ratio(atomic_read(&lru_count)); |
1466 | } | 1466 | } |
1467 | 1467 | ||
1468 | static struct shrinker glock_shrinker = { | 1468 | static struct shrinker glock_shrinker = { |
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 3768c2f40e43..d550a5d6a05f 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
@@ -114,7 +114,7 @@ int gfs2_shrink_qd_memory(struct shrinker *shrink, struct shrink_control *sc) | |||
114 | spin_unlock(&qd_lru_lock); | 114 | spin_unlock(&qd_lru_lock); |
115 | 115 | ||
116 | out: | 116 | out: |
117 | return (atomic_read(&qd_lru_count) * sysctl_vfs_cache_pressure) / 100; | 117 | return vfs_pressure_ratio(atomic_read(&qd_lru_count)); |
118 | } | 118 | } |
119 | 119 | ||
120 | static u64 qd2index(struct gfs2_quota_data *qd) | 120 | static u64 qd2index(struct gfs2_quota_data *qd) |
diff --git a/fs/mbcache.c b/fs/mbcache.c index 8c32ef3ba88e..5eb04767cb29 100644 --- a/fs/mbcache.c +++ b/fs/mbcache.c | |||
@@ -189,7 +189,7 @@ mb_cache_shrink_fn(struct shrinker *shrink, struct shrink_control *sc) | |||
189 | list_for_each_entry_safe(entry, tmp, &free_list, e_lru_list) { | 189 | list_for_each_entry_safe(entry, tmp, &free_list, e_lru_list) { |
190 | __mb_cache_entry_forget(entry, gfp_mask); | 190 | __mb_cache_entry_forget(entry, gfp_mask); |
191 | } | 191 | } |
192 | return (count / 100) * sysctl_vfs_cache_pressure; | 192 | return vfs_pressure_ratio(count); |
193 | } | 193 | } |
194 | 194 | ||
195 | 195 | ||
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index e79bc6ce828e..813ef2571545 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -2046,7 +2046,7 @@ remove_lru_entry: | |||
2046 | } | 2046 | } |
2047 | spin_unlock(&nfs_access_lru_lock); | 2047 | spin_unlock(&nfs_access_lru_lock); |
2048 | nfs_access_free_list(&head); | 2048 | nfs_access_free_list(&head); |
2049 | return (atomic_long_read(&nfs_access_nr_entries) / 100) * sysctl_vfs_cache_pressure; | 2049 | return vfs_pressure_ratio(atomic_long_read(&nfs_access_nr_entries)); |
2050 | } | 2050 | } |
2051 | 2051 | ||
2052 | static void __nfs_access_zap_cache(struct nfs_inode *nfsi, struct list_head *head) | 2052 | static void __nfs_access_zap_cache(struct nfs_inode *nfsi, struct list_head *head) |
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 9a702e193538..13eee847605c 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c | |||
@@ -719,9 +719,8 @@ static int shrink_dqcache_memory(struct shrinker *shrink, | |||
719 | prune_dqcache(nr); | 719 | prune_dqcache(nr); |
720 | spin_unlock(&dq_list_lock); | 720 | spin_unlock(&dq_list_lock); |
721 | } | 721 | } |
722 | return ((unsigned) | 722 | return vfs_pressure_ratio( |
723 | percpu_counter_read_positive(&dqstats.counter[DQST_FREE_DQUOTS]) | 723 | percpu_counter_read_positive(&dqstats.counter[DQST_FREE_DQUOTS])); |
724 | /100) * sysctl_vfs_cache_pressure; | ||
725 | } | 724 | } |
726 | 725 | ||
727 | static struct shrinker dqcache_shrinker = { | 726 | static struct shrinker dqcache_shrinker = { |
diff --git a/fs/super.c b/fs/super.c index f6961ea84c56..63b6863bac7b 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -82,13 +82,13 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc) | |||
82 | int inodes; | 82 | int inodes; |
83 | 83 | ||
84 | /* proportion the scan between the caches */ | 84 | /* proportion the scan between the caches */ |
85 | dentries = (sc->nr_to_scan * sb->s_nr_dentry_unused) / | 85 | dentries = mult_frac(sc->nr_to_scan, sb->s_nr_dentry_unused, |
86 | total_objects; | 86 | total_objects); |
87 | inodes = (sc->nr_to_scan * sb->s_nr_inodes_unused) / | 87 | inodes = mult_frac(sc->nr_to_scan, sb->s_nr_inodes_unused, |
88 | total_objects; | 88 | total_objects); |
89 | if (fs_objects) | 89 | if (fs_objects) |
90 | fs_objects = (sc->nr_to_scan * fs_objects) / | 90 | fs_objects = mult_frac(sc->nr_to_scan, fs_objects, |
91 | total_objects; | 91 | total_objects); |
92 | /* | 92 | /* |
93 | * prune the dcache first as the icache is pinned by it, then | 93 | * prune the dcache first as the icache is pinned by it, then |
94 | * prune the icache, followed by the filesystem specific caches | 94 | * prune the icache, followed by the filesystem specific caches |
@@ -104,7 +104,7 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc) | |||
104 | sb->s_nr_inodes_unused + fs_objects; | 104 | sb->s_nr_inodes_unused + fs_objects; |
105 | } | 105 | } |
106 | 106 | ||
107 | total_objects = (total_objects / 100) * sysctl_vfs_cache_pressure; | 107 | total_objects = vfs_pressure_ratio(total_objects); |
108 | drop_super(sb); | 108 | drop_super(sb); |
109 | return total_objects; | 109 | return total_objects; |
110 | } | 110 | } |
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 6218a0aeeeea..956da2e1c7af 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
@@ -1722,7 +1722,7 @@ xfs_qm_shake( | |||
1722 | } | 1722 | } |
1723 | 1723 | ||
1724 | out: | 1724 | out: |
1725 | return (qi->qi_lru_count / 100) * sysctl_vfs_cache_pressure; | 1725 | return vfs_pressure_ratio(qi->qi_lru_count); |
1726 | } | 1726 | } |
1727 | 1727 | ||
1728 | /* | 1728 | /* |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 844a1ef387e4..59066e0b4ff1 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -395,4 +395,8 @@ static inline bool d_mountpoint(const struct dentry *dentry) | |||
395 | 395 | ||
396 | extern int sysctl_vfs_cache_pressure; | 396 | extern int sysctl_vfs_cache_pressure; |
397 | 397 | ||
398 | static inline unsigned long vfs_pressure_ratio(unsigned long val) | ||
399 | { | ||
400 | return mult_frac(val, sysctl_vfs_cache_pressure, 100); | ||
401 | } | ||
398 | #endif /* __LINUX_DCACHE_H */ | 402 | #endif /* __LINUX_DCACHE_H */ |