Re: [RFC 13/15] kernel: time: change inode_timespec to timespec64
On Thu, Jan 07, 2016 at 09:50:30AM +0100, Michael Adam wrote: > Hi, > > the patch contains a conflict resolution artifact.. > Thanks, I've fixed it in my tree now. I will wait to hear other comments before I send an update. -Deepa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC 13/15] kernel: time: change inode_timespec to timespec64
Hi, the patch contains a conflict resolution artifact.. Cheers - Michael On 2016-01-06 at 21:36 -0800, Deepa Dinamani wrote: > Substitute inode_timespec aliases with timespec64. > Since CONFIG_FS_USES_64BIT_TIME is enabled, internally > all inode_timespec references are using timespec64 > already. > > Signed-off-by: Deepa Dinamani > > Conflicts: > kernel/time/time.c > > Conflicts: > kernel/time/time.c > --- > kernel/time/time.c | 130 > +++-- > 1 file changed, 76 insertions(+), 54 deletions(-) > > diff --git a/kernel/time/time.c b/kernel/time/time.c > index 24ca258..87d9a4c 100644 > --- a/kernel/time/time.c > +++ b/kernel/time/time.c > @@ -230,6 +230,76 @@ SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p) > return copy_to_user(txc_p, , sizeof(struct timex)) ? -EFAULT : ret; > } > > +<<< HEAD > +=== HERE ^ > +/** > + * current_fs_time - Return FS time > + * @sb: Superblock. > + * > + * Return the current time truncated to the time granularity supported by > + * the fs. > + */ > +struct timespec64 current_fs_time(struct super_block *sb) > +{ > + struct timespec64 now = current_kernel_time64(); > + > + return fs_time_trunc(now, sb); > +} > +EXPORT_SYMBOL(current_fs_time); > + > +struct timespec64 current_fs_time_sec(struct super_block *sb) > +{ > + struct timespec64 ts = {ktime_get_real_seconds(), 0}; > + > + /* range check for time. */ > + fs_time_range_check(sb, ); > + > + return ts; > +} > +EXPORT_SYMBOL(current_fs_time_sec); > + > +/* > + * Convert jiffies to milliseconds and back. > + * > + * Avoid unnecessary multiplications/divisions in the > + * two most common HZ cases: > + */ > +unsigned int jiffies_to_msecs(const unsigned long j) > +{ > +#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ) > + return (MSEC_PER_SEC / HZ) * j; > +#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC) > + return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC); > +#else > +# if BITS_PER_LONG == 32 > + return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; > +# else > + return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN; > +# endif > +#endif > +} > +EXPORT_SYMBOL(jiffies_to_msecs); > + > +unsigned int jiffies_to_usecs(const unsigned long j) > +{ > + /* > + * Hz usually doesn't go much further MSEC_PER_SEC. > + * jiffies_to_usecs() and usecs_to_jiffies() depend on that. > + */ > + BUILD_BUG_ON(HZ > USEC_PER_SEC); > + > +#if !(USEC_PER_SEC % HZ) > + return (USEC_PER_SEC / HZ) * j; > +#else > +# if BITS_PER_LONG == 32 > + return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32; > +# else > + return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN; > +# endif > +#endif > +} > +EXPORT_SYMBOL(jiffies_to_usecs); > + > /* fs_time_range_check: > * Function to check if a given timestamp is in the range allowed for a > * filesystem. > @@ -240,7 +310,7 @@ SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p) > * nsec is set to 0 if not in allowed range. > */ > static void > -fs_time_range_check(struct super_block *sb, struct inode_timespec *ts) > +fs_time_range_check(struct super_block *sb, struct timespec64 *ts) > { > if (unlikely(sb->s_time_max < ts->tv_sec || > sb->s_time_min > ts->tv_sec)) { > @@ -257,7 +327,7 @@ fs_time_range_check(struct super_block *sb, struct > inode_timespec *ts) > * fs_time_range_check. > * returns 0 otherwise. > */ > -int is_fs_timestamp_bad(struct inode_timespec ts) > +int is_fs_timestamp_bad(struct timespec64 ts) > { > if (ts.tv_nsec == FS_TIMESTAMP_NSEC_NOT_VALID) > return -1; > @@ -267,16 +337,16 @@ int is_fs_timestamp_bad(struct inode_timespec ts) > EXPORT_SYMBOL(is_fs_timestamp_bad); > > /* > - * fs_time_trunc - Truncate inode_timespec to a granularity > - * @t: inode_timespec > + * fs_time_trunc - Truncate timespec64 to a granularity > + * @t: timespec64 > * @sb: Super block. > * > * Truncate a timespec to a granularity. Always rounds down. Granularity > * must * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns). > * Returns 1 on error, 0 otherwise. > */ > -struct inode_timespec > -fs_time_trunc(struct inode_timespec t, struct super_block *sb) > +struct timespec64 > +fs_time_trunc(struct timespec64 t, struct super_block *sb) > { > u32 gran = sb->s_time_gran; > > @@ -300,34 +370,6 @@ fs_time_trunc(struct inode_timespec t, struct > super_block *sb) > EXPORT_SYMBOL(fs_time_trunc); > > /** > - * timespec_trunc - Truncate timespec to a granularity > - * @t: Timespec > - * @gran: Granularity in ns. > - * > - * Truncate a timespec to a granularity. Always rounds down. gran must > - * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns). > - * > - * This function is deprecated and should no longer be used for filesystems. > - * fs_time_trunc should be used instead. > - */ > -struct timespec timespec_trunc(struct timespec t, unsigned gran) > -{ > - > - /*
Re: [RFC 13/15] kernel: time: change inode_timespec to timespec64
Hi, the patch contains a conflict resolution artifact.. Cheers - Michael On 2016-01-06 at 21:36 -0800, Deepa Dinamani wrote: > Substitute inode_timespec aliases with timespec64. > Since CONFIG_FS_USES_64BIT_TIME is enabled, internally > all inode_timespec references are using timespec64 > already. > > Signed-off-by: Deepa Dinamani> > Conflicts: > kernel/time/time.c > > Conflicts: > kernel/time/time.c > --- > kernel/time/time.c | 130 > +++-- > 1 file changed, 76 insertions(+), 54 deletions(-) > > diff --git a/kernel/time/time.c b/kernel/time/time.c > index 24ca258..87d9a4c 100644 > --- a/kernel/time/time.c > +++ b/kernel/time/time.c > @@ -230,6 +230,76 @@ SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p) > return copy_to_user(txc_p, , sizeof(struct timex)) ? -EFAULT : ret; > } > > +<<< HEAD > +=== HERE ^ > +/** > + * current_fs_time - Return FS time > + * @sb: Superblock. > + * > + * Return the current time truncated to the time granularity supported by > + * the fs. > + */ > +struct timespec64 current_fs_time(struct super_block *sb) > +{ > + struct timespec64 now = current_kernel_time64(); > + > + return fs_time_trunc(now, sb); > +} > +EXPORT_SYMBOL(current_fs_time); > + > +struct timespec64 current_fs_time_sec(struct super_block *sb) > +{ > + struct timespec64 ts = {ktime_get_real_seconds(), 0}; > + > + /* range check for time. */ > + fs_time_range_check(sb, ); > + > + return ts; > +} > +EXPORT_SYMBOL(current_fs_time_sec); > + > +/* > + * Convert jiffies to milliseconds and back. > + * > + * Avoid unnecessary multiplications/divisions in the > + * two most common HZ cases: > + */ > +unsigned int jiffies_to_msecs(const unsigned long j) > +{ > +#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ) > + return (MSEC_PER_SEC / HZ) * j; > +#elif HZ > MSEC_PER_SEC && !(HZ % MSEC_PER_SEC) > + return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC); > +#else > +# if BITS_PER_LONG == 32 > + return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; > +# else > + return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN; > +# endif > +#endif > +} > +EXPORT_SYMBOL(jiffies_to_msecs); > + > +unsigned int jiffies_to_usecs(const unsigned long j) > +{ > + /* > + * Hz usually doesn't go much further MSEC_PER_SEC. > + * jiffies_to_usecs() and usecs_to_jiffies() depend on that. > + */ > + BUILD_BUG_ON(HZ > USEC_PER_SEC); > + > +#if !(USEC_PER_SEC % HZ) > + return (USEC_PER_SEC / HZ) * j; > +#else > +# if BITS_PER_LONG == 32 > + return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32; > +# else > + return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN; > +# endif > +#endif > +} > +EXPORT_SYMBOL(jiffies_to_usecs); > + > /* fs_time_range_check: > * Function to check if a given timestamp is in the range allowed for a > * filesystem. > @@ -240,7 +310,7 @@ SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p) > * nsec is set to 0 if not in allowed range. > */ > static void > -fs_time_range_check(struct super_block *sb, struct inode_timespec *ts) > +fs_time_range_check(struct super_block *sb, struct timespec64 *ts) > { > if (unlikely(sb->s_time_max < ts->tv_sec || > sb->s_time_min > ts->tv_sec)) { > @@ -257,7 +327,7 @@ fs_time_range_check(struct super_block *sb, struct > inode_timespec *ts) > * fs_time_range_check. > * returns 0 otherwise. > */ > -int is_fs_timestamp_bad(struct inode_timespec ts) > +int is_fs_timestamp_bad(struct timespec64 ts) > { > if (ts.tv_nsec == FS_TIMESTAMP_NSEC_NOT_VALID) > return -1; > @@ -267,16 +337,16 @@ int is_fs_timestamp_bad(struct inode_timespec ts) > EXPORT_SYMBOL(is_fs_timestamp_bad); > > /* > - * fs_time_trunc - Truncate inode_timespec to a granularity > - * @t: inode_timespec > + * fs_time_trunc - Truncate timespec64 to a granularity > + * @t: timespec64 > * @sb: Super block. > * > * Truncate a timespec to a granularity. Always rounds down. Granularity > * must * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns). > * Returns 1 on error, 0 otherwise. > */ > -struct inode_timespec > -fs_time_trunc(struct inode_timespec t, struct super_block *sb) > +struct timespec64 > +fs_time_trunc(struct timespec64 t, struct super_block *sb) > { > u32 gran = sb->s_time_gran; > > @@ -300,34 +370,6 @@ fs_time_trunc(struct inode_timespec t, struct > super_block *sb) > EXPORT_SYMBOL(fs_time_trunc); > > /** > - * timespec_trunc - Truncate timespec to a granularity > - * @t: Timespec > - * @gran: Granularity in ns. > - * > - * Truncate a timespec to a granularity. Always rounds down. gran must > - * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns). > - * > - * This function is deprecated and should no longer be used for filesystems. > - * fs_time_trunc should be used instead. > - */ > -struct timespec timespec_trunc(struct timespec t, unsigned
Re: [RFC 13/15] kernel: time: change inode_timespec to timespec64
On Thu, Jan 07, 2016 at 09:50:30AM +0100, Michael Adam wrote: > Hi, > > the patch contains a conflict resolution artifact.. > Thanks, I've fixed it in my tree now. I will wait to hear other comments before I send an update. -Deepa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/