2021-07-28 01:36:47

by Steve Dickson

[permalink] [raw]
Subject: [PATCH] nfsdcltrack: Use uint64_t instead of time_t

With recent commits (4f2a5b64,5a53426c) that fixed
compile errors on x86_64 machines, caused similar
errors on i686 machines.

The variable type that was being used was a time_t,
which changes size between architects, which
caused the compile error.

Changing the variable to uint64_t fixed the issue.

Signed-off-by: Steve Dickson <[email protected]>
---
utils/nfsdcltrack/nfsdcltrack.c | 2 +-
utils/nfsdcltrack/sqlite.c | 2 +-
utils/nfsdcltrack/sqlite.h | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
index 0b37c094..7c1c4bcc 100644
--- a/utils/nfsdcltrack/nfsdcltrack.c
+++ b/utils/nfsdcltrack/nfsdcltrack.c
@@ -508,7 +508,7 @@ cltrack_gracedone(const char *timestr)
{
int ret;
char *tail;
- time_t gracetime;
+ uint64_t gracetime;


ret = sqlite_prepare_dbh(storagedir);
diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
index cea4a411..cf0c6a45 100644
--- a/utils/nfsdcltrack/sqlite.c
+++ b/utils/nfsdcltrack/sqlite.c
@@ -540,7 +540,7 @@ out_err:
* remove any client records that were not reclaimed since grace_start.
*/
int
-sqlite_remove_unreclaimed(time_t grace_start)
+sqlite_remove_unreclaimed(uint64_t grace_start)
{
int ret;
char *err = NULL;
diff --git a/utils/nfsdcltrack/sqlite.h b/utils/nfsdcltrack/sqlite.h
index 06e7c044..ba8cdfa8 100644
--- a/utils/nfsdcltrack/sqlite.h
+++ b/utils/nfsdcltrack/sqlite.h
@@ -26,7 +26,7 @@ int sqlite_insert_client(const unsigned char *clname, const size_t namelen,
int sqlite_remove_client(const unsigned char *clname, const size_t namelen);
int sqlite_check_client(const unsigned char *clname, const size_t namelen,
const bool has_session);
-int sqlite_remove_unreclaimed(const time_t grace_start);
+int sqlite_remove_unreclaimed(const uint64_t grace_start);
int sqlite_query_reclaiming(const time_t grace_start);

#endif /* _SQLITE_H */
--
2.31.1



2021-07-28 11:16:34

by Jeff Layton

[permalink] [raw]
Subject: Re: [PATCH] nfsdcltrack: Use uint64_t instead of time_t

On Tue, 2021-07-27 at 21:36 -0400, Steve Dickson wrote:
> With recent commits (4f2a5b64,5a53426c) that fixed
> compile errors on x86_64 machines, caused similar
> errors on i686 machines.
>
> The variable type that was being used was a time_t,
> which changes size between architects, which
> caused the compile error.
>
> Changing the variable to uint64_t fixed the issue.
>
> Signed-off-by: Steve Dickson <[email protected]>
> ---
> utils/nfsdcltrack/nfsdcltrack.c | 2 +-
> utils/nfsdcltrack/sqlite.c | 2 +-
> utils/nfsdcltrack/sqlite.h | 2 +-
> 3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
> index 0b37c094..7c1c4bcc 100644
> --- a/utils/nfsdcltrack/nfsdcltrack.c
> +++ b/utils/nfsdcltrack/nfsdcltrack.c
> @@ -508,7 +508,7 @@ cltrack_gracedone(const char *timestr)
> {
> int ret;
> char *tail;
> - time_t gracetime;
> + uint64_t gracetime;
>

Hmm.. time_t is a long:

typedef __kernel_long_t __kernel_time_t;

...but the kernel is converting this value from a time64_t which is s64.
?
Should the above be int64_t instead of being unsigned? The kernel should
never send down a negative value, but if you're trying to match up types
then that might be cleaner.

>
> ret = sqlite_prepare_dbh(storagedir);
> diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
> index cea4a411..cf0c6a45 100644
> --- a/utils/nfsdcltrack/sqlite.c
> +++ b/utils/nfsdcltrack/sqlite.c
> @@ -540,7 +540,7 @@ out_err:
> * remove any client records that were not reclaimed since grace_start.
> */
> int
> -sqlite_remove_unreclaimed(time_t grace_start)
> +sqlite_remove_unreclaimed(uint64_t grace_start)
> {
> int ret;
> char *err = NULL;
> diff --git a/utils/nfsdcltrack/sqlite.h b/utils/nfsdcltrack/sqlite.h
> index 06e7c044..ba8cdfa8 100644
> --- a/utils/nfsdcltrack/sqlite.h
> +++ b/utils/nfsdcltrack/sqlite.h
> @@ -26,7 +26,7 @@ int sqlite_insert_client(const unsigned char *clname, const size_t namelen,
> int sqlite_remove_client(const unsigned char *clname, const size_t namelen);
> int sqlite_check_client(const unsigned char *clname, const size_t namelen,
> const bool has_session);
> -int sqlite_remove_unreclaimed(const time_t grace_start);
> +int sqlite_remove_unreclaimed(const uint64_t grace_start);
> int sqlite_query_reclaiming(const time_t grace_start);
>
> #endif /* _SQLITE_H */

--
Jeff Layton <[email protected]>


2021-07-28 16:48:52

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] nfsdcltrack: Use uint64_t instead of time_t



On 7/28/21 7:15 AM, Jeff Layton wrote:
> On Tue, 2021-07-27 at 21:36 -0400, Steve Dickson wrote:
>> With recent commits (4f2a5b64,5a53426c) that fixed
>> compile errors on x86_64 machines, caused similar
>> errors on i686 machines.
>>
>> The variable type that was being used was a time_t,
>> which changes size between architects, which
>> caused the compile error.
>>
>> Changing the variable to uint64_t fixed the issue.
>>
>> Signed-off-by: Steve Dickson <[email protected]>
>> ---
>> utils/nfsdcltrack/nfsdcltrack.c | 2 +-
>> utils/nfsdcltrack/sqlite.c | 2 +-
>> utils/nfsdcltrack/sqlite.h | 2 +-
>> 3 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
>> index 0b37c094..7c1c4bcc 100644
>> --- a/utils/nfsdcltrack/nfsdcltrack.c
>> +++ b/utils/nfsdcltrack/nfsdcltrack.c
>> @@ -508,7 +508,7 @@ cltrack_gracedone(const char *timestr)
>> {
>> int ret;
>> char *tail;
>> - time_t gracetime;
>> + uint64_t gracetime;
>>
>
> Hmm.. time_t is a long:
>
> typedef __kernel_long_t __kernel_time_t;
>
> ...but the kernel is converting this value from a time64_t which is s64.
>
> Should the above be int64_t instead of being unsigned? The kernel should
> never send down a negative value, but if you're trying to match up types
> then that might be cleaner.
The patch I took to fix the printfs on 64-bits platforms
used the PRIu64 inttype interface so I was just keeping
things constant by using a uint64_t.

The answer to your question is yes... int64 is all that
is needed... but I don't in really matters...

steved.
>
>>
>> ret = sqlite_prepare_dbh(storagedir);
>> diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
>> index cea4a411..cf0c6a45 100644
>> --- a/utils/nfsdcltrack/sqlite.c
>> +++ b/utils/nfsdcltrack/sqlite.c
>> @@ -540,7 +540,7 @@ out_err:
>> * remove any client records that were not reclaimed since grace_start.
>> */
>> int
>> -sqlite_remove_unreclaimed(time_t grace_start)
>> +sqlite_remove_unreclaimed(uint64_t grace_start)
>> {
>> int ret;
>> char *err = NULL;
>> diff --git a/utils/nfsdcltrack/sqlite.h b/utils/nfsdcltrack/sqlite.h
>> index 06e7c044..ba8cdfa8 100644
>> --- a/utils/nfsdcltrack/sqlite.h
>> +++ b/utils/nfsdcltrack/sqlite.h
>> @@ -26,7 +26,7 @@ int sqlite_insert_client(const unsigned char *clname, const size_t namelen,
>> int sqlite_remove_client(const unsigned char *clname, const size_t namelen);
>> int sqlite_check_client(const unsigned char *clname, const size_t namelen,
>> const bool has_session);
>> -int sqlite_remove_unreclaimed(const time_t grace_start);
>> +int sqlite_remove_unreclaimed(const uint64_t grace_start);
>> int sqlite_query_reclaiming(const time_t grace_start);
>>
>> #endif /* _SQLITE_H */
>


2021-07-31 15:39:16

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] nfsdcltrack: Use uint64_t instead of time_t



On 7/27/21 9:36 PM, Steve Dickson wrote:
> With recent commits (4f2a5b64,5a53426c) that fixed
> compile errors on x86_64 machines, caused similar
> errors on i686 machines.
>
> The variable type that was being used was a time_t,
> which changes size between architects, which
> caused the compile error.
>
> Changing the variable to uint64_t fixed the issue.
>
> Signed-off-by: Steve Dickson <[email protected]>
Committed....

steved.
> ---
> utils/nfsdcltrack/nfsdcltrack.c | 2 +-
> utils/nfsdcltrack/sqlite.c | 2 +-
> utils/nfsdcltrack/sqlite.h | 2 +-
> 3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
> index 0b37c094..7c1c4bcc 100644
> --- a/utils/nfsdcltrack/nfsdcltrack.c
> +++ b/utils/nfsdcltrack/nfsdcltrack.c
> @@ -508,7 +508,7 @@ cltrack_gracedone(const char *timestr)
> {
> int ret;
> char *tail;
> - time_t gracetime;
> + uint64_t gracetime;
>
>
> ret = sqlite_prepare_dbh(storagedir);
> diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
> index cea4a411..cf0c6a45 100644
> --- a/utils/nfsdcltrack/sqlite.c
> +++ b/utils/nfsdcltrack/sqlite.c
> @@ -540,7 +540,7 @@ out_err:
> * remove any client records that were not reclaimed since grace_start.
> */
> int
> -sqlite_remove_unreclaimed(time_t grace_start)
> +sqlite_remove_unreclaimed(uint64_t grace_start)
> {
> int ret;
> char *err = NULL;
> diff --git a/utils/nfsdcltrack/sqlite.h b/utils/nfsdcltrack/sqlite.h
> index 06e7c044..ba8cdfa8 100644
> --- a/utils/nfsdcltrack/sqlite.h
> +++ b/utils/nfsdcltrack/sqlite.h
> @@ -26,7 +26,7 @@ int sqlite_insert_client(const unsigned char *clname, const size_t namelen,
> int sqlite_remove_client(const unsigned char *clname, const size_t namelen);
> int sqlite_check_client(const unsigned char *clname, const size_t namelen,
> const bool has_session);
> -int sqlite_remove_unreclaimed(const time_t grace_start);
> +int sqlite_remove_unreclaimed(const uint64_t grace_start);
> int sqlite_query_reclaiming(const time_t grace_start);
>
> #endif /* _SQLITE_H */
>