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 #ifdef _PNFS
00017 #include "fsal_pnfs.h"
00018 #endif /* _PNFS */
00019 
00020 /* defined the set of attributes supported with POSIX */
00021 #define POSIX_SUPPORTED_ATTRIBUTES (                                       \
00022           FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE     | FSAL_ATTR_SIZE      | \
00023           FSAL_ATTR_FSID     |  FSAL_ATTR_FILEID  | \
00024           FSAL_ATTR_MODE     | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER     | \
00025           FSAL_ATTR_GROUP    | FSAL_ATTR_ATIME    | FSAL_ATTR_RAWDEV    | \
00026           FSAL_ATTR_CTIME    | FSAL_ATTR_MTIME    | FSAL_ATTR_SPACEUSED | \
00027           FSAL_ATTR_CHGTIME  )
00028 
00029 /* the following variables must not be defined in fsal_internal.c */
00030 #ifndef FSAL_INTERNAL_C
00031 
00032 /* static filesystem info.
00033  * read access only.
00034  */
00035 extern fsal_staticfsinfo_t global_fs_info;
00036 
00037 
00038 #endif
00039 
00043 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00044                                         fs_common_initinfo_t * fs_common_info,
00045                                         fs_specific_initinfo_t * fs_specific_info);
00046 
00050 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00051 
00055 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00056 
00060 void TakeTokenFSCall();
00061 void ReleaseTokenFSCall();
00062 
00066 fsal_status_t fsal_internal_appendNameToPath(fsal_path_t * p_path,
00067                                              const fsal_name_t * p_name);
00068 
00072 fsal_status_t fsal_internal_Handle2FidPath(fsal_op_context_t * p_context,       /* IN */
00073                                            fsal_handle_t * p_handle,    /* IN */
00074                                            fsal_path_t * p_fsalpath /* OUT */ );
00075 
00079 fsal_status_t fsal_internal_Path2Handle(fsal_op_context_t * p_context,  /* IN */
00080                                         fsal_path_t * p_fsalpath,       /* IN */
00081                                         fsal_handle_t * p_handle /* OUT */ );
00082 
00087 fsal_status_t fsal_internal_testAccess(fsal_op_context_t * p_context,   /* IN */
00088                                        fsal_accessflags_t access_type,  /* IN */
00089                                        struct stat *p_buffstat, /* IN, optional */
00090                                        fsal_attrib_list_t *
00091                                        p_object_attributes /* IN, optional */ );
00092 
00093 /* All the call to FSAL to be wrapped */
00094 fsal_status_t LUSTREFSAL_access(fsal_handle_t * p_object_handle,  /* IN */
00095                                 fsal_op_context_t * p_context,    /* IN */
00096                                 fsal_accessflags_t access_type, /* IN */
00097                                 fsal_attrib_list_t *
00098                                 p_object_attributes /* [ IN/OUT ] */ );
00099 
00100 fsal_status_t LUSTREFSAL_getattrs(fsal_handle_t * p_filehandle,   /* IN */
00101                                   fsal_op_context_t * p_context,  /* IN */
00102                                   fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00103 
00104 fsal_status_t LUSTREFSAL_setattrs(fsal_handle_t * p_filehandle,   /* IN */
00105                                   fsal_op_context_t * p_context,  /* IN */
00106                                   fsal_attrib_list_t * p_attrib_set,    /* IN */
00107                                   fsal_attrib_list_t *
00108                                   p_object_attributes /* [ IN/OUT ] */ );
00109 
00110 fsal_status_t LUSTREFSAL_BuildExportContext(fsal_export_context_t * p_export_context,     /* OUT */
00111                                             fsal_path_t * p_export_path,        /* IN */
00112                                             char *fs_specific_options /* IN */ );
00113 
00114 fsal_status_t LUSTREFSAL_create(fsal_handle_t * p_parent_directory_handle,        /* IN */
00115                                 fsal_name_t * p_filename,       /* IN */
00116                                 fsal_op_context_t * p_context,    /* IN */
00117                                 fsal_accessmode_t accessmode,   /* IN */
00118                                 fsal_handle_t * p_object_handle,  /* OUT */
00119                                 fsal_attrib_list_t *
00120                                 p_object_attributes /* [ IN/OUT ] */ );
00121 
00122 fsal_status_t LUSTREFSAL_mkdir(fsal_handle_t * p_parent_directory_handle, /* IN */
00123                                fsal_name_t * p_dirname, /* IN */
00124                                fsal_op_context_t * p_context,     /* IN */
00125                                fsal_accessmode_t accessmode,    /* IN */
00126                                fsal_handle_t * p_object_handle,   /* OUT */
00127                                fsal_attrib_list_t *
00128                                p_object_attributes /* [ IN/OUT ] */ );
00129 
00130 fsal_status_t LUSTREFSAL_link(fsal_handle_t * p_target_handle,    /* IN */
00131                               fsal_handle_t * p_dir_handle,       /* IN */
00132                               fsal_name_t * p_link_name,        /* IN */
00133                               fsal_op_context_t * p_context,      /* IN */
00134                               fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00135 
00136 fsal_status_t LUSTREFSAL_mknode(fsal_handle_t * parentdir_handle, /* IN */
00137                                 fsal_name_t * p_node_name,      /* IN */
00138                                 fsal_op_context_t * p_context,    /* IN */
00139                                 fsal_accessmode_t accessmode,   /* IN */
00140                                 fsal_nodetype_t nodetype,       /* IN */
00141                                 fsal_dev_t * dev,       /* IN */
00142                                 fsal_handle_t * p_object_handle,  /* OUT (handle to the created node) */
00143                                 fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00144 
00145 fsal_status_t LUSTREFSAL_opendir(fsal_handle_t * p_dir_handle,    /* IN */
00146                                  fsal_op_context_t * p_context,   /* IN */
00147                                  fsal_dir_t * p_dir_descriptor,   /* OUT */
00148                                  fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00149 
00150 fsal_status_t LUSTREFSAL_readdir(fsal_dir_t * p_dir_descriptor,   /* IN */
00151                                  fsal_cookie_t start_position,    /* IN */
00152                                  fsal_attrib_mask_t get_attr_mask,      /* IN */
00153                                  fsal_mdsize_t buffersize,      /* IN */
00154                                  fsal_dirent_t * p_pdirent,     /* OUT */
00155                                  fsal_cookie_t * p_end_position,  /* OUT */
00156                                  fsal_count_t * p_nb_entries,   /* OUT */
00157                                  fsal_boolean_t * p_end_of_dir /* OUT */ );
00158 
00159 fsal_status_t LUSTREFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00160 
00161 fsal_status_t LUSTREFSAL_open_by_name(fsal_handle_t * dirhandle,  /* IN */
00162                                       fsal_name_t * filename,   /* IN */
00163                                       fsal_op_context_t * p_context,      /* IN */
00164                                       fsal_openflags_t openflags,       /* IN */
00165                                       fsal_file_t * file_descriptor,      /* OUT */
00166                                       fsal_attrib_list_t *
00167                                       file_attributes /* [ IN/OUT ] */ );
00168 
00169 fsal_status_t LUSTREFSAL_open(fsal_handle_t * p_filehandle,       /* IN */
00170                               fsal_op_context_t * p_context,      /* IN */
00171                               fsal_openflags_t openflags,       /* IN */
00172                               fsal_file_t * p_file_descriptor,    /* OUT */
00173                               fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00174 
00175 fsal_status_t LUSTREFSAL_read(fsal_file_t * p_file_descriptor,    /* IN */
00176                               fsal_seek_t * p_seek_descriptor,  /* [IN] */
00177                               fsal_size_t buffer_size,  /* IN */
00178                               caddr_t buffer,   /* OUT */
00179                               fsal_size_t * p_read_amount,      /* OUT */
00180                               fsal_boolean_t * p_end_of_file /* OUT */ );
00181 
00182 fsal_status_t LUSTREFSAL_write(fsal_file_t * p_file_descriptor,   /* IN */
00183                                fsal_op_context_t * p_context,     /* IN */
00184                                fsal_seek_t * p_seek_descriptor, /* IN */
00185                                fsal_size_t buffer_size, /* IN */
00186                                caddr_t buffer,  /* IN */
00187                                fsal_size_t * p_write_amount /* OUT */ );
00188 
00189 fsal_status_t LUSTREFSAL_commit( fsal_file_t * p_file_descriptor,
00190                                fsal_off_t    offset,
00191                                fsal_size_t   size ) ;
00192 
00193 fsal_status_t LUSTREFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00194 
00195 fsal_status_t LUSTREFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,     /* IN */
00196                                         fsal_op_context_t * p_context,    /* IN */
00197                                         fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00198 
00199 fsal_status_t LUSTREFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00200 
00201 fsal_status_t LUSTREFSAL_test_access(fsal_op_context_t * p_context,       /* IN */
00202                                      fsal_accessflags_t access_type,    /* IN */
00203                                      fsal_attrib_list_t * p_object_attributes /* IN */ );
00204 
00205 fsal_status_t LUSTREFSAL_lookup(fsal_handle_t * p_parent_directory_handle,        /* IN */
00206                                 fsal_name_t * p_filename,       /* IN */
00207                                 fsal_op_context_t * p_context,    /* IN */
00208                                 fsal_handle_t * p_object_handle,  /* OUT */
00209                                 fsal_attrib_list_t *
00210                                 p_object_attributes /* [ IN/OUT ] */ );
00211 
00212 fsal_status_t LUSTREFSAL_lookupPath(fsal_path_t * p_path,       /* IN */
00213                                     fsal_op_context_t * p_context,        /* IN */
00214                                     fsal_handle_t * object_handle,        /* OUT */
00215                                     fsal_attrib_list_t *
00216                                     p_object_attributes /* [ IN/OUT ] */ );
00217 
00218 fsal_status_t LUSTREFSAL_lookupJunction(fsal_handle_t * p_junction_handle,        /* IN */
00219                                         fsal_op_context_t * p_context,    /* IN */
00220                                         fsal_handle_t * p_fsoot_handle,   /* OUT */
00221                                         fsal_attrib_list_t *
00222                                         p_fsroot_attributes /* [ IN/OUT ] */ );
00223 
00224 fsal_status_t LUSTREFSAL_rcp(fsal_handle_t * filehandle,  /* IN */
00225                              fsal_op_context_t * p_context,       /* IN */
00226                              fsal_path_t * p_local_path,        /* IN */
00227                              fsal_rcpflag_t transfer_opt /* IN */ );
00228 
00229 fsal_status_t LUSTREFSAL_rename(fsal_handle_t * p_old_parentdir_handle,   /* IN */
00230                                 fsal_name_t * p_old_name,       /* IN */
00231                                 fsal_handle_t * p_new_parentdir_handle,   /* IN */
00232                                 fsal_name_t * p_new_name,       /* IN */
00233                                 fsal_op_context_t * p_context,    /* IN */
00234                                 fsal_attrib_list_t * p_src_dir_attributes,      /* [ IN/OUT ] */
00235                                 fsal_attrib_list_t *
00236                                 p_tgt_dir_attributes /* [ IN/OUT ] */ );
00237 
00238 void LUSTREFSAL_get_stats(fsal_statistics_t * stats,    /* OUT */
00239                           fsal_boolean_t reset /* IN */ );
00240 
00241 fsal_status_t LUSTREFSAL_readlink(fsal_handle_t * p_linkhandle,   /* IN */
00242                                   fsal_op_context_t * p_context,  /* IN */
00243                                   fsal_path_t * p_link_content, /* OUT */
00244                                   fsal_attrib_list_t *
00245                                   p_link_attributes /* [ IN/OUT ] */ );
00246 
00247 fsal_status_t LUSTREFSAL_symlink(fsal_handle_t * p_parent_directory_handle,       /* IN */
00248                                  fsal_name_t * p_linkname,      /* IN */
00249                                  fsal_path_t * p_linkcontent,   /* IN */
00250                                  fsal_op_context_t * p_context,   /* IN */
00251                                  fsal_accessmode_t accessmode,  /* IN (ignored) */
00252                                  fsal_handle_t * p_link_handle,   /* OUT */
00253                                  fsal_attrib_list_t *
00254                                  p_link_attributes /* [ IN/OUT ] */ );
00255 
00256 int LUSTREFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00257                          fsal_status_t * status);
00258 
00259 unsigned int LUSTREFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00260                                             unsigned int cookie,
00261                                             unsigned int alphabet_len,
00262                                             unsigned int index_size);
00263 
00264 unsigned int LUSTREFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle,
00265                                            unsigned int cookie);
00266 
00267 fsal_status_t LUSTREFSAL_DigestHandle(fsal_export_context_t * exp_context,     /* IN */
00268                                       fsal_digesttype_t output_type,       /* IN */
00269                                       fsal_handle_t *in_fsal_handle, /* IN */
00270                                       struct fsal_handle_desc *fh_desc     /* IN/OUT */ ) ;
00271 
00272 fsal_status_t LUSTREFSAL_ExpandHandle(fsal_export_context_t * p_expcontext,     /* IN not used */
00273                                    fsal_digesttype_t in_type,   /* IN */
00274                                    struct fsal_handle_desc *fh_desc  /* IN/OUT */ ) ;
00275 
00276 fsal_status_t LUSTREFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t *
00277                                                           out_parameter);
00278 
00279 fsal_status_t LUSTREFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00280                                                               fsal_parameter_t *
00281                                                               out_parameter);
00282 
00283 fsal_status_t LUSTREFSAL_truncate(fsal_handle_t * p_filehandle,   /* IN */
00284                                   fsal_op_context_t * p_context,  /* IN */
00285                                   fsal_size_t length,   /* IN */
00286                                   fsal_file_t * file_descriptor,  /* Unused in this FSAL */
00287                                   fsal_attrib_list_t *
00288                                   p_object_attributes /* [ IN/OUT ] */ );
00289 
00290 fsal_status_t LUSTREFSAL_unlink(fsal_handle_t * p_parent_directory_handle,        /* IN */
00291                                 fsal_name_t * p_object_name,    /* IN */
00292                                 fsal_op_context_t * p_context,    /* IN */
00293                                 fsal_attrib_list_t *
00294                                 p_parent_directory_attributes /* [IN/OUT ] */ );
00295 
00296 char *LUSTREFSAL_GetFSName();
00297 
00298 fsal_status_t LUSTREFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,    /* IN */
00299                                        fsal_op_context_t * p_context,     /* IN */
00300                                        unsigned int xattr_id,   /* IN */
00301                                        fsal_attrib_list_t * p_attrs);
00302 
00303 fsal_status_t LUSTREFSAL_ListXAttrs(fsal_handle_t * p_objecthandle,       /* IN */
00304                                     unsigned int cookie,        /* IN */
00305                                     fsal_op_context_t * p_context,        /* IN */
00306                                     fsal_xattrent_t * xattrs_tab,       /* IN/OUT */
00307                                     unsigned int xattrs_tabsize,        /* IN */
00308                                     unsigned int *p_nb_returned,        /* OUT */
00309                                     int *end_of_list /* OUT */ );
00310 
00311 fsal_status_t LUSTREFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,        /* IN */
00312                                            unsigned int xattr_id,       /* IN */
00313                                            fsal_op_context_t * p_context, /* IN */
00314                                            caddr_t buffer_addr, /* IN/OUT */
00315                                            size_t buffer_size,  /* IN */
00316                                            size_t * p_output_size /* OUT */ );
00317 
00318 fsal_status_t LUSTREFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle, /* IN */
00319                                           const fsal_name_t * xattr_name,       /* IN */
00320                                           fsal_op_context_t * p_context,  /* IN */
00321                                           unsigned int *pxattr_id /* OUT */ );
00322 
00323 fsal_status_t LUSTREFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,      /* IN */
00324                                              const fsal_name_t * xattr_name,    /* IN */
00325                                              fsal_op_context_t * p_context,       /* IN */
00326                                              caddr_t buffer_addr,       /* IN/OUT */
00327                                              size_t buffer_size,        /* IN */
00328                                              size_t * p_output_size /* OUT */ );
00329 
00330 fsal_status_t LUSTREFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,    /* IN */
00331                                        const fsal_name_t * xattr_name,  /* IN */
00332                                        fsal_op_context_t * p_context,     /* IN */
00333                                        caddr_t buffer_addr,     /* IN */
00334                                        size_t buffer_size,      /* IN */
00335                                        int create /* IN */ );
00336 
00337 fsal_status_t LUSTREFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,        /* IN */
00338                                            unsigned int xattr_id,       /* IN */
00339                                            fsal_op_context_t * p_context, /* IN */
00340                                            caddr_t buffer_addr, /* IN */
00341                                            size_t buffer_size /* IN */ );
00342 
00343 fsal_status_t LUSTREFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,  /* IN */
00344                                          fsal_op_context_t * p_context,   /* IN */
00345                                          unsigned int xattr_id) /* IN */ ;
00346 
00347 fsal_status_t LUSTREFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,        /* IN */
00348                                            fsal_op_context_t * p_context, /* IN */
00349                                            const fsal_name_t * xattr_name) /* IN */ ;
00350 
00351 int LUSTREFSAL_GetXattrOffsetSetable( void ) ;
00352 
00353 fsal_status_t LUSTREFSAL_lock_op( fsal_file_t       * p_file_descriptor,   /* IN */
00354                                   fsal_handle_t     * p_filehandle,        /* IN */
00355                                   fsal_op_context_t * p_context,           /* IN */
00356                                   void              * p_owner,             /* IN (opaque to FSAL) */
00357                                   fsal_lock_op_t      lock_op,             /* IN */
00358                                   fsal_lock_param_t   request_lock,        /* IN */
00359                                   fsal_lock_param_t * conflicting_lock)    /* OUT */ ;
00360 
00361 fsal_status_t LUSTREFSAL_set_quota(fsal_path_t * pfsal_path,       /* IN */
00362                                 int quota_type, /* IN */
00363                                 fsal_uid_t fsal_uid,    /* IN */
00364                                 fsal_quota_t * pquota,  /* IN */
00365                                 fsal_quota_t * presquota)  ;     /* OUT */
00366 
00367 fsal_status_t LUSTREFSAL_get_quota(fsal_path_t * pfsal_path,       /* IN */
00368                                    int quota_type, /* IN */
00369                                    fsal_uid_t fsal_uid,    /* IN */
00370                                    fsal_quota_t * pquota) ;  /* OUT */
00371 
00372 fsal_status_t LUSTREFSAL_check_quota( char *path,  /* IN */
00373                                       fsal_quota_type_t  quota_type,
00374                                       fsal_uid_t fsal_uid);      /* IN */
00375 
00376 unsigned int LUSTREFSAL_GetFileno(fsal_file_t * pfile);
00377 #ifdef _PNFS_MDS
00378 nfsstat4 LUSTREFSAL_MDS_init( ) ;
00379 nfsstat4 LUSTREFSAL_MDS_terminate( ) ;
00380 
00381 nfsstat4 LUSTREFSAL_layoutget(fsal_handle_t *exhandle,
00382                             fsal_op_context_t *excontext,
00383                             XDR *loc_body,
00384                             const struct fsal_layoutget_arg *arg,
00385                             struct fsal_layoutget_res *res);
00386 nfsstat4 LUSTREFSAL_layoutreturn(fsal_handle_t* handle,
00387                                fsal_op_context_t* context,
00388                                XDR *lrf_body,
00389                                const struct fsal_layoutreturn_arg *arg);
00390 nfsstat4 LUSTREFSAL_layoutcommit(fsal_handle_t *handle,
00391                                fsal_op_context_t *context,
00392                                XDR *lou_body,
00393                                const struct fsal_layoutcommit_arg *arg,
00394                                struct fsal_layoutcommit_res *res);
00395 nfsstat4 LUSTREFSAL_getdeviceinfo(fsal_op_context_t *context,
00396                                 XDR* da_addr_body,
00397                                 layouttype4 type,
00398                                 const struct pnfs_deviceid *deviceid);
00399 nfsstat4 LUSTREFSAL_getdevicelist(fsal_handle_t *handle,
00400                                 fsal_op_context_t *context,
00401                                 const struct fsal_getdevicelist_arg *arg,
00402                                 struct fsal_getdevicelist_res *res);
00403 #endif /* _PNFS_MDS */
00404 
00405 #ifdef _PNFS_DS
00406 
00407 fsal_status_t LUSTREFSAL_load_pnfs_parameter_from_conf(config_file_t             in_config,
00408                                                        lustre_pnfs_parameter_t * out_parameter);
00409 
00410 nfsstat4 LUSTREFSAL_DS_init( lustre_pnfs_parameter_t *pparam ) ;
00411 
00412 nfsstat4 LUSTREFSAL_DS_terminate( void ) ;
00413 
00414 nfsstat4 LUSTREFSAL_DS_read(fsal_handle_t *handle,
00415                           fsal_op_context_t *context,
00416                           const stateid4 *stateid,
00417                           offset4 offset,
00418                           count4 requested_length,
00419                           caddr_t buffer,
00420                           count4 *supplied_length,
00421                           fsal_boolean_t *end_of_file);
00422 
00423 nfsstat4 LUSTREFSAL_DS_write(fsal_handle_t *handle,
00424                            fsal_op_context_t *context,
00425                            const stateid4 *stateid,
00426                            offset4 offset,
00427                            count4 write_length,
00428                            caddr_t buffer,
00429                            stable_how4 stability_wanted,
00430                            count4 *written_length,
00431                            verifier4 writeverf,
00432                            stable_how4 *stability_got);
00433 
00434 nfsstat4 LUSTREFSAL_DS_commit(fsal_handle_t *handle,
00435                             fsal_op_context_t *context,
00436                             offset4 offset,
00437                             count4 count,
00438                             verifier4 writeverf);
00439 #endif /* _PNFS_DS */