On Sun, Nov 24, 2019 at 1:34 PM Al Viro viro@zeniv.linux.org.uk wrote:
On Sun, Nov 24, 2019 at 01:13:50PM -0800, Deepa Dinamani wrote:
We also want to replace all uses of timespec64_trunc() with timestamp_truncate() for all fs cases.
In that case we have a few more:
fs/ceph/mds_client.c: req->r_stamp = timespec64_trunc(ts, mdsc->fsc->sb->s_time_gran);
Umm... That comes from ktime_get_coarse_real_ts64(&ts);
fs/cifs/inode.c: fattr->cf_mtime = timespec64_trunc(fattr->cf_mtime, sb->s_time_gran);
ktime_get_real_ts64(&fattr->cf_mtime) here
fs/cifs/inode.c: fattr->cf_atime = timespec64_trunc(fattr->cf_atime, sb->s_time_gran);
ditto
fs/fat/misc.c: inode->i_ctime = timespec64_trunc(*now, 10000000);
I wonder... some are from setattr, some (with NULL passed to fat_truncate_time()) from current_time()... Wouldn't it make more sense to move the truncation into the few callers that really need it (if any)? Quite a few of those are *also* getting the value from current_time(), after all. fat_fill_inode() looks like the only case that doesn't fall into these classes; does it need truncation?
I've posted a series at https://lore.kernel.org/lkml/20191130053030.7868-1-deepa.kernel@gmail.com/ I was able to get rid of all instances but it seemed like it would be easier for cifs to use timestamp_truncate() directly. If you really don't want it exported, I could find some other way of doing it.
BTW, could we *please* do something about fs/inode.c:update_time()? I mean, sure, local variable shadows file-scope function, so it's legitimate C, but this is not IOCCC and having a function called 'update_time' end with return update_time(inode, time, flags); is actively hostile towards casual readers...
Added this to the series as well.
-Deepa