File Index
Files and directories
Sign in
FILE

fscache.h

File preview with syntax highlighting.

linux-6.19.14/fs/smb/client/fscache.h C
  1/* SPDX-License-Identifier: LGPL-2.1 */
  2/*
  3 *   CIFS filesystem cache interface definitions
  4 *
  5 *   Copyright (c) 2010 Novell, Inc.
  6 *   Authors(s): Suresh Jayaraman (sjayaraman@suse.de>
  7 *
  8 */
  9#ifndef _CIFS_FSCACHE_H
 10#define _CIFS_FSCACHE_H
 11
 12#include <linux/swap.h>
 13#include <linux/fscache.h>
 14
 15#include "cifsglob.h"
 16
 17/*
 18 * Coherency data attached to CIFS volume within the cache
 19 */
 20struct cifs_fscache_volume_coherency_data {
 21	__le64	resource_id;		/* unique server resource id */
 22	__le64	vol_create_time;
 23	__le32	vol_serial_number;
 24} __packed;
 25
 26/*
 27 * Coherency data attached to CIFS inode within the cache.
 28 */
 29struct cifs_fscache_inode_coherency_data {
 30	__le64 last_write_time_sec;
 31	__le64 last_change_time_sec;
 32	__le32 last_write_time_nsec;
 33	__le32 last_change_time_nsec;
 34};
 35
 36#ifdef CONFIG_CIFS_FSCACHE
 37
 38/*
 39 * fscache.c
 40 */
 41extern int cifs_fscache_get_super_cookie(struct cifs_tcon *);
 42extern void cifs_fscache_release_super_cookie(struct cifs_tcon *);
 43
 44extern void cifs_fscache_get_inode_cookie(struct inode *inode);
 45extern void cifs_fscache_release_inode_cookie(struct inode *);
 46extern void cifs_fscache_unuse_inode_cookie(struct inode *inode, bool update);
 47
 48static inline
 49void cifs_fscache_fill_coherency(struct inode *inode,
 50				 struct cifs_fscache_inode_coherency_data *cd)
 51{
 52	struct timespec64 ctime = inode_get_ctime(inode);
 53	struct timespec64 mtime = inode_get_mtime(inode);
 54
 55	memset(cd, 0, sizeof(*cd));
 56	cd->last_write_time_sec   = cpu_to_le64(mtime.tv_sec);
 57	cd->last_write_time_nsec  = cpu_to_le32(mtime.tv_nsec);
 58	cd->last_change_time_sec  = cpu_to_le64(ctime.tv_sec);
 59	cd->last_change_time_nsec = cpu_to_le32(ctime.tv_nsec);
 60}
 61
 62
 63static inline struct fscache_cookie *cifs_inode_cookie(struct inode *inode)
 64{
 65	return netfs_i_cookie(&CIFS_I(inode)->netfs);
 66}
 67
 68static inline void cifs_invalidate_cache(struct inode *inode, unsigned int flags)
 69{
 70	struct cifs_fscache_inode_coherency_data cd;
 71
 72	cifs_fscache_fill_coherency(inode, &cd);
 73	fscache_invalidate(cifs_inode_cookie(inode), &cd,
 74			   i_size_read(inode), flags);
 75}
 76
 77static inline bool cifs_fscache_enabled(struct inode *inode)
 78{
 79	return fscache_cookie_enabled(cifs_inode_cookie(inode));
 80}
 81
 82#else /* CONFIG_CIFS_FSCACHE */
 83static inline
 84void cifs_fscache_fill_coherency(struct inode *inode,
 85				 struct cifs_fscache_inode_coherency_data *cd)
 86{
 87}
 88
 89static inline int cifs_fscache_get_super_cookie(struct cifs_tcon *tcon) { return 0; }
 90static inline void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon) {}
 91
 92static inline void cifs_fscache_get_inode_cookie(struct inode *inode) {}
 93static inline void cifs_fscache_release_inode_cookie(struct inode *inode) {}
 94static inline void cifs_fscache_unuse_inode_cookie(struct inode *inode, bool update) {}
 95static inline struct fscache_cookie *cifs_inode_cookie(struct inode *inode) { return NULL; }
 96static inline void cifs_invalidate_cache(struct inode *inode, unsigned int flags) {}
 97static inline bool cifs_fscache_enabled(struct inode *inode) { return false; }
 98
 99#endif /* CONFIG_CIFS_FSCACHE */
100
101#endif /* _CIFS_FSCACHE_H */
~/ Read-only file preview.