diff mbox

[next] scsi: arcmsr: remove redundant check for secs < 0

Message ID 20171209003414.17332-1-colin.king@canonical.com (mailing list archive)
State Accepted
Headers show

Commit Message

Colin King Dec. 9, 2017, 12:34 a.m. UTC
From: Colin Ian King <colin.king@canonical.com>

The check for secs being less than zero is redundant for two reasons.
Firstly, secs is unsigned so the check is always going to be false.
Secondly, if secs was signed the proceeding calculation of secs is
never going to be negative.  Hence we can remove this redundant check
and day and secs re-adjustment.

Detected by static analysis with smatch:
arcmsr_set_iop_datetime() warn: unsigned 'secs' is never less than zero.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/scsi/arcmsr/arcmsr_hba.c | 4 ----
 1 file changed, 4 deletions(-)

Comments

ching Huang Dec. 11, 2017, 2:41 a.m. UTC | #1
Colin,

You are right. That's checking is redundant. secs is never be negative.
Thanks for your correction and patch.

Regards,
Ching

2017-12-09 8:34 GMT+08:00 Colin King <colin.king@canonical.com>:
> From: Colin Ian King <colin.king@canonical.com>
>
> The check for secs being less than zero is redundant for two reasons.
> Firstly, secs is unsigned so the check is always going to be false.
> Secondly, if secs was signed the proceeding calculation of secs is
> never going to be negative.  Hence we can remove this redundant check
> and day and secs re-adjustment.
>
> Detected by static analysis with smatch:
> arcmsr_set_iop_datetime() warn: unsigned 'secs' is never less than zero.
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  drivers/scsi/arcmsr/arcmsr_hba.c | 4 ----
>  1 file changed, 4 deletions(-)
>
> diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
> index 0707a60bf5c0..e4258b69f4be 100644
> --- a/drivers/scsi/arcmsr/arcmsr_hba.c
> +++ b/drivers/scsi/arcmsr/arcmsr_hba.c
> @@ -3679,10 +3679,6 @@ static void arcmsr_set_iop_datetime(struct timer_list *t)
>         secs = (u32)(tv.tv_sec - (sys_tz.tz_minuteswest * 60));
>         days = secs / 86400;
>         secs = secs - 86400 * days;
> -       if (secs < 0) {
> -               days = days - 1;
> -               secs = secs + 86400;
> -       }
>         j = days / 146097;
>         i = days - 146097 * j;
>         a = i + 719468;
> --
> 2.14.1
>
Martin K. Petersen Dec. 12, 2017, 2:37 a.m. UTC | #2
Colin,

> The check for secs being less than zero is redundant for two reasons.
> Firstly, secs is unsigned so the check is always going to be false.
> Secondly, if secs was signed the proceeding calculation of secs is
> never going to be negative.  Hence we can remove this redundant check
> and day and secs re-adjustment.

Applied to 4.16/scsi-queue, thanks!
Walter Harms Dec. 15, 2017, 5:52 p.m. UTC | #3
Am 09.12.2017 01:34, schrieb Colin King:
> From: Colin Ian King <colin.king@canonical.com>
> 
> The check for secs being less than zero is redundant for two reasons.
> Firstly, secs is unsigned so the check is always going to be false.
> Secondly, if secs was signed the proceeding calculation of secs is
> never going to be negative.  Hence we can remove this redundant check
> and day and secs re-adjustment.
> 
> Detected by static analysis with smatch:
> arcmsr_set_iop_datetime() warn: unsigned 'secs' is never less than zero.
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  drivers/scsi/arcmsr/arcmsr_hba.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
> index 0707a60bf5c0..e4258b69f4be 100644
> --- a/drivers/scsi/arcmsr/arcmsr_hba.c
> +++ b/drivers/scsi/arcmsr/arcmsr_hba.c
> @@ -3679,10 +3679,6 @@ static void arcmsr_set_iop_datetime(struct timer_list *t)
>  	secs = (u32)(tv.tv_sec - (sys_tz.tz_minuteswest * 60));
>  	days = secs / 86400;
>  	secs = secs - 86400 * days;

mmh, what they want to do is:
	secs = secs % 86400 ;

> -	if (secs < 0) {
> -		days = days - 1;
> -		secs = secs + 86400;
> -	}
>  	j = days / 146097;
>  	i = days - 146097 * j;
>  	a = i + 719468;

see above.
btw: are the numbers documented ?

re,
 wh
diff mbox

Patch

diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
index 0707a60bf5c0..e4258b69f4be 100644
--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -3679,10 +3679,6 @@  static void arcmsr_set_iop_datetime(struct timer_list *t)
 	secs = (u32)(tv.tv_sec - (sys_tz.tz_minuteswest * 60));
 	days = secs / 86400;
 	secs = secs - 86400 * days;
-	if (secs < 0) {
-		days = days - 1;
-		secs = secs + 86400;
-	}
 	j = days / 146097;
 	i = days - 146097 * j;
 	a = i + 719468;