|
@@ -207,6 +207,19 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static long cifs_fallocate(struct file *file, int mode, loff_t off, loff_t len)
|
|
|
+{
|
|
|
+ struct super_block *sb = file->f_path.dentry->d_sb;
|
|
|
+ struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
|
|
+ struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
|
|
|
+ struct TCP_Server_Info *server = tcon->ses->server;
|
|
|
+
|
|
|
+ if (server->ops->fallocate)
|
|
|
+ return server->ops->fallocate(file, tcon, mode, off, len);
|
|
|
+
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+}
|
|
|
+
|
|
|
static int cifs_permission(struct inode *inode, int mask)
|
|
|
{
|
|
|
struct cifs_sb_info *cifs_sb;
|
|
@@ -909,6 +922,7 @@ const struct file_operations cifs_file_ops = {
|
|
|
.unlocked_ioctl = cifs_ioctl,
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_file_strict_ops = {
|
|
@@ -928,6 +942,7 @@ const struct file_operations cifs_file_strict_ops = {
|
|
|
.unlocked_ioctl = cifs_ioctl,
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_file_direct_ops = {
|
|
@@ -948,6 +963,7 @@ const struct file_operations cifs_file_direct_ops = {
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.llseek = cifs_llseek,
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_file_nobrl_ops = {
|
|
@@ -966,6 +982,7 @@ const struct file_operations cifs_file_nobrl_ops = {
|
|
|
.unlocked_ioctl = cifs_ioctl,
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_file_strict_nobrl_ops = {
|
|
@@ -984,6 +1001,7 @@ const struct file_operations cifs_file_strict_nobrl_ops = {
|
|
|
.unlocked_ioctl = cifs_ioctl,
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_file_direct_nobrl_ops = {
|
|
@@ -1003,6 +1021,7 @@ const struct file_operations cifs_file_direct_nobrl_ops = {
|
|
|
#endif /* CONFIG_CIFS_POSIX */
|
|
|
.llseek = cifs_llseek,
|
|
|
.setlease = cifs_setlease,
|
|
|
+ .fallocate = cifs_fallocate,
|
|
|
};
|
|
|
|
|
|
const struct file_operations cifs_dir_ops = {
|