brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 81ba0fd Raw
82 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 *  Functions to handle the cached directory entries4 *5 *  Copyright (c) 2022, Ronnie Sahlberg <lsahlber@redhat.com>6 */7 8#ifndef _CACHED_DIR_H9#define _CACHED_DIR_H10 11 12struct cached_dirent {13	struct list_head entry;14	char *name;15	int namelen;16	loff_t pos;17 18	struct cifs_fattr fattr;19};20 21struct cached_dirents {22	bool is_valid:1;23	bool is_failed:1;24	struct dir_context *ctx; /*25				  * Only used to make sure we only take entries26				  * from a single context. Never dereferenced.27				  */28	struct mutex de_mutex;29	int pos;		 /* Expected ctx->pos */30	struct list_head entries;31};32 33struct cached_fid {34	struct list_head entry;35	struct cached_fids *cfids;36	const char *path;37	bool has_lease:1;38	bool is_open:1;39	bool on_list:1;40	bool file_all_info_is_valid:1;41	unsigned long time; /* jiffies of when lease was taken */42	struct kref refcount;43	struct cifs_fid fid;44	spinlock_t fid_lock;45	struct cifs_tcon *tcon;46	struct dentry *dentry;47	struct work_struct lease_break;48	struct smb2_file_all_info file_all_info;49	struct cached_dirents dirents;50};51 52/* default MAX_CACHED_FIDS is 16 */53struct cached_fids {54	/* Must be held when:55	 * - accessing the cfids->entries list56	 */57	spinlock_t cfid_list_lock;58	int num_entries;59	struct list_head entries;60	struct delayed_work laundromat_work;61};62 63extern struct cached_fids *init_cached_dirs(void);64extern void free_cached_dirs(struct cached_fids *cfids);65extern int open_cached_dir(unsigned int xid, struct cifs_tcon *tcon,66			   const char *path,67			   struct cifs_sb_info *cifs_sb,68			   bool lookup_only, struct cached_fid **cfid);69extern int open_cached_dir_by_dentry(struct cifs_tcon *tcon,70				     struct dentry *dentry,71				     struct cached_fid **cfid);72extern void close_cached_dir(struct cached_fid *cfid);73extern void drop_cached_dir_by_name(const unsigned int xid,74				    struct cifs_tcon *tcon,75				    const char *name,76				    struct cifs_sb_info *cifs_sb);77extern void close_all_cached_dirs(struct cifs_sb_info *cifs_sb);78extern void invalidate_all_cached_dirs(struct cifs_tcon *tcon);79extern int cached_dir_lease_break(struct cifs_tcon *tcon, __u8 lease_key[16]);80 81#endif			/* _CACHED_DIR_H */82