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

Commit cbedeadf authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Steve French
Browse files

cifs: use 64-bit timestamps for fscache



In the fscache, we just need the timestamps as cookies to check for
changes, so we don't really care about the overflow, but it's better
to stop using the deprecated timespec so we don't have to go through
explicit conversion functions.

To avoid comparing uninitialized padding values that are copied
while assigning the timespec values, this rearranges the members of
cifs_fscache_inode_auxdata to avoid padding, and assigns them
individually.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarPaulo Alcantara <palcantara@suse.de>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 95390201
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -128,8 +128,10 @@ fscache_checkaux cifs_fscache_inode_check_aux(void *cookie_netfs_data,


	memset(&auxdata, 0, sizeof(auxdata));
	memset(&auxdata, 0, sizeof(auxdata));
	auxdata.eof = cifsi->server_eof;
	auxdata.eof = cifsi->server_eof;
	auxdata.last_write_time = timespec64_to_timespec(cifsi->vfs_inode.i_mtime);
	auxdata.last_write_time_sec = cifsi->vfs_inode.i_mtime.tv_sec;
	auxdata.last_change_time = timespec64_to_timespec(cifsi->vfs_inode.i_ctime);
	auxdata.last_change_time_sec = cifsi->vfs_inode.i_ctime.tv_sec;
	auxdata.last_write_time_nsec = cifsi->vfs_inode.i_mtime.tv_nsec;
	auxdata.last_change_time_nsec = cifsi->vfs_inode.i_ctime.tv_nsec;


	if (memcmp(data, &auxdata, datalen) != 0)
	if (memcmp(data, &auxdata, datalen) != 0)
		return FSCACHE_CHECKAUX_OBSOLETE;
		return FSCACHE_CHECKAUX_OBSOLETE;
+8 −4
Original line number Original line Diff line number Diff line
@@ -129,8 +129,10 @@ static void cifs_fscache_acquire_inode_cookie(struct cifsInodeInfo *cifsi,


	memset(&auxdata, 0, sizeof(auxdata));
	memset(&auxdata, 0, sizeof(auxdata));
	auxdata.eof = cifsi->server_eof;
	auxdata.eof = cifsi->server_eof;
	auxdata.last_write_time = timespec64_to_timespec(cifsi->vfs_inode.i_mtime);
	auxdata.last_write_time_sec = cifsi->vfs_inode.i_mtime.tv_sec;
	auxdata.last_change_time = timespec64_to_timespec(cifsi->vfs_inode.i_ctime);
	auxdata.last_change_time_sec = cifsi->vfs_inode.i_ctime.tv_sec;
	auxdata.last_write_time_nsec = cifsi->vfs_inode.i_mtime.tv_nsec;
	auxdata.last_change_time_nsec = cifsi->vfs_inode.i_ctime.tv_nsec;


	cifsi->fscache =
	cifsi->fscache =
		fscache_acquire_cookie(tcon->fscache,
		fscache_acquire_cookie(tcon->fscache,
@@ -166,8 +168,10 @@ void cifs_fscache_release_inode_cookie(struct inode *inode)
	if (cifsi->fscache) {
	if (cifsi->fscache) {
		memset(&auxdata, 0, sizeof(auxdata));
		memset(&auxdata, 0, sizeof(auxdata));
		auxdata.eof = cifsi->server_eof;
		auxdata.eof = cifsi->server_eof;
		auxdata.last_write_time = timespec64_to_timespec(cifsi->vfs_inode.i_mtime);
		auxdata.last_write_time_sec = cifsi->vfs_inode.i_mtime.tv_sec;
		auxdata.last_change_time = timespec64_to_timespec(cifsi->vfs_inode.i_ctime);
		auxdata.last_change_time_sec = cifsi->vfs_inode.i_ctime.tv_sec;
		auxdata.last_write_time_nsec = cifsi->vfs_inode.i_mtime.tv_nsec;
		auxdata.last_change_time_nsec = cifsi->vfs_inode.i_ctime.tv_nsec;


		cifs_dbg(FYI, "%s: (0x%p)\n", __func__, cifsi->fscache);
		cifs_dbg(FYI, "%s: (0x%p)\n", __func__, cifsi->fscache);
		fscache_relinquish_cookie(cifsi->fscache, &auxdata, false);
		fscache_relinquish_cookie(cifsi->fscache, &auxdata, false);
+5 −3
Original line number Original line Diff line number Diff line
@@ -31,8 +31,10 @@
 * Auxiliary data attached to CIFS inode within the cache
 * Auxiliary data attached to CIFS inode within the cache
 */
 */
struct cifs_fscache_inode_auxdata {
struct cifs_fscache_inode_auxdata {
	struct timespec	last_write_time;
	u64 last_write_time_sec;
	struct timespec	last_change_time;
	u64 last_change_time_sec;
	u32 last_write_time_nsec;
	u32 last_change_time_nsec;
	u64 eof;
	u64 eof;
};
};