nfs-ganesha 1.4

fsal_internal.h

Go to the documentation of this file.
00001 
00012 #include  "fsal.h"
00013 #include "FSAL/common_functions.h"
00014 
00015 #include <libzfswrap.h>
00016 
00017 /* libzfswrap handler, used only when the FSAL is created and destroyed */
00018 extern libzfswrap_handle_t *p_zhd;
00019 
00020 typedef struct
00021 {
00022   char *psz_name;
00023   libzfswrap_vfs_t *p_vfs;
00024   unsigned int index;
00025 } snapshot_t;
00026 
00027 /* defined the set of attributes supported with POSIX */
00028 #define POSIX_SUPPORTED_ATTRIBUTES (                                       \
00029           FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE     | FSAL_ATTR_SIZE      | \
00030           FSAL_ATTR_FSID     |  FSAL_ATTR_FILEID  | \
00031           FSAL_ATTR_MODE     | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER     | \
00032           FSAL_ATTR_GROUP    | FSAL_ATTR_ATIME    | FSAL_ATTR_RAWDEV    | \
00033           FSAL_ATTR_CTIME    | FSAL_ATTR_MTIME    | FSAL_ATTR_SPACEUSED | \
00034           FSAL_ATTR_CHGTIME  )
00035 
00036 
00037 /* the following variables must not be defined in fsal_internal.c */
00038 #ifndef FSAL_INTERNAL_C
00039 
00040 /* static filesystem info.
00041  * read access only.
00042  */
00043 extern fsal_staticfsinfo_t global_fs_info;
00044 
00045 #endif
00046 
00050 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00051                                         fs_common_initinfo_t * fs_common_info,
00052                                         fs_specific_initinfo_t * fs_specific_info);
00053 
00057 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00058 
00062 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00063 
00067 void TakeTokenFSCall();
00068 void ReleaseTokenFSCall();
00069 
00070 /* All the call to FSAL to be wrapped */
00071 fsal_status_t ZFSFSAL_access(fsal_handle_t * p_object_handle,        /* IN */
00072                              fsal_op_context_t * p_context,  /* IN */
00073                              fsal_accessflags_t access_type,    /* IN */
00074                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00075 
00076 fsal_status_t ZFSFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */
00077                                fsal_op_context_t * p_context,        /* IN */
00078                                fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00079 
00080 fsal_status_t ZFSFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */
00081                                fsal_op_context_t * p_context,        /* IN */
00082                                fsal_attrib_list_t * p_attrib_set,       /* IN */
00083                                fsal_attrib_list_t *
00084                                p_object_attributes /* [ IN/OUT ] */ );
00085 
00086 fsal_status_t ZFSFSAL_BuildExportContext(fsal_export_context_t * p_export_context,   /* OUT */
00087                                          fsal_path_t * p_export_path,   /* IN */
00088                                          char *fs_specific_options /* IN */ );
00089 
00090 fsal_status_t ZFSFSAL_create(fsal_handle_t * p_parent_directory_handle,      /* IN */
00091                              fsal_name_t * p_filename,  /* IN */
00092                              fsal_op_context_t * p_context,  /* IN */
00093                              fsal_accessmode_t accessmode,      /* IN */
00094                              fsal_handle_t * p_object_handle,        /* OUT */
00095                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00096 
00097 fsal_status_t ZFSFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,       /* IN */
00098                             fsal_name_t * p_dirname,    /* IN */
00099                             fsal_op_context_t * p_context,   /* IN */
00100                             fsal_accessmode_t accessmode,       /* IN */
00101                             fsal_handle_t * p_object_handle, /* OUT */
00102                             fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00103 
00104 fsal_status_t ZFSFSAL_link(fsal_handle_t * p_target_handle,  /* IN */
00105                            fsal_handle_t * p_dir_handle,     /* IN */
00106                            fsal_name_t * p_link_name,   /* IN */
00107                            fsal_op_context_t * p_context,    /* IN */
00108                            fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00109 
00110 fsal_status_t ZFSFSAL_mknode(fsal_handle_t * parentdir_handle,       /* IN */
00111                              fsal_name_t * p_node_name, /* IN */
00112                              fsal_op_context_t * p_context,  /* IN */
00113                              fsal_accessmode_t accessmode,      /* IN */
00114                              fsal_nodetype_t nodetype,  /* IN */
00115                              fsal_dev_t * dev,  /* IN */
00116                              fsal_handle_t * p_object_handle,        /* OUT (handle to the created node) */
00117                              fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00118 
00119 fsal_status_t ZFSFSAL_opendir(fsal_handle_t * p_dir_handle,  /* IN */
00120                               fsal_op_context_t * p_context, /* IN */
00121                               fsal_dir_t * p_dir_descriptor, /* OUT */
00122                               fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00123 
00124 fsal_status_t ZFSFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */
00125                               fsal_cookie_t start_position,  /* IN */
00126                               fsal_attrib_mask_t get_attr_mask, /* IN */
00127                               fsal_mdsize_t buffersize, /* IN */
00128                               fsal_dirent_t * p_pdirent,        /* OUT */
00129                               fsal_cookie_t * p_end_position,        /* OUT */
00130                               fsal_count_t * p_nb_entries,      /* OUT */
00131                               fsal_boolean_t * p_end_of_dir /* OUT */ );
00132 
00133 fsal_status_t ZFSFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00134 
00135 fsal_status_t ZFSFSAL_open_by_name(fsal_handle_t * dirhandle,        /* IN */
00136                                    fsal_name_t * filename,      /* IN */
00137                                    fsal_op_context_t * p_context,    /* IN */
00138                                    fsal_openflags_t openflags,  /* IN */
00139                                    fsal_file_t * file_descriptor,    /* OUT */
00140                                    fsal_attrib_list_t *
00141                                    file_attributes /* [ IN/OUT ] */ );
00142 
00143 fsal_status_t ZFSFSAL_open(fsal_handle_t * p_filehandle,     /* IN */
00144                            fsal_op_context_t * p_context,    /* IN */
00145                            fsal_openflags_t openflags,  /* IN */
00146                            fsal_file_t * p_file_descriptor,  /* OUT */
00147                            fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00148 
00149 fsal_status_t ZFSFSAL_read(fsal_file_t * p_file_descriptor,  /* IN */
00150                            fsal_seek_t * p_seek_descriptor,     /* [IN] */
00151                            fsal_size_t buffer_size,     /* IN */
00152                            caddr_t buffer,      /* OUT */
00153                            fsal_size_t * p_read_amount, /* OUT */
00154                            fsal_boolean_t * p_end_of_file /* OUT */ );
00155 
00156 fsal_status_t ZFSFSAL_write(fsal_file_t * p_file_descriptor, /* IN */
00157                             fsal_op_context_t * p_context,   /* IN */
00158                             fsal_seek_t * p_seek_descriptor,    /* IN */
00159                             fsal_size_t buffer_size,    /* IN */
00160                             caddr_t buffer,     /* IN */
00161                             fsal_size_t * p_write_amount /* OUT */ );
00162 
00163 fsal_status_t ZFSFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00164 
00165 fsal_status_t ZFSFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,   /* IN */
00166                                      fsal_op_context_t * p_context,  /* IN */
00167                                      fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00168 
00169 fsal_status_t ZFSFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00170 
00171 fsal_status_t ZFSFSAL_terminate();
00172 
00173 fsal_status_t ZFSFSAL_test_access(fsal_op_context_t * p_context,     /* IN */
00174                                   fsal_accessflags_t access_type,       /* IN */
00175                                   fsal_attrib_list_t * p_object_attributes /* IN */ );
00176 
00177 fsal_status_t ZFSFSAL_lookup(fsal_handle_t * p_parent_directory_handle,      /* IN */
00178                              fsal_name_t * p_filename,  /* IN */
00179                              fsal_op_context_t * p_context,  /* IN */
00180                              fsal_handle_t * p_object_handle,        /* OUT */
00181                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00182 
00183 fsal_status_t ZFSFSAL_lookupPath(fsal_path_t * p_path,  /* IN */
00184                                  fsal_op_context_t * p_context,      /* IN */
00185                                  fsal_handle_t * object_handle,      /* OUT */
00186                                  fsal_attrib_list_t *
00187                                  p_object_attributes /* [ IN/OUT ] */ );
00188 
00189 fsal_status_t ZFSFSAL_lookupJunction(fsal_handle_t * p_junction_handle,      /* IN */
00190                                      fsal_op_context_t * p_context,  /* IN */
00191                                      fsal_handle_t * p_fsoot_handle, /* OUT */
00192                                      fsal_attrib_list_t *
00193                                      p_fsroot_attributes /* [ IN/OUT ] */ );
00194 
00195 fsal_status_t ZFSFSAL_rcp(fsal_handle_t * filehandle,        /* IN */
00196                           fsal_op_context_t * p_context,     /* IN */
00197                           fsal_path_t * p_local_path,   /* IN */
00198                           fsal_rcpflag_t transfer_opt /* IN */ );
00199 
00200 fsal_status_t ZFSFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */
00201                              fsal_name_t * p_old_name,  /* IN */
00202                              fsal_handle_t * p_new_parentdir_handle, /* IN */
00203                              fsal_name_t * p_new_name,  /* IN */
00204                              fsal_op_context_t * p_context,  /* IN */
00205                              fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */
00206                              fsal_attrib_list_t * p_tgt_dir_attributes /* [ IN/OUT ] */ );
00207 
00208 void ZFSFSAL_get_stats(fsal_statistics_t * stats,       /* OUT */
00209                        fsal_boolean_t reset /* IN */ );
00210 
00211 fsal_status_t ZFSFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */
00212                                fsal_op_context_t * p_context,        /* IN */
00213                                fsal_path_t * p_link_content,    /* OUT */
00214                                fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00215 
00216 fsal_status_t ZFSFSAL_symlink(fsal_handle_t * p_parent_directory_handle,     /* IN */
00217                               fsal_name_t * p_linkname, /* IN */
00218                               fsal_path_t * p_linkcontent,      /* IN */
00219                               fsal_op_context_t * p_context, /* IN */
00220                               fsal_accessmode_t accessmode,     /* IN (ignored) */
00221                               fsal_handle_t * p_link_handle, /* OUT */
00222                               fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00223 
00224 int ZFSFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00225                       fsal_status_t * status);
00226 
00227 unsigned int ZFSFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00228                                          unsigned int cookie,
00229                                          unsigned int alphabet_len,
00230                                          unsigned int index_size);
00231 
00232 unsigned int ZFSFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, unsigned int cookie);
00233 
00234 fsal_status_t ZFSFSAL_DigestHandle(fsal_export_context_t * exp_context,     /* IN */
00235                                    fsal_digesttype_t output_type,       /* IN */
00236                                    fsal_handle_t *in_fsal_handle, /* IN */
00237                                    struct fsal_handle_desc *fh_desc     /* IN/OUT */ ) ;
00238 
00239 fsal_status_t ZFSFSAL_ExpandHandle(fsal_export_context_t * p_expcontext,     /* IN not used */
00240                                    fsal_digesttype_t in_type,   /* IN */
00241                                    struct fsal_handle_desc *fh_desc  /* IN/OUT */ ) ;
00242 
00243 fsal_status_t ZFSFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter);
00244 
00245 fsal_status_t ZFSFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00246                                                            fsal_parameter_t *
00247                                                            out_parameter);
00248 
00249 fsal_status_t ZFSFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */
00250                                fsal_op_context_t * p_context,        /* IN */
00251                                fsal_size_t length,      /* IN */
00252                                fsal_file_t * file_descriptor,        /* Unused in this FSAL */
00253                                fsal_attrib_list_t *
00254                                p_object_attributes /* [ IN/OUT ] */ );
00255 
00256 fsal_status_t ZFSFSAL_unlink(fsal_handle_t * p_parent_directory_handle,      /* IN */
00257                              fsal_name_t * p_object_name,       /* IN */
00258                              fsal_op_context_t * p_context,  /* IN */
00259                              fsal_attrib_list_t *
00260                              p_parent_directory_attributes /* [IN/OUT ] */ );
00261 
00262 char *ZFSFSAL_GetFSName();
00263 
00264 fsal_status_t ZFSFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,  /* IN */
00265                                     fsal_op_context_t * p_context,   /* IN */
00266                                     unsigned int xattr_id,      /* IN */
00267                                     fsal_attrib_list_t * p_attrs);
00268 
00269 fsal_status_t ZFSFSAL_ListXAttrs(fsal_handle_t * p_objecthandle,     /* IN */
00270                                  unsigned int cookie,   /* IN */
00271                                  fsal_op_context_t * p_context,      /* IN */
00272                                  fsal_xattrent_t * xattrs_tab,  /* IN/OUT */
00273                                  unsigned int xattrs_tabsize,   /* IN */
00274                                  unsigned int *p_nb_returned,   /* OUT */
00275                                  int *end_of_list /* OUT */ );
00276 
00277 fsal_status_t ZFSFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00278                                         unsigned int xattr_id,  /* IN */
00279                                         fsal_op_context_t * p_context,       /* IN */
00280                                         caddr_t buffer_addr,    /* IN/OUT */
00281                                         size_t buffer_size,     /* IN */
00282                                         size_t * p_output_size /* OUT */ );
00283 
00284 fsal_status_t ZFSFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,       /* IN */
00285                                        const fsal_name_t * xattr_name,  /* IN */
00286                                        fsal_op_context_t * p_context,        /* IN */
00287                                        unsigned int *pxattr_id /* OUT */ );
00288 
00289 fsal_status_t ZFSFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,    /* IN */
00290                                           const fsal_name_t * xattr_name,       /* IN */
00291                                           fsal_op_context_t * p_context,     /* IN */
00292                                           caddr_t buffer_addr,  /* IN/OUT */
00293                                           size_t buffer_size,   /* IN */
00294                                           size_t * p_output_size /* OUT */ );
00295 
00296 fsal_status_t ZFSFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,  /* IN */
00297                                     const fsal_name_t * xattr_name,     /* IN */
00298                                     fsal_op_context_t * p_context,   /* IN */
00299                                     caddr_t buffer_addr,        /* IN */
00300                                     size_t buffer_size, /* IN */
00301                                     int create /* IN */ );
00302 
00303 fsal_status_t ZFSFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00304                                         unsigned int xattr_id,  /* IN */
00305                                         fsal_op_context_t * p_context,       /* IN */
00306                                         caddr_t buffer_addr,    /* IN */
00307                                         size_t buffer_size /* IN */ );
00308 
00309 fsal_status_t ZFSFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,        /* IN */
00310                                       fsal_op_context_t * p_context, /* IN */
00311                                       unsigned int xattr_id) /* IN */ ;
00312 
00313 fsal_status_t ZFSFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,      /* IN */
00314                                         fsal_op_context_t * p_context,       /* IN */
00315                                         const fsal_name_t * xattr_name) /* IN */ ;
00316 
00317 int ZFSFSAL_GetXattrOffsetSetable( void ) ;
00318 
00319 unsigned int ZFSFSAL_GetFileno(fsal_file_t * pfile);
00320 
00321 fsal_status_t ZFSFSAL_getextattrs(fsal_handle_t * p_filehandle, /* IN */
00322                                   fsal_op_context_t * p_context,        /* IN */
00323                                   fsal_extattrib_list_t * p_object_attributes /* OUT */) ;
00324 
00325 fsal_status_t ZFSFSAL_commit( fsal_file_t * p_file_descriptor,
00326                             fsal_off_t    offset,
00327                             fsal_size_t   size ) ;
00328 
00329