1 /* SPDX-License-Identifier: LGPL-2.1 */
4 * Copyright (c) International Business Machines Corp., 2002, 2007
5 * Author(s): Steve French (sfrench@us.ibm.com)
12 #include <linux/hash.h>
17 * ino_t is 32-bits on 32-bit arch. We have to squash the 64-bit value down
18 * so that it will fit. We use hash_64 to convert the value to 31 bits, and
19 * then add 1, to ensure that we don't end up with a 0 as the value.
22 cifs_uniqueid_to_ino_t(u64 fileid
)
24 if ((sizeof(ino_t
)) < (sizeof(u64
)))
25 return (ino_t
)hash_64(fileid
, (sizeof(ino_t
) * 8) - 1) + 1;
31 static inline void cifs_set_time(struct dentry
*dentry
, unsigned long time
)
33 dentry
->d_fsdata
= (void *) time
;
36 static inline unsigned long cifs_get_time(struct dentry
*dentry
)
38 return (unsigned long) dentry
->d_fsdata
;
41 extern struct file_system_type cifs_fs_type
, smb3_fs_type
;
42 extern const struct address_space_operations cifs_addr_ops
;
43 extern const struct address_space_operations cifs_addr_ops_smallbuf
;
45 /* Functions related to super block operations */
46 extern void cifs_sb_active(struct super_block
*sb
);
47 extern void cifs_sb_deactive(struct super_block
*sb
);
49 /* Functions related to inodes */
50 extern const struct inode_operations cifs_dir_inode_ops
;
51 extern struct inode
*cifs_root_iget(struct super_block
*);
52 extern int cifs_create(struct user_namespace
*, struct inode
*,
53 struct dentry
*, umode_t
, bool excl
);
54 extern int cifs_atomic_open(struct inode
*, struct dentry
*,
55 struct file
*, unsigned, umode_t
);
56 extern struct dentry
*cifs_lookup(struct inode
*, struct dentry
*,
58 extern int cifs_unlink(struct inode
*dir
, struct dentry
*dentry
);
59 extern int cifs_hardlink(struct dentry
*, struct inode
*, struct dentry
*);
60 extern int cifs_mknod(struct user_namespace
*, struct inode
*, struct dentry
*,
62 extern int cifs_mkdir(struct user_namespace
*, struct inode
*, struct dentry
*,
64 extern int cifs_rmdir(struct inode
*, struct dentry
*);
65 extern int cifs_rename2(struct user_namespace
*, struct inode
*,
66 struct dentry
*, struct inode
*, struct dentry
*,
68 extern int cifs_revalidate_file_attr(struct file
*filp
);
69 extern int cifs_revalidate_dentry_attr(struct dentry
*);
70 extern int cifs_revalidate_file(struct file
*filp
);
71 extern int cifs_revalidate_dentry(struct dentry
*);
72 extern int cifs_invalidate_mapping(struct inode
*inode
);
73 extern int cifs_revalidate_mapping(struct inode
*inode
);
74 extern int cifs_zap_mapping(struct inode
*inode
);
75 extern int cifs_getattr(struct user_namespace
*, const struct path
*,
76 struct kstat
*, u32
, unsigned int);
77 extern int cifs_setattr(struct user_namespace
*, struct dentry
*,
79 extern int cifs_fiemap(struct inode
*, struct fiemap_extent_info
*, u64 start
,
82 extern const struct inode_operations cifs_file_inode_ops
;
83 extern const struct inode_operations cifs_symlink_inode_ops
;
84 extern const struct inode_operations cifs_dfs_referral_inode_operations
;
87 /* Functions related to files and directories */
88 extern const struct file_operations cifs_file_ops
;
89 extern const struct file_operations cifs_file_direct_ops
; /* if directio mnt */
90 extern const struct file_operations cifs_file_strict_ops
; /* if strictio mnt */
91 extern const struct file_operations cifs_file_nobrl_ops
; /* no brlocks */
92 extern const struct file_operations cifs_file_direct_nobrl_ops
;
93 extern const struct file_operations cifs_file_strict_nobrl_ops
;
94 extern int cifs_open(struct inode
*inode
, struct file
*file
);
95 extern int cifs_close(struct inode
*inode
, struct file
*file
);
96 extern int cifs_closedir(struct inode
*inode
, struct file
*file
);
97 extern ssize_t
cifs_user_readv(struct kiocb
*iocb
, struct iov_iter
*to
);
98 extern ssize_t
cifs_direct_readv(struct kiocb
*iocb
, struct iov_iter
*to
);
99 extern ssize_t
cifs_strict_readv(struct kiocb
*iocb
, struct iov_iter
*to
);
100 extern ssize_t
cifs_user_writev(struct kiocb
*iocb
, struct iov_iter
*from
);
101 extern ssize_t
cifs_direct_writev(struct kiocb
*iocb
, struct iov_iter
*from
);
102 extern ssize_t
cifs_strict_writev(struct kiocb
*iocb
, struct iov_iter
*from
);
103 extern int cifs_flock(struct file
*pfile
, int cmd
, struct file_lock
*plock
);
104 extern int cifs_lock(struct file
*, int, struct file_lock
*);
105 extern int cifs_fsync(struct file
*, loff_t
, loff_t
, int);
106 extern int cifs_strict_fsync(struct file
*, loff_t
, loff_t
, int);
107 extern int cifs_flush(struct file
*, fl_owner_t id
);
108 extern int cifs_file_mmap(struct file
* , struct vm_area_struct
*);
109 extern int cifs_file_strict_mmap(struct file
* , struct vm_area_struct
*);
110 extern const struct file_operations cifs_dir_ops
;
111 extern int cifs_dir_open(struct inode
*inode
, struct file
*file
);
112 extern int cifs_readdir(struct file
*file
, struct dir_context
*ctx
);
114 /* Functions related to dir entries */
115 extern const struct dentry_operations cifs_dentry_ops
;
116 extern const struct dentry_operations cifs_ci_dentry_ops
;
118 #ifdef CONFIG_CIFS_DFS_UPCALL
119 extern struct vfsmount
*cifs_dfs_d_automount(struct path
*path
);
121 #define cifs_dfs_d_automount NULL
124 /* Functions related to symlinks */
125 extern const char *cifs_get_link(struct dentry
*, struct inode
*,
126 struct delayed_call
*);
127 extern int cifs_symlink(struct user_namespace
*mnt_userns
, struct inode
*inode
,
128 struct dentry
*direntry
, const char *symname
);
130 #ifdef CONFIG_CIFS_XATTR
131 extern const struct xattr_handler
*cifs_xattr_handlers
[];
132 extern ssize_t
cifs_listxattr(struct dentry
*, char *, size_t);
134 # define cifs_xattr_handlers NULL
135 # define cifs_listxattr NULL
138 extern ssize_t
cifs_file_copychunk_range(unsigned int xid
,
139 struct file
*src_file
, loff_t off
,
140 struct file
*dst_file
, loff_t destoff
,
141 size_t len
, unsigned int flags
);
143 extern long cifs_ioctl(struct file
*filep
, unsigned int cmd
, unsigned long arg
);
144 extern void cifs_setsize(struct inode
*inode
, loff_t offset
);
145 extern int cifs_truncate_page(struct address_space
*mapping
, loff_t from
);
147 struct smb3_fs_context
;
148 extern struct dentry
*cifs_smb3_do_mount(struct file_system_type
*fs_type
,
149 int flags
, struct smb3_fs_context
*ctx
);
151 #ifdef CONFIG_CIFS_NFSD_EXPORT
152 extern const struct export_operations cifs_export_ops
;
153 #endif /* CONFIG_CIFS_NFSD_EXPORT */
155 /* when changing internal version - update following two lines at same time */
156 #define SMB3_PRODUCT_BUILD 39
157 #define CIFS_VERSION "2.39"
158 #endif /* _CIFSFS_H */