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 /* the following variables must not be defined in fsal_internal.c */
00016 #ifndef FSAL_INTERNAL_C
00017 
00018 /* static filesystem info.
00019  * read access only.
00020  */
00021 extern fsal_staticfsinfo_t global_fs_info;
00022 
00023 /* filesystem operations */
00024 extern struct ganefuse_operations *p_fs_ops;
00025 
00026 /* filesystem opaque data */
00027 extern void *fs_user_data;
00028 extern void *fs_private_data;
00029 
00030 #endif
00031 
00032 struct ganefuse
00033 {
00034   /* unused for now */
00035   void *reserved;
00036 };
00037 
00041 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00042                                         fs_common_initinfo_t * fs_common_info);
00043 
00047 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00048 
00052 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00053 
00057 void TakeTokenFSCall();
00058 void ReleaseTokenFSCall();
00059 
00067 fsal_boolean_t fsal_do_log(fsal_status_t status);
00068 
00075 int fsal_set_thread_context(fsal_op_context_t * p_ctx);
00076 
00080 fsal_op_context_t *fsal_get_thread_context();
00081 
00082 /* used for generating inode numbers for FS which don't have some */
00083 static inline unsigned long hash_peer(ino_t parent_inode, char *name)
00084 {
00085   unsigned long hash;
00086   char *curr;
00087 
00088   hash = 1;
00089 
00090   for(curr = name; *curr != '\0'; curr++)
00091     hash = ((hash << 5) - hash + (unsigned long)(*curr));
00092 
00093   return (hash ^ (unsigned long)parent_inode);
00094 }
00095 
00096 /* All the call to FSAL to be wrapped */
00097 fsal_status_t FUSEFSAL_access(fsal_handle_t * p_object_handle,      /* IN */
00098                               fsal_op_context_t * p_context,        /* IN */
00099                               fsal_accessflags_t access_type,   /* IN */
00100                               fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00101 
00102 fsal_status_t FUSEFSAL_getattrs(fsal_handle_t * p_filehandle,       /* IN */
00103                                 fsal_op_context_t * p_context,      /* IN */
00104                                 fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00105 
00106 fsal_status_t FUSEFSAL_setattrs(fsal_handle_t * p_filehandle,       /* IN */
00107                                 fsal_op_context_t * p_context,      /* IN */
00108                                 fsal_attrib_list_t * p_attrib_set,      /* IN */
00109                                 fsal_attrib_list_t *
00110                                 p_object_attributes /* [ IN/OUT ] */ );
00111 
00112 fsal_status_t FUSEFSAL_BuildExportContext(fsal_export_context_t * p_export_context, /* OUT */
00113                                           fsal_path_t * p_export_path,  /* IN */
00114                                           char *fs_specific_options /* IN */ );
00115 
00116 fsal_status_t FUSEFSAL_InitClientContext(fsal_op_context_t * p_thr_context);
00117 
00118 fsal_status_t FUSEFSAL_GetClientContext(fsal_op_context_t * p_thr_context,  /* IN/OUT  */
00119                                         fsal_export_context_t * p_export_context,   /* IN */
00120                                         fsal_uid_t uid, /* IN */
00121                                         fsal_gid_t gid, /* IN */
00122                                         fsal_gid_t * alt_groups,        /* IN */
00123                                         fsal_count_t nb_alt_groups /* IN */ );
00124 
00125 fsal_status_t FUSEFSAL_create(fsal_handle_t * p_parent_directory_handle,    /* IN */
00126                               fsal_name_t * p_filename, /* IN */
00127                               fsal_op_context_t * p_context,        /* IN */
00128                               fsal_accessmode_t accessmode,     /* IN */
00129                               fsal_handle_t * p_object_handle,      /* OUT */
00130                               fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00131 
00132 fsal_status_t FUSEFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,     /* IN */
00133                              fsal_name_t * p_dirname,   /* IN */
00134                              fsal_op_context_t * p_context, /* IN */
00135                              fsal_accessmode_t accessmode,      /* IN */
00136                              fsal_handle_t * p_object_handle,       /* OUT */
00137                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00138 
00139 fsal_status_t FUSEFSAL_link(fsal_handle_t * p_target_handle,        /* IN */
00140                             fsal_handle_t * p_dir_handle,   /* IN */
00141                             fsal_name_t * p_link_name,  /* IN */
00142                             fsal_op_context_t * p_context,  /* IN */
00143                             fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00144 
00145 fsal_status_t FUSEFSAL_mknode(fsal_handle_t * parentdir_handle,     /* IN */
00146                               fsal_name_t * p_node_name,        /* IN */
00147                               fsal_op_context_t * p_context,        /* IN */
00148                               fsal_accessmode_t accessmode,     /* IN */
00149                               fsal_nodetype_t nodetype, /* IN */
00150                               fsal_dev_t * dev, /* IN */
00151                               fsal_handle_t * p_object_handle,      /* OUT (handle to the created node) */
00152                               fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00153 
00154 fsal_status_t FUSEFSAL_opendir(fsal_handle_t * p_dir_handle,        /* IN */
00155                                fsal_op_context_t * p_context,       /* IN */
00156                                fsal_dir_t * p_dir_descriptor,       /* OUT */
00157                                fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00158 
00159 fsal_status_t FUSEFSAL_readdir(fsal_dir_t * p_dir_descriptor,       /* IN */
00160                                fsal_cookie_t start_position,        /* IN */
00161                                fsal_attrib_mask_t get_attr_mask,        /* IN */
00162                                fsal_mdsize_t buffersize,        /* IN */
00163                                fsal_dirent_t * p_pdirent,       /* OUT */
00164                                fsal_cookie_t * p_end_position,      /* OUT */
00165                                fsal_count_t * p_nb_entries,     /* OUT */
00166                                fsal_boolean_t * p_end_of_dir /* OUT */ );
00167 
00168 fsal_status_t FUSEFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00169 
00170 fsal_status_t FUSEFSAL_open_by_name(fsal_handle_t * dirhandle,      /* IN */
00171                                     fsal_name_t * filename,     /* IN */
00172                                     fsal_op_context_t * p_context,  /* IN */
00173                                     fsal_openflags_t openflags, /* IN */
00174                                     fsal_file_t * file_descriptor,  /* OUT */
00175                                     fsal_attrib_list_t *
00176                                     file_attributes /* [ IN/OUT ] */ );
00177 
00178 fsal_status_t FUSEFSAL_open(fsal_handle_t * p_filehandle,   /* IN */
00179                             fsal_op_context_t * p_context,  /* IN */
00180                             fsal_openflags_t openflags, /* IN */
00181                             fsal_file_t * p_file_descriptor,        /* OUT */
00182                             fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00183 
00184 fsal_status_t FUSEFSAL_read(fsal_file_t * p_file_descriptor,        /* IN */
00185                             fsal_seek_t * p_seek_descriptor,    /* [IN] */
00186                             fsal_size_t buffer_size,    /* IN */
00187                             caddr_t buffer,     /* OUT */
00188                             fsal_size_t * p_read_amount,        /* OUT */
00189                             fsal_boolean_t * p_end_of_file /* OUT */ );
00190 
00191 fsal_status_t FUSEFSAL_write(fsal_file_t * p_file_descriptor,       /* IN */
00192                              fsal_op_context_t * p_context,         /* IN */
00193                              fsal_seek_t * p_seek_descriptor,   /* IN */
00194                              fsal_size_t buffer_size,   /* IN */
00195                              caddr_t buffer,    /* IN */
00196                              fsal_size_t * p_write_amount /* OUT */ );
00197 
00198 fsal_status_t FUSEFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00199 
00200 fsal_status_t FUSEFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle, /* IN */
00201                                       fsal_op_context_t * p_context,        /* IN */
00202                                       fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00203 
00204 fsal_status_t FUSEFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00205 
00206 fsal_status_t FUSEFSAL_test_access(fsal_op_context_t * p_context,   /* IN */
00207                                    fsal_accessflags_t access_type,      /* IN */
00208                                    fsal_attrib_list_t * p_object_attributes /* IN */ );
00209 
00210 fsal_status_t FUSEFSAL_lookup(fsal_handle_t * p_parent_directory_handle,    /* IN */
00211                               fsal_name_t * p_filename, /* IN */
00212                               fsal_op_context_t * p_context,        /* IN */
00213                               fsal_handle_t * p_object_handle,      /* OUT */
00214                               fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00215 
00216 fsal_status_t FUSEFSAL_lookupPath(fsal_path_t * p_path, /* IN */
00217                                   fsal_op_context_t * p_context,    /* IN */
00218                                   fsal_handle_t * object_handle,    /* OUT */
00219                                   fsal_attrib_list_t *
00220                                   p_object_attributes /* [ IN/OUT ] */ );
00221 
00222 fsal_status_t FUSEFSAL_lookupJunction(fsal_handle_t * p_junction_handle,    /* IN */
00223                                       fsal_op_context_t * p_context,        /* IN */
00224                                       fsal_handle_t * p_fsoot_handle,       /* OUT */
00225                                       fsal_attrib_list_t *
00226                                       p_fsroot_attributes /* [ IN/OUT ] */ );
00227 
00228 fsal_status_t FUSEFSAL_rcp(fsal_handle_t * filehandle,      /* IN */
00229                            fsal_op_context_t * p_context,   /* IN */
00230                            fsal_path_t * p_local_path,  /* IN */
00231                            fsal_rcpflag_t transfer_opt /* IN */ );
00232 
00233 fsal_status_t FUSEFSAL_rename(fsal_handle_t * p_old_parentdir_handle,       /* IN */
00234                               fsal_name_t * p_old_name, /* IN */
00235                               fsal_handle_t * p_new_parentdir_handle,       /* IN */
00236                               fsal_name_t * p_new_name, /* IN */
00237                               fsal_op_context_t * p_context,        /* IN */
00238                               fsal_attrib_list_t * p_src_dir_attributes,        /* [ IN/OUT ] */
00239                               fsal_attrib_list_t *
00240                               p_tgt_dir_attributes /* [ IN/OUT ] */ );
00241 
00242 void FUSEFSAL_get_stats(fsal_statistics_t * stats,      /* OUT */
00243                         fsal_boolean_t reset /* IN */ );
00244 
00245 fsal_status_t FUSEFSAL_readlink(fsal_handle_t * p_linkhandle,       /* IN */
00246                                 fsal_op_context_t * p_context,      /* IN */
00247                                 fsal_path_t * p_link_content,   /* OUT */
00248                                 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00249 
00250 fsal_status_t FUSEFSAL_symlink(fsal_handle_t * p_parent_directory_handle,   /* IN */
00251                                fsal_name_t * p_linkname,        /* IN */
00252                                fsal_path_t * p_linkcontent,     /* IN */
00253                                fsal_op_context_t * p_context,       /* IN */
00254                                fsal_accessmode_t accessmode,    /* IN (ignored) */
00255                                fsal_handle_t * p_link_handle,       /* OUT */
00256                                fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00257 
00258 int FUSEFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00259                        fsal_status_t * status);
00260 
00261 unsigned int FUSEFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00262                                           unsigned int cookie,
00263                                           unsigned int alphabet_len,
00264                                           unsigned int index_size);
00265 
00266 unsigned int FUSEFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle,
00267                                          unsigned int cookie);
00268 
00269 fsal_status_t FUSEFSAL_DigestHandle(fsal_export_context_t * exp_context,     /* IN */
00270                                     fsal_digesttype_t output_type,       /* IN */
00271                                     fsal_handle_t *in_fsal_handle, /* IN */
00272                                     struct fsal_handle_desc *fh_desc     /* IN/OUT */ ) ;
00273 
00274 fsal_status_t FUSEFSAL_ExpandHandle(fsal_export_context_t * pexpcontext,     /* IN not used */
00275                                    fsal_digesttype_t in_type,   /* IN */
00276                                    struct fsal_handle_desc *fh_desc  /* IN/OUT */ ) ;
00277 
00278 fsal_status_t FUSEFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter);
00279 
00280 fsal_status_t FUSEFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00281                                                             fsal_parameter_t *
00282                                                             out_parameter);
00283 
00284 fsal_status_t FUSEFSAL_truncate(fsal_handle_t * p_filehandle,       /* IN */
00285                                 fsal_op_context_t * p_context,      /* IN */
00286                                 fsal_size_t length,     /* IN */
00287                                 fsal_file_t * file_descriptor,      /* Unused in this FSAL */
00288                                 fsal_attrib_list_t *
00289                                 p_object_attributes /* [ IN/OUT ] */ );
00290 
00291 fsal_status_t FUSEFSAL_unlink(fsal_handle_t * p_parent_directory_handle,    /* IN */
00292                               fsal_name_t * p_object_name,      /* IN */
00293                               fsal_op_context_t * p_context,        /* IN */
00294                               fsal_attrib_list_t *
00295                               p_parent_directory_attributes /* [IN/OUT ] */ );
00296 
00297 char *FUSEFSAL_GetFSName();
00298 
00299 fsal_status_t FUSEFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,        /* IN */
00300                                      fsal_op_context_t * p_context, /* IN */
00301                                      unsigned int xattr_id,     /* IN */
00302                                      fsal_attrib_list_t * p_attrs);
00303 
00304 fsal_status_t FUSEFSAL_ListXAttrs(fsal_handle_t * p_objecthandle,   /* IN */
00305                                   unsigned int cookie,  /* IN */
00306                                   fsal_op_context_t * p_context,    /* IN */
00307                                   fsal_xattrent_t * xattrs_tab, /* IN/OUT */
00308                                   unsigned int xattrs_tabsize,  /* IN */
00309                                   unsigned int *p_nb_returned,  /* OUT */
00310                                   int *end_of_list /* OUT */ );
00311 
00312 fsal_status_t FUSEFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,    /* IN */
00313                                          unsigned int xattr_id, /* IN */
00314                                          fsal_op_context_t * p_context,     /* IN */
00315                                          caddr_t buffer_addr,   /* IN/OUT */
00316                                          size_t buffer_size,    /* IN */
00317                                          size_t * p_output_size /* OUT */ );
00318 
00319 fsal_status_t FUSEFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,     /* IN */
00320                                         const fsal_name_t * xattr_name, /* IN */
00321                                         fsal_op_context_t * p_context,      /* IN */
00322                                         unsigned int *pxattr_id /* OUT */ );
00323 
00324 fsal_status_t FUSEFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,  /* IN */
00325                                            const fsal_name_t * xattr_name,      /* IN */
00326                                            fsal_op_context_t * p_context,   /* IN */
00327                                            caddr_t buffer_addr, /* IN/OUT */
00328                                            size_t buffer_size,  /* IN */
00329                                            size_t * p_output_size /* OUT */ );
00330 
00331 fsal_status_t FUSEFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,        /* IN */
00332                                      const fsal_name_t * xattr_name,    /* IN */
00333                                      fsal_op_context_t * p_context, /* IN */
00334                                      caddr_t buffer_addr,       /* IN */
00335                                      size_t buffer_size,        /* IN */
00336                                      int create /* IN */ );
00337 
00338 fsal_status_t FUSEFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,    /* IN */
00339                                          unsigned int xattr_id, /* IN */
00340                                          fsal_op_context_t * p_context,     /* IN */
00341                                          caddr_t buffer_addr,   /* IN */
00342                                          size_t buffer_size /* IN */ );
00343 
00344 fsal_status_t FUSEFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,      /* IN */
00345                                        fsal_op_context_t * p_context,       /* IN */
00346                                        unsigned int xattr_id) /* IN */ ;
00347 
00348 fsal_status_t FUSEFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,    /* IN */
00349                                          fsal_op_context_t * p_context,     /* IN */
00350                                          const fsal_name_t * xattr_name) /* IN */ ;
00351 
00352 int FUSEFSAL_GetXattrOffsetSetable( void ) ;
00353 
00354 unsigned int FUSEFSAL_GetFileno(fsal_file_t * pfile);
00355 
00356 fsal_status_t FUSEFSAL_commit( fsal_file_t * p_file_descriptor,
00357                              fsal_off_t    offset,
00358                              fsal_size_t   size ) ;
00359