]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - ubuntu/vbox/vboxsf/vfsmod.h
UBUNTU: ubuntu: vbox -- update to 5.2.2-dfsg-2
[mirror_ubuntu-bionic-kernel.git] / ubuntu / vbox / vboxsf / vfsmod.h
CommitLineData
056a1eb7
SF
1/** @file
2 * vboxsf - VirtualBox Guest Additions for Linux.
3 */
4
5/*
26894aac 6 * Copyright (C) 2006-2017 Oracle Corporation
056a1eb7
SF
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 */
16
17#ifndef VFSMOD_H
18#define VFSMOD_H
19
20#define LOG_GROUP LOG_GROUP_SHARED_FOLDERS
21#include "the-linux-kernel.h"
22#include <VBox/log.h>
23
24#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
25# include <linux/backing-dev.h>
26#endif
27
28#include <VBox/VBoxGuestLibSharedFolders.h>
29#include "vbsfmount.h"
30
31#define DIR_BUFFER_SIZE (16*_1K)
32
33/* per-shared folder information */
34struct sf_glob_info
35{
36 VBGLSFMAP map;
37 struct nls_table *nls;
38 int ttl;
39 int uid;
40 int gid;
41 int dmode;
42 int fmode;
43 int dmask;
44 int fmask;
45#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
46 struct backing_dev_info bdi;
47#endif
48};
49
50/* per-inode information */
51struct sf_inode_info
52{
53 /* which file */
54 SHFLSTRING *path;
55 /* some information was changed, update data on next revalidate */
56 int force_restat;
57 /* directory content changed, update the whole directory on next sf_getdent */
58 int force_reread;
59 /* file structure, only valid between open() and release() */
60 struct file *file;
61 /* handle valid if a file was created with sf_create_aux until it will
62 * be opened with sf_reg_open() */
63 SHFLHANDLE handle;
64};
65
66struct sf_dir_info
67{
68 struct list_head info_list;
69};
70
71struct sf_dir_buf
72{
73 size_t cEntries;
74 size_t cbFree;
75 size_t cbUsed;
76 void *buf;
77 struct list_head head;
78};
79
80struct sf_reg_info
81{
82 SHFLHANDLE handle;
83};
84
85/* globals */
86extern VBGLSFCLIENT client_handle;
87
88/* forward declarations */
89extern struct inode_operations sf_dir_iops;
90extern struct inode_operations sf_lnk_iops;
91extern struct inode_operations sf_reg_iops;
92extern struct file_operations sf_dir_fops;
93extern struct file_operations sf_reg_fops;
94extern struct dentry_operations sf_dentry_ops;
95extern struct address_space_operations sf_reg_aops;
96
97extern void sf_init_inode(struct sf_glob_info *sf_g, struct inode *inode,
98 PSHFLFSOBJINFO info);
99extern int sf_stat(const char *caller, struct sf_glob_info *sf_g,
100 SHFLSTRING *path, PSHFLFSOBJINFO result, int ok_to_fail);
101extern int sf_inode_revalidate(struct dentry *dentry);
102#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
103# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
104extern int sf_getattr(const struct path *path, struct kstat *kstat,
105 u32 request_mask, unsigned int query_flags);
106# else
107extern int sf_getattr(struct vfsmount *mnt, struct dentry *dentry,
108 struct kstat *kstat);
109#endif
110extern int sf_setattr(struct dentry *dentry, struct iattr *iattr);
111#endif
112extern int sf_path_from_dentry(const char *caller, struct sf_glob_info *sf_g,
113 struct sf_inode_info *sf_i, struct dentry *dentry,
114 SHFLSTRING **result);
115extern int sf_nlscpy(struct sf_glob_info *sf_g,
116 char *name, size_t name_bound_len,
117 const unsigned char *utf8_name, size_t utf8_len);
118extern void sf_dir_info_free(struct sf_dir_info *p);
119extern void sf_dir_info_empty(struct sf_dir_info *p);
120extern struct sf_dir_info *sf_dir_info_alloc(void);
121extern int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i,
122 struct sf_dir_info *sf_d, SHFLHANDLE handle);
123extern int sf_init_backing_dev(struct sf_glob_info *sf_g);
124extern void sf_done_backing_dev(struct sf_glob_info *sf_g);
125
126#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
127# define STRUCT_STATFS struct statfs
128#else
129# define STRUCT_STATFS struct kstatfs
130#endif
131int sf_get_volume_info(struct super_block *sb,STRUCT_STATFS *stat);
132
133#ifdef __cplusplus
134# define CMC_API __attribute__ ((cdecl, regparm (0)))
135#else
136# define CMC_API __attribute__ ((regparm (0)))
137#endif
138
139#define TRACE() LogFunc(("tracepoint\n"))
140
141/* Following casts are here to prevent assignment of void * to
142 pointers of arbitrary type */
143#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
144# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->u.generic_sbp)
145# define SET_GLOB_INFO(sb, sf_g) (sb)->u.generic_sbp = sf_g
146#else
147# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->s_fs_info)
148# define SET_GLOB_INFO(sb, sf_g) (sb)->s_fs_info = sf_g
149#endif
150
151#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) || defined(KERNEL_FC6)
152/* FC6 kernel 2.6.18, vanilla kernel 2.6.19+ */
153# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->i_private)
154# define SET_INODE_INFO(i, sf_i) (i)->i_private = sf_i
155#else
156/* vanilla kernel up to 2.6.18 */
157# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->u.generic_ip)
158# define SET_INODE_INFO(i, sf_i) (i)->u.generic_ip = sf_i
159#endif
160
161#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
162# define GET_F_DENTRY(f) (f->f_path.dentry)
163#else
164# define GET_F_DENTRY(f) (f->f_dentry)
165#endif
166
167#endif
168