Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8efd6894 authored by Deepa Dinamani's avatar Deepa Dinamani
Browse files

fs: add timespec64_truncate()



As vfs moves to using struct timespec64 to represent times,
update the argument to timespec_truncate() to use
struct timespec64. Also change the name of the function.
The rest of the implementation logic is the same.

Move this to fs/inode.c instead of kernel/time/time.c as all the
users of this api are filesystems.

Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
Cc: <viro@zeniv.linux.org.uk>
parent 771c577c
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -2110,6 +2110,30 @@ void inode_nohighmem(struct inode *inode)
}
EXPORT_SYMBOL(inode_nohighmem);

/**
 * timespec64_trunc - Truncate timespec64 to a granularity
 * @t: Timespec64
 * @gran: Granularity in ns.
 *
 * Truncate a timespec64 to a granularity. Always rounds down. gran must
 * not be 0 nor greater than a second (NSEC_PER_SEC, or 10^9 ns).
 */
struct timespec64 timespec64_trunc(struct timespec64 t, unsigned gran)
{
	/* Avoid division in the common cases 1 ns and 1 s. */
	if (gran == 1) {
		/* nothing */
	} else if (gran == NSEC_PER_SEC) {
		t.tv_nsec = 0;
	} else if (gran > 1 && gran < NSEC_PER_SEC) {
		t.tv_nsec -= t.tv_nsec % gran;
	} else {
		WARN(1, "illegal file time granularity: %u", gran);
	}
	return t;
}
EXPORT_SYMBOL(timespec64_trunc);

/**
 * current_time - Return FS time
 * @inode: inode.
+1 −0
Original line number Diff line number Diff line
@@ -1476,6 +1476,7 @@ static inline void i_gid_write(struct inode *inode, gid_t gid)
	inode->i_gid = make_kgid(inode->i_sb->s_user_ns, gid);
}

extern struct timespec64 timespec64_trunc(struct timespec64 t, unsigned gran);
extern struct timespec current_time(struct inode *inode);

/*