nfs-ganesha 1.4

fsal_internal.h

Go to the documentation of this file.
00001 /*
00002  * vim:expandtab:shiftwidth=8:tabstop=8:
00003  *
00004  * Copyright CEA/DAM/DIF  (2008)
00005  * contributeur : Philippe DENIEL   philippe.deniel@cea.fr
00006  *                Thomas LEIBOVICI  thomas.leibovici@cea.fr
00007  *
00008  *
00009  * This program is free software; you can redistribute it and/or
00010  * modify it under the terms of the GNU Lesser General Public
00011  * License as published by the Free Software Foundation; either
00012  * version 3 of the License, or (at your option) any later version.
00013  *
00014  * This program is distributed in the hope that it will be useful,
00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017  * Lesser General Public License for more details.
00018  *
00019  * You should have received a copy of the GNU Lesser General Public
00020  * License along with this library; if not, write to the Free Software
00021  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00022  *
00023  * ---------------------------------------
00024  */
00025 
00035 #include "fsal.h"
00036 #include <sys/stat.h>
00037 #include "FSAL/common_functions.h"
00038 
00039 /* defined the set of attributes supported with POSIX */
00040 #define VFS_SUPPORTED_ATTRIBUTES (                                       \
00041           FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE     | FSAL_ATTR_SIZE      | \
00042           FSAL_ATTR_FSID     |  FSAL_ATTR_FILEID  | \
00043           FSAL_ATTR_MODE     | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER     | \
00044           FSAL_ATTR_GROUP    | FSAL_ATTR_ATIME    | FSAL_ATTR_RAWDEV    | \
00045           FSAL_ATTR_CTIME    | FSAL_ATTR_MTIME    | FSAL_ATTR_SPACEUSED | \
00046           FSAL_ATTR_CHGTIME  )
00047 
00048 /* the following variables must not be defined in fsal_internal.c */
00049 #ifndef FSAL_INTERNAL_C
00050 
00051 /* static filesystem info.
00052  * read access only.
00053  */
00054 extern fsal_staticfsinfo_t global_fs_info;
00055 
00056 /* export_context_t is not given to every function, but
00057  * most functions need to use the open-by-handle funcionality.
00058  */
00059 extern char open_by_handle_path[MAXPATHLEN];
00060 extern int open_by_handle_fd;
00061 
00062 #endif
00063 
00067 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00068                                         fs_common_initinfo_t * fs_common_info,
00069                                         fs_specific_initinfo_t * fs_specific_info);
00070 
00074 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00075 
00079 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00080 
00084 void TakeTokenFSCall();
00085 void ReleaseTokenFSCall();
00086 
00090 fsal_status_t fsal_internal_handle2fd(fsal_op_context_t * p_context,
00091                                       fsal_handle_t * phandle, int *pfd, int oflags);
00092 
00093 fsal_status_t fsal_internal_handle2fd_at(int dirfd,
00094                                          fsal_handle_t * phandle, int *pfd, int oflags);
00095 
00096 fsal_status_t fsal_internal_Path2Handle(fsal_op_context_t * p_context,       /* IN */
00097                                         fsal_path_t * p_fsalpath,       /* IN */
00098                                         fsal_handle_t * p_handle /* OUT */ ) ;
00099 
00103 fsal_status_t fsal_readlink_by_handle(fsal_op_context_t * p_context,
00104                                       fsal_handle_t * p_handle, char *__buf, int maxlen);
00105 
00109 fsal_status_t fsal_internal_get_handle_at(int dfd, const char *name,    /* IN */
00110                                           fsal_handle_t * p_handle /* OUT */ );
00111 
00112 fsal_status_t fsal_internal_fd2handle(  fsal_op_context_t * p_context,
00113                                         int fd,   /* IN */
00114                                         fsal_handle_t * p_handle  /* OUT */
00115     );
00116 
00117 fsal_status_t fsal_internal_link_at(int srcfd, int dfd, char *name);
00118 
00119 fsal_status_t fsal_stat_by_handle(fsal_op_context_t * p_context,
00120                                   fsal_handle_t * p_handle, struct stat64 *buf);
00121 
00122 
00123 /* All the call to FSAL to be wrapped */
00124 fsal_status_t VFSFSAL_access(fsal_handle_t * p_object_handle,        /* IN */
00125                              fsal_op_context_t * p_context,  /* IN */
00126                              fsal_accessflags_t access_type,    /* IN */
00127                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00128 
00129 fsal_status_t VFSFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */
00130                                fsal_op_context_t * p_context,        /* IN */
00131                                fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00132 
00133 fsal_status_t VFSFSAL_getattrs_descriptor(fsal_file_t * p_file_descriptor,     /* IN */
00134                                            fsal_handle_t * p_filehandle,        /* IN */
00135                                            fsal_op_context_t * p_context,       /* IN */
00136                                            fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00137 
00138 fsal_status_t VFSFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */
00139                                fsal_op_context_t * p_context,        /* IN */
00140                                fsal_attrib_list_t * p_attrib_set,       /* IN */
00141                                fsal_attrib_list_t *
00142                                p_object_attributes /* [ IN/OUT ] */ );
00143 
00144 fsal_status_t VFSFSAL_BuildExportContext(fsal_export_context_t * p_export_context,   /* OUT */
00145                                          fsal_path_t * p_export_path,   /* IN */
00146                                          char *fs_specific_options /* IN */ );
00147 
00148 fsal_status_t VFSFSAL_create(fsal_handle_t * p_parent_directory_handle,      /* IN */
00149                              fsal_name_t * p_filename,  /* IN */
00150                              fsal_op_context_t * p_context,  /* IN */
00151                              fsal_accessmode_t accessmode,      /* IN */
00152                              fsal_handle_t * p_object_handle,        /* OUT */
00153                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00154 
00155 fsal_status_t VFSFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,       /* IN */
00156                             fsal_name_t * p_dirname,    /* IN */
00157                             fsal_op_context_t * p_context,   /* IN */
00158                             fsal_accessmode_t accessmode,       /* IN */
00159                             fsal_handle_t * p_object_handle, /* OUT */
00160                             fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00161 
00162 fsal_status_t VFSFSAL_link(fsal_handle_t * p_target_handle,  /* IN */
00163                            fsal_handle_t * p_dir_handle,     /* IN */
00164                            fsal_name_t * p_link_name,   /* IN */
00165                            fsal_op_context_t * p_context,    /* IN */
00166                            fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00167 
00168 fsal_status_t VFSFSAL_mknode(fsal_handle_t * parentdir_handle,       /* IN */
00169                              fsal_name_t * p_node_name, /* IN */
00170                              fsal_op_context_t * p_context,  /* IN */
00171                              fsal_accessmode_t accessmode,      /* IN */
00172                              fsal_nodetype_t nodetype,  /* IN */
00173                              fsal_dev_t * dev,  /* IN */
00174                              fsal_handle_t * p_object_handle,        /* OUT (handle to the created node) */
00175                              fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00176 
00177 fsal_status_t VFSFSAL_opendir(fsal_handle_t * p_dir_handle,  /* IN */
00178                               fsal_op_context_t * p_context, /* IN */
00179                               fsal_dir_t * p_dir_descriptor, /* OUT */
00180                               fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00181 
00182 fsal_status_t VFSFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */
00183                               fsal_cookie_t start_position,  /* IN */
00184                               fsal_attrib_mask_t get_attr_mask, /* IN */
00185                               fsal_mdsize_t buffersize, /* IN */
00186                               fsal_dirent_t * p_pdirent,        /* OUT */
00187                               fsal_cookie_t * p_end_position,        /* OUT */
00188                               fsal_count_t * p_nb_entries,      /* OUT */
00189                               fsal_boolean_t * p_end_of_dir /* OUT */ );
00190 
00191 fsal_status_t VFSFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00192 
00193 fsal_status_t VFSFSAL_open_by_name(fsal_handle_t * dirhandle,        /* IN */
00194                                    fsal_name_t * filename,      /* IN */
00195                                    fsal_op_context_t * p_context,    /* IN */
00196                                    fsal_openflags_t openflags,  /* IN */
00197                                    fsal_file_t * file_descriptor,    /* OUT */
00198                                    fsal_attrib_list_t *
00199                                    file_attributes /* [ IN/OUT ] */ );
00200 
00201 fsal_status_t VFSFSAL_open(fsal_handle_t * p_filehandle,     /* IN */
00202                            fsal_op_context_t * p_context,    /* IN */
00203                            fsal_openflags_t openflags,  /* IN */
00204                            fsal_file_t * p_file_descriptor,  /* OUT */
00205                            fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00206 
00207 fsal_status_t VFSFSAL_read(fsal_file_t * p_file_descriptor,  /* IN */
00208                            fsal_seek_t * p_seek_descriptor,     /* [IN] */
00209                            fsal_size_t buffer_size,     /* IN */
00210                            caddr_t buffer,      /* OUT */
00211                            fsal_size_t * p_read_amount, /* OUT */
00212                            fsal_boolean_t * p_end_of_file /* OUT */ );
00213 
00214 fsal_status_t VFSFSAL_write(fsal_file_t * p_file_descriptor, /* IN */
00215                             fsal_op_context_t * p_context,   /* IN */
00216                             fsal_seek_t * p_seek_descriptor,    /* IN */
00217                             fsal_size_t buffer_size,    /* IN */
00218                             caddr_t buffer,     /* IN */
00219                             fsal_size_t * p_write_amount /* OUT */ );
00220 
00221 fsal_status_t VFSFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00222 
00223 fsal_status_t VFSFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,   /* IN */
00224                                      fsal_op_context_t * p_context,  /* IN */
00225                                      fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00226 
00227 fsal_status_t VFSFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00228 
00229 fsal_status_t VFSFSAL_test_access(fsal_op_context_t * p_context,     /* IN */
00230                                   fsal_accessflags_t access_type,       /* IN */
00231                                   fsal_attrib_list_t * p_object_attributes /* IN */ );
00232 
00233 fsal_status_t VFSFSAL_lookup(fsal_handle_t * p_parent_directory_handle,      /* IN */
00234                              fsal_name_t * p_filename,  /* IN */
00235                              fsal_op_context_t * p_context,  /* IN */
00236                              fsal_handle_t * p_object_handle,        /* OUT */
00237                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00238 
00239 fsal_status_t VFSFSAL_lookupPath(fsal_path_t * p_path,  /* IN */
00240                                  fsal_op_context_t * p_context,      /* IN */
00241                                  fsal_handle_t * object_handle,      /* OUT */
00242                                  fsal_attrib_list_t *
00243                                  p_object_attributes /* [ IN/OUT ] */ );
00244 
00245 fsal_status_t VFSFSAL_lookupJunction(fsal_handle_t * p_junction_handle,      /* IN */
00246                                      fsal_op_context_t * p_context,  /* IN */
00247                                      fsal_handle_t * p_fsoot_handle, /* OUT */
00248                                      fsal_attrib_list_t *
00249                                      p_fsroot_attributes /* [ IN/OUT ] */ );
00250 
00251 fsal_status_t VFSFSAL_lock_op( fsal_file_t           * p_file_descriptor,   /* IN */
00252                                fsal_handle_t         * p_filehandle,        /* IN */
00253                                fsal_op_context_t     * p_context,           /* IN */
00254                                void                  * p_owner,             /* IN */
00255                                fsal_lock_op_t          lock_op,             /* IN */
00256                                fsal_lock_param_t       request_lock,        /* IN */
00257                                fsal_lock_param_t     * conflicting_lock     /* OUT */ );
00258 
00259 fsal_status_t VFSFSAL_rcp(fsal_handle_t * filehandle,        /* IN */
00260                           fsal_op_context_t * p_context,     /* IN */
00261                           fsal_path_t * p_local_path,   /* IN */
00262                           fsal_rcpflag_t transfer_opt /* IN */ );
00263 
00264 fsal_status_t VFSFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */
00265                              fsal_name_t * p_old_name,  /* IN */
00266                              fsal_handle_t * p_new_parentdir_handle, /* IN */
00267                              fsal_name_t * p_new_name,  /* IN */
00268                              fsal_op_context_t * p_context,  /* IN */
00269                              fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */
00270                              fsal_attrib_list_t * p_tgt_dir_attributes /* [ IN/OUT ] */ );
00271 
00272 void VFSFSAL_get_stats(fsal_statistics_t * stats,       /* OUT */
00273                        fsal_boolean_t reset /* IN */ );
00274 
00275 fsal_status_t VFSFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */
00276                                fsal_op_context_t * p_context,        /* IN */
00277                                fsal_path_t * p_link_content,    /* OUT */
00278                                fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00279 
00280 fsal_status_t VFSFSAL_symlink(fsal_handle_t * p_parent_directory_handle,     /* IN */
00281                               fsal_name_t * p_linkname, /* IN */
00282                               fsal_path_t * p_linkcontent,      /* IN */
00283                               fsal_op_context_t * p_context, /* IN */
00284                               fsal_accessmode_t accessmode,     /* IN (ignored) */
00285                               fsal_handle_t * p_link_handle, /* OUT */
00286                               fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00287 
00288 int VFSFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00289                       fsal_status_t * status);
00290 
00291 unsigned int VFSFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00292                                          unsigned int cookie,
00293                                          unsigned int alphabet_len,
00294                                          unsigned int index_size);
00295 
00296 unsigned int VFSFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, unsigned int cookie);
00297 
00298 fsal_status_t VFSFSAL_DigestHandle(fsal_export_context_t * p_expcontext,     /* IN */
00299                                    fsal_digesttype_t output_type,       /* IN */
00300                                    fsal_handle_t * p_in_fsal_handle, /* IN */
00301                                    struct fsal_handle_desc *fh_desc /* OUT */ );
00302 
00303 fsal_status_t VFSFSAL_ExpandHandle(fsal_export_context_t * p_expcontext,     /* IN */
00304                                    fsal_digesttype_t in_type,   /* IN */
00305                                    struct fsal_handle_desc *fh_desc     /* IN OUT */ );
00306 
00307 fsal_status_t VFSFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter);
00308 
00309 
00310 fsal_status_t VFSFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00311                                                            fsal_parameter_t *
00312                                                            out_parameter);
00313 
00314 fsal_status_t VFSFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */
00315                                fsal_op_context_t * p_context,        /* IN */
00316                                fsal_size_t length,      /* IN */
00317                                fsal_file_t * file_descriptor,        /* Unused in this FSAL */
00318                                fsal_attrib_list_t *
00319                                p_object_attributes /* [ IN/OUT ] */ );
00320 
00321 fsal_status_t VFSFSAL_unlink(fsal_handle_t * p_parent_directory_handle,      /* IN */
00322                              fsal_name_t * p_object_name,       /* IN */
00323                              fsal_op_context_t * p_context,  /* IN */
00324                              fsal_attrib_list_t *
00325                              p_parent_directory_attributes /* [IN/OUT ] */ );
00326 
00327 char *VFSFSAL_GetFSName();
00328 
00329 fsal_status_t VFSFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,  /* IN */
00330                                     fsal_op_context_t * p_context,   /* IN */
00331                                     unsigned int xattr_id,      /* IN */
00332                                     fsal_attrib_list_t * p_attrs);
00333 
00334 fsal_status_t VFSFSAL_ListXAttrs(fsal_handle_t * p_objecthandle,     /* IN */
00335                                  unsigned int cookie,   /* IN */
00336                                  fsal_op_context_t * p_context,      /* IN */
00337                                  fsal_xattrent_t * xattrs_tab,  /* IN/OUT */
00338                                  unsigned int xattrs_tabsize,   /* IN */
00339                                  unsigned int *p_nb_returned,   /* OUT */
00340                                  int *end_of_list /* OUT */ );
00341 
00342 fsal_status_t VFSFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00343                                         unsigned int xattr_id,  /* IN */
00344                                         fsal_op_context_t * p_context,       /* IN */
00345                                         caddr_t buffer_addr,    /* IN/OUT */
00346                                         size_t buffer_size,     /* IN */
00347                                         size_t * p_output_size /* OUT */ );
00348 
00349 fsal_status_t VFSFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,       /* IN */
00350                                        const fsal_name_t * xattr_name,  /* IN */
00351                                        fsal_op_context_t * p_context,        /* IN */
00352                                        unsigned int *pxattr_id /* OUT */ );
00353 
00354 fsal_status_t VFSFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,    /* IN */
00355                                           const fsal_name_t * xattr_name,       /* IN */
00356                                           fsal_op_context_t * p_context,     /* IN */
00357                                           caddr_t buffer_addr,  /* IN/OUT */
00358                                           size_t buffer_size,   /* IN */
00359                                           size_t * p_output_size /* OUT */ );
00360 
00361 fsal_status_t VFSFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,  /* IN */
00362                                     const fsal_name_t * xattr_name,     /* IN */
00363                                     fsal_op_context_t * p_context,   /* IN */
00364                                     caddr_t buffer_addr,        /* IN */
00365                                     size_t buffer_size, /* IN */
00366                                     int create /* IN */ );
00367 
00368 fsal_status_t VFSFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00369                                         unsigned int xattr_id,  /* IN */
00370                                         fsal_op_context_t * p_context,       /* IN */
00371                                         caddr_t buffer_addr,    /* IN */
00372                                         size_t buffer_size /* IN */ );
00373 
00374 fsal_status_t VFSFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,        /* IN */
00375                                       fsal_op_context_t * p_context, /* IN */
00376                                       unsigned int xattr_id) /* IN */ ;
00377 
00378 int VFSFSAL_GetXattrOffsetSetable( void ) ;
00379 
00380 fsal_status_t VFSFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,      /* IN */
00381                                         fsal_op_context_t * p_context,       /* IN */
00382                                         const fsal_name_t * xattr_name) /* IN */ ;
00383 
00384 unsigned int VFSFSAL_GetFileno(fsal_file_t * pfile);
00385 
00386 fsal_status_t VFSFSAL_commit( fsal_file_t * p_file_descriptor,
00387                             fsal_off_t    offset,
00388                             fsal_size_t   size ) ;