@@ -192,7 +192,6 @@ int vm_swappiness = 60;
192
192
LIST_HEAD (shrinker_list );
193
193
DECLARE_RWSEM (shrinker_rwsem );
194
194
DEFINE_SRCU (shrinker_srcu );
195
- static atomic_t shrinker_srcu_generation = ATOMIC_INIT (0 );
196
195
197
196
#ifdef CONFIG_MEMCG
198
197
static int shrinker_nr_max ;
@@ -818,7 +817,6 @@ void unregister_shrinker(struct shrinker *shrinker)
818
817
debugfs_entry = shrinker_debugfs_detach (shrinker , & debugfs_id );
819
818
up_write (& shrinker_rwsem );
820
819
821
- atomic_inc (& shrinker_srcu_generation );
822
820
synchronize_srcu (& shrinker_srcu );
823
821
824
822
shrinker_debugfs_remove (debugfs_entry , debugfs_id );
@@ -840,7 +838,6 @@ void synchronize_shrinkers(void)
840
838
{
841
839
down_write (& shrinker_rwsem );
842
840
up_write (& shrinker_rwsem );
843
- atomic_inc (& shrinker_srcu_generation );
844
841
synchronize_srcu (& shrinker_srcu );
845
842
}
846
843
EXPORT_SYMBOL (synchronize_shrinkers );
@@ -950,20 +947,18 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
950
947
{
951
948
struct shrinker_info * info ;
952
949
unsigned long ret , freed = 0 ;
953
- int srcu_idx , generation ;
954
- int i = 0 ;
950
+ int srcu_idx ;
951
+ int i ;
955
952
956
953
if (!mem_cgroup_online (memcg ))
957
954
return 0 ;
958
955
959
- again :
960
956
srcu_idx = srcu_read_lock (& shrinker_srcu );
961
957
info = shrinker_info_srcu (memcg , nid );
962
958
if (unlikely (!info ))
963
959
goto unlock ;
964
960
965
- generation = atomic_read (& shrinker_srcu_generation );
966
- for_each_set_bit_from (i , info -> map , info -> map_nr_max ) {
961
+ for_each_set_bit (i , info -> map , info -> map_nr_max ) {
967
962
struct shrink_control sc = {
968
963
.gfp_mask = gfp_mask ,
969
964
.nid = nid ,
@@ -1009,11 +1004,6 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
1009
1004
set_shrinker_bit (memcg , nid , i );
1010
1005
}
1011
1006
freed += ret ;
1012
- if (atomic_read (& shrinker_srcu_generation ) != generation ) {
1013
- srcu_read_unlock (& shrinker_srcu , srcu_idx );
1014
- i ++ ;
1015
- goto again ;
1016
- }
1017
1007
}
1018
1008
unlock :
1019
1009
srcu_read_unlock (& shrinker_srcu , srcu_idx );
@@ -1053,7 +1043,7 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
1053
1043
{
1054
1044
unsigned long ret , freed = 0 ;
1055
1045
struct shrinker * shrinker ;
1056
- int srcu_idx , generation ;
1046
+ int srcu_idx ;
1057
1047
1058
1048
/*
1059
1049
* The root memcg might be allocated even though memcg is disabled
@@ -1067,7 +1057,6 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
1067
1057
1068
1058
srcu_idx = srcu_read_lock (& shrinker_srcu );
1069
1059
1070
- generation = atomic_read (& shrinker_srcu_generation );
1071
1060
list_for_each_entry_srcu (shrinker , & shrinker_list , list ,
1072
1061
srcu_read_lock_held (& shrinker_srcu )) {
1073
1062
struct shrink_control sc = {
@@ -1080,11 +1069,6 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
1080
1069
if (ret == SHRINK_EMPTY )
1081
1070
ret = 0 ;
1082
1071
freed += ret ;
1083
-
1084
- if (atomic_read (& shrinker_srcu_generation ) != generation ) {
1085
- freed = freed ? : 1 ;
1086
- break ;
1087
- }
1088
1072
}
1089
1073
1090
1074
srcu_read_unlock (& shrinker_srcu , srcu_idx );
0 commit comments