32 bit systems using 'time_t' will break in the year 2038, so
we modify the code appropriately.

This patch removes the cast to 'time_t' in the assignment statement
since we are eventually removing the time_t definition from the kernel
as an effort to solve the y2038 problem. This change will avoid the
build error but the code is still broken and requires a change in the ioctl
interface.

Further, since the variable io_profile_start_time will break in 2038 or 2106 
depending on user space interpreting it as signed or unsigned,
comments have been added to highlight the same.

Signed-off-by: Amitoj Kaur Chawla <[email protected]>
---
Changes in v2:
        -Added comments about overflow

Only apply this patch if it's seen as acceptable that the
io_profile_start_time remains truncated to 32 bits in
IOCMD_ITNIM_GET_IOPROFILE. If this is something that needs to
be fixed by adding a replacement vendor command, leave the
cast in place as a reminder.

 drivers/scsi/bfa/bfa_defs_svc.h | 4 ++++
 drivers/scsi/bfa/bfa_fcpim.c    | 3 ++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/bfa/bfa_defs_svc.h b/drivers/scsi/bfa/bfa_defs_svc.h
index e7acf41..599db7b 100644
--- a/drivers/scsi/bfa/bfa_defs_svc.h
+++ b/drivers/scsi/bfa/bfa_defs_svc.h
@@ -1211,6 +1211,10 @@ struct bfa_itnim_ioprofile_s {
        u32 clock_res_mul;
        u32 clock_res_div;
        u32 index;
+       /*
+       * Overflow in 2038 or 2106 depending on user space interpreting it as
+       * signed or unsigned.
+       */
        u32 io_profile_start_time;      /*  IO profile start time       */
        u32 iocomps[BFA_IOBUCKET_MAX];  /*  IO completed        */
        struct bfa_itnim_latency_s io_latency;
diff --git a/drivers/scsi/bfa/bfa_fcpim.c b/drivers/scsi/bfa/bfa_fcpim.c
index 6730340..56df8d0 100644
--- a/drivers/scsi/bfa/bfa_fcpim.c
+++ b/drivers/scsi/bfa/bfa_fcpim.c
@@ -1478,7 +1478,8 @@ bfa_itnim_get_ioprofile(struct bfa_itnim_s *itnim,
                return BFA_STATUS_IOPROFILE_OFF;
 
        itnim->ioprofile.index = BFA_IOBUCKET_MAX;
-       itnim->ioprofile.io_profile_start_time = (u32)(time_t)
+       /* io_profile_start_time will overflow in 2038 or 2106 */
+       itnim->ioprofile.io_profile_start_time = (u32)
                                        bfa_io_profile_start_time(itnim->bfa);
        itnim->ioprofile.clock_res_mul = bfa_io_lat_clock_res_mul;
        itnim->ioprofile.clock_res_div = bfa_io_lat_clock_res_div;
-- 
1.9.1

_______________________________________________
Y2038 mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/y2038

Reply via email to