diff mbox series

[1/4] mm/swapfile.c: found_free could be represented by (tmp < max)

Message ID 20200419013921.14390-1-richard.weiyang@gmail.com (mailing list archive)
State New, archived
Headers show
Series [1/4] mm/swapfile.c: found_free could be represented by (tmp < max) | expand

Commit Message

Wei Yang April 19, 2020, 1:39 a.m. UTC
This is not necessary to use the variable found_free to record the
status. Just check tmp and max is enough.

Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
 mm/swapfile.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

Comments

Huang, Ying April 20, 2020, 1:03 a.m. UTC | #1
Wei Yang <richard.weiyang@gmail.com> writes:

> There are two duplicate code to handle the case when there is no
> available swap entry. Just let the code go through and do the check at
> second place.
>
> No functional change is expected.
>
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> ---
>  mm/swapfile.c | 4 ----
>  1 file changed, 4 deletions(-)
>
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index 3aae700f9931..07b0bc095411 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -629,10 +629,6 @@ static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
>  	tmp = cluster->next;
>  	max = min_t(unsigned long, si->max,
>  		    (cluster_next(&cluster->index) + 1) * SWAPFILE_CLUSTER);
> -	if (tmp >= max) {
> -		cluster_set_null(&cluster->index);
> -		goto new_cluster;
> -	}

The code is to avoid to acquire the cluster lock unnecessarily.  So I think
we should keep this.

Best Regards,
Huang, Ying

>  	ci = lock_cluster(si, tmp);
>  	while (tmp < max) {
>  		if (!si->swap_map[tmp])
Wei Yang April 20, 2020, 9:37 p.m. UTC | #2
On Mon, Apr 20, 2020 at 09:03:43AM +0800, Huang, Ying wrote:
>Wei Yang <richard.weiyang@gmail.com> writes:
>
>> There are two duplicate code to handle the case when there is no
>> available swap entry. Just let the code go through and do the check at
>> second place.
>>
>> No functional change is expected.
>>
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> ---
>>  mm/swapfile.c | 4 ----
>>  1 file changed, 4 deletions(-)
>>
>> diff --git a/mm/swapfile.c b/mm/swapfile.c
>> index 3aae700f9931..07b0bc095411 100644
>> --- a/mm/swapfile.c
>> +++ b/mm/swapfile.c
>> @@ -629,10 +629,6 @@ static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
>>  	tmp = cluster->next;
>>  	max = min_t(unsigned long, si->max,
>>  		    (cluster_next(&cluster->index) + 1) * SWAPFILE_CLUSTER);
>> -	if (tmp >= max) {
>> -		cluster_set_null(&cluster->index);
>> -		goto new_cluster;
>> -	}
>
>The code is to avoid to acquire the cluster lock unnecessarily.  So I think
>we should keep this.
>

If you really want to avoid the lock, my suggestion is to add:

  if (tmp < max) {
      ci = lock_cluster(si, tmp);
          while (tmp < max) {
	  ...
	  }
      unlock_cluster(ci);
  }

Instead of do the similar thing twice.

>Best Regards,
>Huang, Ying
>
>>  	ci = lock_cluster(si, tmp);
>>  	while (tmp < max) {
>>  		if (!si->swap_map[tmp])
Huang, Ying April 20, 2020, 11:51 p.m. UTC | #3
Wei Yang <richard.weiyang@gmail.com> writes:

> On Mon, Apr 20, 2020 at 09:03:43AM +0800, Huang, Ying wrote:
>>Wei Yang <richard.weiyang@gmail.com> writes:
>>
>>> There are two duplicate code to handle the case when there is no
>>> available swap entry. Just let the code go through and do the check at
>>> second place.
>>>
>>> No functional change is expected.
>>>
>>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>>> ---
>>>  mm/swapfile.c | 4 ----
>>>  1 file changed, 4 deletions(-)
>>>
>>> diff --git a/mm/swapfile.c b/mm/swapfile.c
>>> index 3aae700f9931..07b0bc095411 100644
>>> --- a/mm/swapfile.c
>>> +++ b/mm/swapfile.c
>>> @@ -629,10 +629,6 @@ static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
>>>  	tmp = cluster->next;
>>>  	max = min_t(unsigned long, si->max,
>>>  		    (cluster_next(&cluster->index) + 1) * SWAPFILE_CLUSTER);
>>> -	if (tmp >= max) {
>>> -		cluster_set_null(&cluster->index);
>>> -		goto new_cluster;
>>> -	}
>>
>>The code is to avoid to acquire the cluster lock unnecessarily.  So I think
>>we should keep this.
>>
>
> If you really want to avoid the lock, my suggestion is to add:
>
>   if (tmp < max) {
>       ci = lock_cluster(si, tmp);
>           while (tmp < max) {
> 	  ...
> 	  }
>       unlock_cluster(ci);
>   }
>
> Instead of do the similar thing twice.

This is a coding style problem.  The original code is common to avoid
too many nested code block.  But in this case, I think both works.

Best Regards,
Huang, Ying

>>Best Regards,
>>Huang, Ying
>>
>>>  	ci = lock_cluster(si, tmp);
>>>  	while (tmp < max) {
>>>  		if (!si->swap_map[tmp])
diff mbox series

Patch

diff --git a/mm/swapfile.c b/mm/swapfile.c
index c457f3be6944..654bad5173bc 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -601,7 +601,6 @@  static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
 {
 	struct percpu_cluster *cluster;
 	struct swap_cluster_info *ci;
-	bool found_free;
 	unsigned long tmp, max;
 
 new_cluster:
@@ -623,8 +622,6 @@  static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
 			return false;
 	}
 
-	found_free = false;
-
 	/*
 	 * Other CPUs can use our cluster if they can't find a free cluster,
 	 * check if there is still free entry in the cluster
@@ -638,21 +635,19 @@  static bool scan_swap_map_try_ssd_cluster(struct swap_info_struct *si,
 	}
 	ci = lock_cluster(si, tmp);
 	while (tmp < max) {
-		if (!si->swap_map[tmp]) {
-			found_free = true;
+		if (!si->swap_map[tmp])
 			break;
-		}
 		tmp++;
 	}
 	unlock_cluster(ci);
-	if (!found_free) {
+	if (tmp >= max) {
 		cluster_set_null(&cluster->index);
 		goto new_cluster;
 	}
 	cluster->next = tmp + 1;
 	*offset = tmp;
 	*scan_base = tmp;
-	return found_free;
+	return tmp < max;
 }
 
 static void __del_from_avail_list(struct swap_info_struct *p)