nfs-ganesha 1.4

fsal_internal.h

Go to the documentation of this file.
00001 
00012 #include  "fsal.h"
00013 #include <sys/stat.h>
00014 #include "FSAL/common_functions.h"
00015 
00016 /* defined the set of attributes supported with POSIX */
00017 #define POSIX_SUPPORTED_ATTRIBUTES (                                       \
00018           FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE     | FSAL_ATTR_SIZE      | \
00019           FSAL_ATTR_FSID     | FSAL_ATTR_ACL      | FSAL_ATTR_FILEID    | \
00020           FSAL_ATTR_MODE     | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER     | \
00021           FSAL_ATTR_GROUP    | FSAL_ATTR_ATIME    | FSAL_ATTR_RAWDEV    | \
00022           FSAL_ATTR_CTIME    | FSAL_ATTR_MTIME    | FSAL_ATTR_SPACEUSED | \
00023           FSAL_ATTR_CHGTIME  )
00024 
00025 /* the following variables must not be defined in fsal_internal.c */
00026 #ifndef FSAL_INTERNAL_C
00027 
00028 /* static filesystem info.
00029  * read access only.
00030  */
00031 extern fsal_staticfsinfo_t global_fs_info;
00032 extern fsal_posixdb_conn_params_t global_posixdb_params;
00033 
00034 #endif
00035 
00039 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00040                                         fs_common_initinfo_t * fs_common_info,
00041                                         posixfs_specific_initinfo_t * fs_specific_info);
00042 
00046 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00047 
00051 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00052 
00056 void TakeTokenFSCall();
00057 void ReleaseTokenFSCall();
00058 
00059 fsal_status_t fsal_internal_posix2posixdb_fileinfo(struct stat *buffstat,
00060                                                    fsal_posixdb_fileinfo_t * info);
00061 
00065 fsal_status_t fsal_internal_posixdb_checkConsistency(fsal_posixdb_fileinfo_t * p_info_fs,
00066                                                      fsal_posixdb_fileinfo_t * p_info_db,
00067                                                      int *p_result);
00068 
00072 fsal_status_t fsal_internal_posixdb_add_entry(fsal_posixdb_conn * p_conn,
00073                                               fsal_name_t * p_filename,
00074                                               fsal_posixdb_fileinfo_t * p_info,
00075                                               posixfsal_handle_t * p_dir_handle,
00076                                               posixfsal_handle_t * p_new_handle);
00077 
00081 fsal_status_t fsal_internal_appendFSALNameToFSALPath(fsal_path_t * p_path,
00082                                                      fsal_name_t * p_name);
00083 
00088 fsal_status_t fsal_internal_getPathFromHandle(posixfsal_op_context_t * p_context,    /* IN */
00089                                               posixfsal_handle_t * p_handle, /* IN */
00090                                               int is_dir,       /* IN */
00091                                               fsal_path_t * p_fsalpath, /* OUT */
00092                                               struct stat *p_buffstat /* OUT */ );
00093 
00111 fsal_status_t fsal_internal_getInfoFromName(posixfsal_op_context_t * p_context,      /* IN */
00112                                             posixfsal_handle_t * p_parent_dir_handle,        /* IN */
00113                                             fsal_name_t * p_fsalname,   /* IN */
00114                                             fsal_posixdb_fileinfo_t * p_infofs, /* IN */
00115                                             posixfsal_handle_t * p_object_handle);   /* OUT */
00116 
00117 fsal_status_t fsal_internal_getInfoFromChildrenList(posixfsal_op_context_t * p_context,      /* IN */
00118                                                     posixfsal_handle_t * p_parent_dir_handle,        /* IN */
00119                                                     fsal_name_t * p_fsalname,   /* IN */
00120                                                     fsal_posixdb_fileinfo_t * p_infofs, /* IN */
00121                                                     fsal_posixdb_child * p_children,    /* IN */
00122                                                     unsigned int children_count,        /* IN */
00123                                                     posixfsal_handle_t * p_object_handle);   /* OUT */
00124 
00129 fsal_status_t fsal_internal_testAccess(posixfsal_op_context_t * p_context,   /* IN */
00130                                        fsal_accessflags_t access_type,  /* IN */
00131                                        struct stat *p_buffstat, /* IN */
00132                                        fsal_attrib_list_t *
00133                                        p_object_attributes /* IN */ );
00134 
00135 int fsal_internal_path2fsname(char *rpath, char *fs_spec);
00136 
00137 /* All the call to FSAL to be wrapped */
00138 fsal_status_t POSIXFSAL_access(fsal_handle_t * object_handle,    /* IN */
00139                                fsal_op_context_t * context,      /* IN */
00140                                fsal_accessflags_t access_type,  /* IN */
00141                                fsal_attrib_list_t *
00142                                p_object_attributes /* [ IN/OUT ] */ );
00143 
00144 fsal_status_t POSIXFSAL_getattrs(fsal_handle_t * filehandle,     /* IN */
00145                                  fsal_op_context_t * context,    /* IN */
00146                                  fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00147 
00148 fsal_status_t POSIXFSAL_setattrs(fsal_handle_t * filehandle,     /* IN */
00149                                  fsal_op_context_t * context,    /* IN */
00150                                  fsal_attrib_list_t * p_attrib_set,     /* IN */
00151                                  fsal_attrib_list_t *
00152                                  p_object_attributes /* [ IN/OUT ] */ );
00153 
00154 fsal_status_t POSIXFSAL_BuildExportContext(fsal_export_context_t * p_export_context,       /* OUT */
00155                                            fsal_path_t * p_export_path, /* IN */
00156                                            char *fs_specific_options /* IN */ );
00157 
00158 fsal_status_t POSIXFSAL_InitClientContext(fsal_op_context_t * p_thr_context);
00159 
00160 fsal_status_t POSIXFSAL_create(fsal_handle_t * parent_directory_handle,  /* IN */
00161                                fsal_name_t * p_filename,        /* IN */
00162                                fsal_op_context_t * context,      /* IN */
00163                                fsal_accessmode_t accessmode,    /* IN */
00164                                fsal_handle_t * object_handle,    /* OUT */
00165                                fsal_attrib_list_t *
00166                                p_object_attributes /* [ IN/OUT ] */ );
00167 
00168 fsal_status_t POSIXFSAL_mkdir(fsal_handle_t * parent_directory_handle,   /* IN */
00169                               fsal_name_t * p_dirname,  /* IN */
00170                               fsal_op_context_t * context,       /* IN */
00171                               fsal_accessmode_t accessmode,     /* IN */
00172                               fsal_handle_t * object_handle,     /* OUT */
00173                               fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00174 
00175 fsal_status_t POSIXFSAL_link(fsal_handle_t * target_handle,      /* IN */
00176                              fsal_handle_t * dir_handle, /* IN */
00177                              fsal_name_t * p_link_name, /* IN */
00178                              fsal_op_context_t * context,        /* IN */
00179                              fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00180 
00181 fsal_status_t POSIXFSAL_mknode(fsal_handle_t * parentdir_handle,   /* IN */
00182                                fsal_name_t * p_node_name,       /* IN */
00183                                fsal_op_context_t * context,      /* IN */
00184                                fsal_accessmode_t accessmode,    /* IN */
00185                                fsal_nodetype_t nodetype,        /* IN */
00186                                fsal_dev_t * dev,        /* IN */
00187                                fsal_handle_t * object_handle,    /* OUT (handle to the created node) */
00188                                fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00189 
00190 fsal_status_t POSIXFSAL_opendir(fsal_handle_t * dir_handle,      /* IN */
00191                                 fsal_op_context_t * context,     /* IN */
00192                                 fsal_dir_t * dir_descriptor,     /* OUT */
00193                                 fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00194 
00195 fsal_status_t POSIXFSAL_readdir(fsal_dir_t * dir_descriptor,     /* IN */
00196                                 fsal_cookie_t start_pos,      /* IN */
00197                                 fsal_attrib_mask_t get_attr_mask,       /* IN */
00198                                 fsal_mdsize_t buffersize,       /* IN */
00199                                 fsal_dirent_t * p_pdirent,      /* OUT */
00200                                 fsal_cookie_t * end_position,    /* OUT */
00201                                 fsal_count_t * p_nb_entries,    /* OUT */
00202                                 fsal_boolean_t * p_end_of_dir /* OUT */ );
00203 
00204 fsal_status_t POSIXFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00205 
00206 fsal_status_t POSIXFSAL_open_by_name(fsal_handle_t * dirhandle,    /* IN */
00207                                      fsal_name_t * filename,    /* IN */
00208                                      fsal_op_context_t * p_context,        /* IN */
00209                                      fsal_openflags_t openflags,        /* IN */
00210                                      fsal_file_t * file_descriptor,        /* OUT */
00211                                      fsal_attrib_list_t *
00212                                      file_attributes /* [ IN/OUT ] */ );
00213 
00214 fsal_status_t POSIXFSAL_open(fsal_handle_t * p_filehandle, /* IN */
00215                              fsal_op_context_t * p_context,        /* IN */
00216                              fsal_openflags_t openflags,        /* IN */
00217                              fsal_file_t * p_file_descriptor,      /* OUT */
00218                              fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00219 
00220 fsal_status_t POSIXFSAL_read(fsal_file_t * p_file_descriptor,      /* IN */
00221                              fsal_seek_t * p_seek_descriptor,   /* [IN] */
00222                              fsal_size_t buffer_size,   /* IN */
00223                              caddr_t buffer,    /* OUT */
00224                              fsal_size_t * p_read_amount,       /* OUT */
00225                              fsal_boolean_t * p_end_of_file /* OUT */ );
00226 
00227 fsal_status_t POSIXFSAL_write(fsal_file_t * p_file_descriptor,     /* IN */
00228                               fsal_op_context_t * p_context,       /* IN */
00229                               fsal_seek_t * p_seek_descriptor,  /* IN */
00230                               fsal_size_t buffer_size,  /* IN */
00231                               caddr_t buffer,   /* IN */
00232                               fsal_size_t * p_write_amount /* OUT */ );
00233 
00234 fsal_status_t POSIXFSAL_commit( fsal_file_t * p_file_descriptor,
00235                               fsal_off_t    offset,
00236                               fsal_size_t   size ) ;
00237 
00238 fsal_status_t POSIXFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00239 
00240 fsal_status_t POSIXFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,       /* IN */
00241                                        fsal_op_context_t * p_context,      /* IN */
00242                                        fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00243 
00244 fsal_status_t POSIXFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00245 
00246 fsal_status_t POSIXFSAL_test_access(fsal_op_context_t * p_context, /* IN */
00247                                     fsal_accessflags_t access_type,     /* IN */
00248                                     fsal_attrib_list_t * p_object_attributes /* IN */ );
00249 
00250 fsal_status_t POSIXFSAL_setattr_access(fsal_op_context_t * p_context,      /* IN */
00251                                        fsal_attrib_list_t * candidate_attributes,       /* IN */
00252                                        fsal_attrib_list_t * object_attributes /* IN */ );
00253 
00254 fsal_status_t POSIXFSAL_rename_access(fsal_op_context_t * pcontext,        /* IN */
00255                                       fsal_attrib_list_t * pattrsrc,    /* IN */
00256                                       fsal_attrib_list_t * pattrdest) /* IN */ ;
00257 
00258 fsal_status_t POSIXFSAL_create_access(fsal_op_context_t * pcontext,        /* IN */
00259                                       fsal_attrib_list_t * pattr) /* IN */ ;
00260 
00261 fsal_status_t POSIXFSAL_unlink_access(fsal_op_context_t * pcontext,        /* IN */
00262                                       fsal_attrib_list_t * pattr) /* IN */ ;
00263 
00264 fsal_status_t POSIXFSAL_link_access(fsal_op_context_t * pcontext,  /* IN */
00265                                     fsal_attrib_list_t * pattr) /* IN */ ;
00266 
00267 fsal_status_t POSIXFSAL_merge_attrs(fsal_attrib_list_t * pinit_attr,
00268                                     fsal_attrib_list_t * pnew_attr,
00269                                     fsal_attrib_list_t * presult_attr);
00270 
00271 fsal_status_t POSIXFSAL_lookup(fsal_handle_t * p_parent_directory_handle,  /* IN */
00272                                fsal_name_t * p_filename,        /* IN */
00273                                fsal_op_context_t * p_context,      /* IN */
00274                                fsal_handle_t * p_object_handle,    /* OUT */
00275                                fsal_attrib_list_t *
00276                                p_object_attributes /* [ IN/OUT ] */ );
00277 
00278 fsal_status_t POSIXFSAL_lookupPath(fsal_path_t * p_path,        /* IN */
00279                                    fsal_op_context_t * p_context,  /* IN */
00280                                    fsal_handle_t * object_handle,  /* OUT */
00281                                    fsal_attrib_list_t *
00282                                    p_object_attributes /* [ IN/OUT ] */ );
00283 
00284 fsal_status_t POSIXFSAL_lookupJunction(fsal_handle_t * p_junction_handle,  /* IN */
00285                                        fsal_op_context_t * p_context,      /* IN */
00286                                        fsal_handle_t * p_fsoot_handle,     /* OUT */
00287                                        fsal_attrib_list_t *
00288                                        p_fsroot_attributes /* [ IN/OUT ] */ );
00289 
00290 fsal_status_t POSIXFSAL_set_quota(fsal_path_t * pfsal_path,     /* IN */
00291                                   int quota_type,       /* IN */
00292                                   fsal_uid_t fsal_uid,  /* IN */
00293                                   fsal_quota_t * pquota,        /* IN */
00294                                   fsal_quota_t * presquota);    /* OUT */
00295 
00296 fsal_status_t POSIXFSAL_get_quota(fsal_path_t * pfsal_path,     /* IN */
00297                                   int quota_type,       /* IN */
00298                                   fsal_uid_t fsal_uid,  /* IN */
00299                                   fsal_quota_t * pquota);       /* OUT */
00300 
00301 fsal_status_t POSIXFSAL_rcp(fsal_handle_t * filehandle,    /* IN */
00302                             fsal_op_context_t * p_context, /* IN */
00303                             fsal_path_t * p_local_path, /* IN */
00304                             fsal_rcpflag_t transfer_opt /* IN */ );
00305 
00306 fsal_status_t POSIXFSAL_rename(fsal_handle_t * p_old_parentdir_handle,     /* IN */
00307                                fsal_name_t * p_old_name,        /* IN */
00308                                fsal_handle_t * p_new_parentdir_handle,     /* IN */
00309                                fsal_name_t * p_new_name,        /* IN */
00310                                fsal_op_context_t * p_context,      /* IN */
00311                                fsal_attrib_list_t * p_src_dir_attributes,       /* [ IN/OUT ] */
00312                                fsal_attrib_list_t *
00313                                p_tgt_dir_attributes /* [ IN/OUT ] */ );
00314 
00315 void POSIXFSAL_get_stats(fsal_statistics_t * stats,     /* OUT */
00316                          fsal_boolean_t reset /* IN */ );
00317 
00318 fsal_status_t POSIXFSAL_readlink(fsal_handle_t * p_linkhandle,     /* IN */
00319                                  fsal_op_context_t * p_context,    /* IN */
00320                                  fsal_path_t * p_link_content,  /* OUT */
00321                                  fsal_attrib_list_t *
00322                                  p_link_attributes /* [ IN/OUT ] */ );
00323 
00324 fsal_status_t POSIXFSAL_symlink(fsal_handle_t * p_parent_directory_handle, /* IN */
00325                                 fsal_name_t * p_linkname,       /* IN */
00326                                 fsal_path_t * p_linkcontent,    /* IN */
00327                                 fsal_op_context_t * p_context,     /* IN */
00328                                 fsal_accessmode_t accessmode,   /* IN (ignored) */
00329                                 fsal_handle_t * p_link_handle,     /* OUT */
00330                                 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00331 
00332 int POSIXFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00333                         fsal_status_t * status);
00334 
00335 unsigned int POSIXFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00336                                            unsigned int cookie,
00337                                            unsigned int alphabet_len,
00338                                            unsigned int index_size);
00339 
00340 unsigned int POSIXFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle,
00341                                           unsigned int cookie);
00342 
00343 fsal_status_t POSIXFSAL_DigestHandle(fsal_export_context_t * p_expcontext, /* IN */
00344                                      fsal_digesttype_t output_type,     /* IN */
00345                                      fsal_handle_t * p_in_fsal_handle,     /* IN */
00346                                      struct fsal_handle_desc *fh_desc     /* IN/OUT */ );
00347 
00348 fsal_status_t POSIXFSAL_ExpandHandle(fsal_export_context_t * p_expcontext, /* IN not used */
00349                                      fsal_digesttype_t in_type, /* IN */
00350                                      struct fsal_handle_desc *fh_desc  /* IN/OUT */);
00351 
00352 fsal_status_t POSIXFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t *
00353                                                          out_parameter);
00354 
00355 fsal_status_t POSIXFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00356                                                              fsal_parameter_t *
00357                                                              out_parameter);
00358 
00359 fsal_status_t POSIXFSAL_truncate(fsal_handle_t * p_filehandle,     /* IN */
00360                                  fsal_op_context_t * p_context,    /* IN */
00361                                  fsal_size_t length,    /* IN */
00362                                  fsal_file_t * file_descriptor,    /* Unused in this FSAL */
00363                                  fsal_attrib_list_t *
00364                                  p_object_attributes /* [ IN/OUT ] */ );
00365 
00366 fsal_status_t POSIXFSAL_unlink(fsal_handle_t * p_parent_directory_handle,  /* IN */
00367                                fsal_name_t * p_object_name,     /* IN */
00368                                fsal_op_context_t * p_context,      /* IN */
00369                                fsal_attrib_list_t *
00370                                p_parent_directory_attributes /* [IN/OUT ] */ );
00371 
00372 char *POSIXFSAL_GetFSName();
00373 
00374 fsal_status_t POSIXFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,      /* IN */
00375                                       fsal_op_context_t * p_context,       /* IN */
00376                                       unsigned int xattr_id,    /* IN */
00377                                       fsal_attrib_list_t * p_attrs);
00378 
00379 fsal_status_t POSIXFSAL_ListXAttrs(fsal_handle_t * p_objecthandle, /* IN */
00380                                    unsigned int cookie, /* IN */
00381                                    fsal_op_context_t * p_context,  /* IN */
00382                                    fsal_xattrent_t * xattrs_tab,        /* IN/OUT */
00383                                    unsigned int xattrs_tabsize, /* IN */
00384                                    unsigned int *p_nb_returned, /* OUT */
00385                                    int *end_of_list /* OUT */ );
00386 
00387 fsal_status_t POSIXFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,  /* IN */
00388                                           unsigned int xattr_id,        /* IN */
00389                                           fsal_op_context_t * p_context,   /* IN */
00390                                           caddr_t buffer_addr,  /* IN/OUT */
00391                                           size_t buffer_size,   /* IN */
00392                                           size_t * p_output_size /* OUT */ );
00393 
00394 fsal_status_t POSIXFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,   /* IN */
00395                                          const fsal_name_t * xattr_name,        /* IN */
00396                                          fsal_op_context_t * p_context,    /* IN */
00397                                          unsigned int *pxattr_id /* OUT */ );
00398 
00399 fsal_status_t POSIXFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,  /* IN */
00400                                             const fsal_name_t * xattr_name,     /* IN */
00401                                             fsal_op_context_t * p_context, /* IN */
00402                                             caddr_t buffer_addr,        /* IN/OUT */
00403                                             size_t buffer_size, /* IN */
00404                                             size_t * p_output_size /* OUT */ );
00405 
00406 fsal_status_t POSIXFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,      /* IN */
00407                                       const fsal_name_t * xattr_name,   /* IN */
00408                                       fsal_op_context_t * p_context,       /* IN */
00409                                       caddr_t buffer_addr,      /* IN */
00410                                       size_t buffer_size,       /* IN */
00411                                       int create /* IN */ );
00412 
00413 fsal_status_t POSIXFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,  /* IN */
00414                                           unsigned int xattr_id,        /* IN */
00415                                           fsal_op_context_t * p_context,   /* IN */
00416                                           caddr_t buffer_addr,  /* IN */
00417                                           size_t buffer_size /* IN */ );
00418 
00419 fsal_status_t POSIXFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,    /* IN */
00420                                         fsal_op_context_t * p_context,     /* IN */
00421                                         unsigned int xattr_id) /* IN */ ;
00422 
00423 fsal_status_t POSIXFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,  /* IN */
00424                                           fsal_op_context_t * p_context,   /* IN */
00425                                           const fsal_name_t * xattr_name) /* IN */ ;
00426 
00427 int POSIXFSAL_GetXattrOffsetSetable( void ) ;
00428 
00429 unsigned int POSIXFSAL_GetFileno(fsal_file_t * pfile);