Print this page
Update from fsd_sep3 webrev to fsd_sep9


  11 
  12 /*
  13  * Copyright 2013 Damian Bogel.  All rights reserved.
  14  */
  15 
  16 #ifndef _FSH_H
  17 #define _FSH_H
  18 
  19 #include <sys/id_space.h>
  20 #include <sys/types.h>
  21 #include <sys/vfs.h>
  22 #include <sys/vnode.h>
  23 
  24 #ifdef __cplusplus
  25 extern "C" {
  26 #endif
  27 
  28 typedef id_t fsh_handle_t;
  29 typedef id_t fsh_callback_handle_t;
  30 
  31 struct fsh_int;
  32 typedef struct fsh_int fsh_int_t;
  33 
  34 typedef struct fsh {
  35         void *arg;
  36         void (*remove_cb)(void *, fsh_handle_t);
  37 
  38         /* vnode */
  39         int (*read)(fsh_int_t *, void *, vnode_t *, uio_t *, int, cred_t *,


  40                 caller_context_t *);
  41         int (*write)(fsh_int_t *, void *, vnode_t *, uio_t *, int, cred_t *,
  42                 caller_context_t *);


  43 
  44         /* vfs */
  45         int (*mount)(fsh_int_t *, void *, vfs_t *, vnode_t *, struct mounta *,
  46                 cred_t *);
  47         int (*unmount)(fsh_int_t *, void *, vfs_t *, int, cred_t *);



  48 } fsh_t;
  49 
  50 typedef struct fsh_callback {
  51         void    *fshc_arg;
  52         void    (*fshc_free)(vfs_t *, void *);
  53         void    (*fshc_mount)(vfs_t *, void *);
  54 } fsh_callback_t;
  55 
  56 /* API */
  57 extern fsh_handle_t fsh_hook_install(vfs_t *, fsh_t *);
  58 extern int fsh_hook_remove(fsh_handle_t);
  59 
  60 extern fsh_callback_handle_t fsh_callback_install(fsh_callback_t *);
  61 extern int fsh_callback_remove(fsh_callback_handle_t);
  62 
  63 extern void fsh_fs_enable(vfs_t *);
  64 extern void fsh_fs_disable(vfs_t *);
  65 
  66 /* fsh control passing */
  67 extern int fsh_next_read(fsh_int_t *, vnode_t *, uio_t *, int, cred_t *,
  68                 caller_context_t *);
  69 extern int fsh_next_write(fsh_int_t *, vnode_t *, uio_t *, int, cred_t *,
  70                 caller_context_t *);
  71 
  72 extern int fsh_next_mount(fsh_int_t *, vfs_t *, vnode_t *, struct mounta *uap,
  73                 cred_t *);
  74 extern int fsh_next_unmount(fsh_int_t *, vfs_t *, int, cred_t *);
  75 
  76 #ifdef __cplusplus
  77 }
  78 #endif
  79 
  80 #endif /* _FSH_H */


  11 
  12 /*
  13  * Copyright 2013 Damian Bogel.  All rights reserved.
  14  */
  15 
  16 #ifndef _FSH_H
  17 #define _FSH_H
  18 
  19 #include <sys/id_space.h>
  20 #include <sys/types.h>
  21 #include <sys/vfs.h>
  22 #include <sys/vnode.h>
  23 
  24 #ifdef __cplusplus
  25 extern "C" {
  26 #endif
  27 
  28 typedef id_t fsh_handle_t;
  29 typedef id_t fsh_callback_handle_t;
  30 



  31 typedef struct fsh {
  32         void *arg;
  33         void (*remove_cb)(void *, fsh_handle_t);
  34 
  35         /* vnode */
  36         void (*pre_read)(void *, void **, vnode_t **, uio_t **, int *,
  37                 cred_t **, caller_context_t **);
  38         int (*post_read)(int, void *, void *, vnode_t *, uio_t *, int, cred_t *,
  39                 caller_context_t *);
  40         void (*pre_write)(void *, void **, vnode_t **, uio_t **, int *,
  41                 cred_t **, caller_context_t **);
  42         int (*post_write)(int, void *, void *, vnode_t *, uio_t *, int,
  43                 cred_t *, caller_context_t *);
  44 
  45         /* vfs */
  46         void (*pre_mount)(void *, void **, vfs_t **, vnode_t **,
  47                 struct mounta **, cred_t **);
  48         int (*post_mount)(int, void *, void *, vfs_t *, vnode_t *,
  49                 struct mounta *, cred_t *);
  50         void (*pre_unmount)(void *, void **, vfs_t **, int *, cred_t **);
  51         int (*post_unmount)(int, void *, void *, vfs_t *, int, cred_t *);
  52 } fsh_t;
  53 
  54 typedef struct fsh_callback {
  55         void    *fshc_arg;
  56         void    (*fshc_free)(vfs_t *, void *);
  57         void    (*fshc_mount)(vfs_t *, void *);
  58 } fsh_callback_t;
  59 
  60 /* API */
  61 extern fsh_handle_t fsh_hook_install(vfs_t *, fsh_t *);
  62 extern int fsh_hook_remove(fsh_handle_t);
  63 
  64 extern fsh_callback_handle_t fsh_callback_install(fsh_callback_t *);
  65 extern int fsh_callback_remove(fsh_callback_handle_t);
  66 
  67 extern void fsh_fs_enable(vfs_t *);
  68 extern void fsh_fs_disable(vfs_t *);
  69 










  70 #ifdef __cplusplus
  71 }
  72 #endif
  73 
  74 #endif /* _FSH_H */