linux/fs/vboxsf/vfsmod.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: MIT */
   2/*
   3 * VirtualBox Guest Shared Folders support: module header.
   4 *
   5 * Copyright (C) 2006-2018 Oracle Corporation
   6 */
   7
   8#ifndef VFSMOD_H
   9#define VFSMOD_H
  10
  11#include <linux/backing-dev.h>
  12#include <linux/idr.h>
  13#include "shfl_hostintf.h"
  14
  15#define DIR_BUFFER_SIZE SZ_16K
  16
  17/* The cast is to prevent assignment of void * to pointers of arbitrary type */
  18#define VBOXSF_SBI(sb)  ((struct vboxsf_sbi *)(sb)->s_fs_info)
  19#define VBOXSF_I(i)     container_of(i, struct vboxsf_inode, vfs_inode)
  20
  21struct vboxsf_options {
  22        unsigned long ttl;
  23        kuid_t uid;
  24        kgid_t gid;
  25        bool dmode_set;
  26        bool fmode_set;
  27        umode_t dmode;
  28        umode_t fmode;
  29        umode_t dmask;
  30        umode_t fmask;
  31};
  32
  33struct vboxsf_fs_context {
  34        struct vboxsf_options o;
  35        char *nls_name;
  36};
  37
  38/* per-shared folder information */
  39struct vboxsf_sbi {
  40        struct vboxsf_options o;
  41        struct shfl_fsobjinfo root_info;
  42        struct idr ino_idr;
  43        spinlock_t ino_idr_lock; /* This protects ino_idr */
  44        struct nls_table *nls;
  45        u32 next_generation;
  46        u32 root;
  47        int bdi_id;
  48};
  49
  50/* per-inode information */
  51struct vboxsf_inode {
  52        /* some information was changed, update data on next revalidate */
  53        int force_restat;
  54        /* list of open handles for this inode + lock protecting it */
  55        struct list_head handle_list;
  56        /* This mutex protects handle_list accesses */
  57        struct mutex handle_list_mutex;
  58        /* The VFS inode struct */
  59        struct inode vfs_inode;
  60};
  61
  62struct vboxsf_dir_info {
  63        struct list_head info_list;
  64};
  65
  66struct vboxsf_dir_buf {
  67        size_t entries;
  68        size_t free;
  69        size_t used;
  70        void *buf;
  71        struct list_head head;
  72};
  73
  74/* globals */
  75extern const struct inode_operations vboxsf_dir_iops;
  76extern const struct inode_operations vboxsf_lnk_iops;
  77extern const struct inode_operations vboxsf_reg_iops;
  78extern const struct file_operations vboxsf_dir_fops;
  79extern const struct file_operations vboxsf_reg_fops;
  80extern const struct address_space_operations vboxsf_reg_aops;
  81extern const struct dentry_operations vboxsf_dentry_ops;
  82
  83/* from utils.c */
  84struct inode *vboxsf_new_inode(struct super_block *sb);
  85void vboxsf_init_inode(struct vboxsf_sbi *sbi, struct inode *inode,
  86                       const struct shfl_fsobjinfo *info);
  87int vboxsf_create_at_dentry(struct dentry *dentry,
  88                            struct shfl_createparms *params);
  89int vboxsf_stat(struct vboxsf_sbi *sbi, struct shfl_string *path,
  90                struct shfl_fsobjinfo *info);
  91int vboxsf_stat_dentry(struct dentry *dentry, struct shfl_fsobjinfo *info);
  92int vboxsf_inode_revalidate(struct dentry *dentry);
  93int vboxsf_getattr(const struct path *path, struct kstat *kstat,
  94                   u32 request_mask, unsigned int query_flags);
  95int vboxsf_setattr(struct dentry *dentry, struct iattr *iattr);
  96struct shfl_string *vboxsf_path_from_dentry(struct vboxsf_sbi *sbi,
  97                                            struct dentry *dentry);
  98int vboxsf_nlscpy(struct vboxsf_sbi *sbi, char *name, size_t name_bound_len,
  99                  const unsigned char *utf8_name, size_t utf8_len);
 100struct vboxsf_dir_info *vboxsf_dir_info_alloc(void);
 101void vboxsf_dir_info_free(struct vboxsf_dir_info *p);
 102int vboxsf_dir_read_all(struct vboxsf_sbi *sbi, struct vboxsf_dir_info *sf_d,
 103                        u64 handle);
 104
 105/* from vboxsf_wrappers.c */
 106int vboxsf_connect(void);
 107void vboxsf_disconnect(void);
 108
 109int vboxsf_create(u32 root, struct shfl_string *parsed_path,
 110                  struct shfl_createparms *create_parms);
 111
 112int vboxsf_close(u32 root, u64 handle);
 113int vboxsf_remove(u32 root, struct shfl_string *parsed_path, u32 flags);
 114int vboxsf_rename(u32 root, struct shfl_string *src_path,
 115                  struct shfl_string *dest_path, u32 flags);
 116
 117int vboxsf_read(u32 root, u64 handle, u64 offset, u32 *buf_len, u8 *buf);
 118int vboxsf_write(u32 root, u64 handle, u64 offset, u32 *buf_len, u8 *buf);
 119
 120int vboxsf_dirinfo(u32 root, u64 handle,
 121                   struct shfl_string *parsed_path, u32 flags, u32 index,
 122                   u32 *buf_len, struct shfl_dirinfo *buf, u32 *file_count);
 123int vboxsf_fsinfo(u32 root, u64 handle, u32 flags,
 124                  u32 *buf_len, void *buf);
 125
 126int vboxsf_map_folder(struct shfl_string *folder_name, u32 *root);
 127int vboxsf_unmap_folder(u32 root);
 128
 129int vboxsf_readlink(u32 root, struct shfl_string *parsed_path,
 130                    u32 buf_len, u8 *buf);
 131int vboxsf_symlink(u32 root, struct shfl_string *new_path,
 132                   struct shfl_string *old_path, struct shfl_fsobjinfo *buf);
 133
 134int vboxsf_set_utf8(void);
 135int vboxsf_set_symlinks(void);
 136
 137#endif
 138