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 POSIX_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 #endif
00057 
00061 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00062                                         fs_common_initinfo_t * fs_common_info,
00063                                         xfsfs_specific_initinfo_t * fs_specific_info);
00064 
00068 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00069 
00073 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00074 
00078 void TakeTokenFSCall();
00079 void ReleaseTokenFSCall();
00080 
00084 fsal_status_t fsal_internal_handle2fd(fsal_op_context_t * p_context,
00085                                       fsal_handle_t * phandle, int *pfd, int oflags);
00086 
00087 fsal_status_t fsal_internal_fd2handle(fsal_op_context_t * p_context,
00088                                       int fd, fsal_handle_t * phandle);
00089 
00093 fsal_status_t fsal_internal_Handle2FidPath(xfsfsal_op_context_t * p_context,    /* IN */
00094                                            xfsfsal_handle_t * p_handle, /* IN */
00095                                            fsal_path_t * p_fsalpath /* OUT */ );
00096 
00100 fsal_status_t fsal_internal_Path2Handle(xfsfsal_op_context_t * p_context,       /* IN */
00101                                         fsal_path_t * p_fsalpath,       /* IN */
00102                                         xfsfsal_handle_t * p_handle /* OUT */ );
00103 
00104 fsal_status_t fsal_internal_inum2handle(fsal_op_context_t * p_context,       /* IN */
00105                                         ino_t inum,     /* IN */
00106                                         fsal_handle_t * phandle);    /* OUT */
00107 
00108 fsal_status_t fsal_internal_setattrs_symlink(fsal_handle_t * p_filehandle,   /* IN */
00109                                              fsal_op_context_t * p_context,  /* IN */
00110                                              fsal_attrib_list_t * p_attrib_set, /* IN */
00111                                              fsal_attrib_list_t * p_object_attributes); /* [ IN/OUT ] */
00112 
00113 int fsal_internal_path2fsname(char *rpath, char *fs_spec);
00114 
00115 int fsal_internal_get_bulkstat_by_inode(int fd, xfs_ino_t * p_ino, xfs_bstat_t * pxfs_bstat) ;
00116 
00117 
00118 fsal_status_t XFSFSAL_access(fsal_handle_t * p_object_handle,        /* IN */
00119                              fsal_op_context_t * p_context,  /* IN */
00120                              fsal_accessflags_t access_type,    /* IN */
00121                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00122 
00123 fsal_status_t XFSFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */
00124                                fsal_op_context_t * p_context,        /* IN */
00125                                fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00126 
00127 fsal_status_t XFSFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */
00128                                fsal_op_context_t * p_context,        /* IN */
00129                                fsal_attrib_list_t * p_attrib_set,       /* IN */
00130                                fsal_attrib_list_t *
00131                                p_object_attributes /* [ IN/OUT ] */ );
00132 
00133 fsal_status_t XFSFSAL_BuildExportContext(fsal_export_context_t * p_export_context,   /* OUT */
00134                                          fsal_path_t * p_export_path,   /* IN */
00135                                          char *fs_specific_options /* IN */ );
00136 
00137 fsal_status_t XFSFSAL_create(fsal_handle_t * p_parent_directory_handle,      /* IN */
00138                              fsal_name_t * p_filename,  /* IN */
00139                              fsal_op_context_t * p_context,  /* IN */
00140                              fsal_accessmode_t accessmode,      /* IN */
00141                              fsal_handle_t * p_object_handle,        /* OUT */
00142                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00143 
00144 fsal_status_t XFSFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,       /* IN */
00145                             fsal_name_t * p_dirname,    /* IN */
00146                             fsal_op_context_t * p_context,   /* IN */
00147                             fsal_accessmode_t accessmode,       /* IN */
00148                             fsal_handle_t * p_object_handle, /* OUT */
00149                             fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00150 
00151 fsal_status_t XFSFSAL_link(fsal_handle_t * p_target_handle,  /* IN */
00152                            fsal_handle_t * p_dir_handle,     /* IN */
00153                            fsal_name_t * p_link_name,   /* IN */
00154                            fsal_op_context_t * p_context,    /* IN */
00155                            fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00156 
00157 fsal_status_t XFSFSAL_mknode(fsal_handle_t * parentdir_handle,       /* IN */
00158                              fsal_name_t * p_node_name, /* IN */
00159                              fsal_op_context_t * p_context,  /* IN */
00160                              fsal_accessmode_t accessmode,      /* IN */
00161                              fsal_nodetype_t nodetype,  /* IN */
00162                              fsal_dev_t * dev,  /* IN */
00163                              fsal_handle_t * p_object_handle,        /* OUT (handle to the created node) */
00164                              fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00165 
00166 fsal_status_t XFSFSAL_opendir(fsal_handle_t * p_dir_handle,  /* IN */
00167                               fsal_op_context_t * p_context, /* IN */
00168                               fsal_dir_t * p_dir_descriptor, /* OUT */
00169                               fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00170 
00171 fsal_status_t XFSFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */
00172                               fsal_cookie_t start_position,  /* IN */
00173                               fsal_attrib_mask_t get_attr_mask, /* IN */
00174                               fsal_mdsize_t buffersize, /* IN */
00175                               fsal_dirent_t * p_pdirent,        /* OUT */
00176                               fsal_cookie_t * p_end_position,        /* OUT */
00177                               fsal_count_t * p_nb_entries,      /* OUT */
00178                               fsal_boolean_t * p_end_of_dir /* OUT */ );
00179 
00180 fsal_status_t XFSFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00181 
00182 fsal_status_t XFSFSAL_open_by_name(fsal_handle_t * dirhandle,        /* IN */
00183                                    fsal_name_t * filename,      /* IN */
00184                                    fsal_op_context_t * p_context,    /* IN */
00185                                    fsal_openflags_t openflags,  /* IN */
00186                                    fsal_file_t * file_descriptor,    /* OUT */
00187                                    fsal_attrib_list_t *
00188                                    file_attributes /* [ IN/OUT ] */ );
00189 
00190 fsal_status_t XFSFSAL_open(fsal_handle_t * p_filehandle,     /* IN */
00191                            fsal_op_context_t * p_context,    /* IN */
00192                            fsal_openflags_t openflags,  /* IN */
00193                            fsal_file_t * p_file_descriptor,  /* OUT */
00194                            fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00195 
00196 fsal_status_t XFSFSAL_read(fsal_file_t * p_file_descriptor,  /* IN */
00197                            fsal_seek_t * p_seek_descriptor,     /* [IN] */
00198                            fsal_size_t buffer_size,     /* IN */
00199                            caddr_t buffer,      /* OUT */
00200                            fsal_size_t * p_read_amount, /* OUT */
00201                            fsal_boolean_t * p_end_of_file /* OUT */ );
00202 
00203 fsal_status_t XFSFSAL_write(fsal_file_t * p_file_descriptor, /* IN */
00204                             fsal_op_context_t * p_context,   /* IN */
00205                             fsal_seek_t * p_seek_descriptor,    /* IN */
00206                             fsal_size_t buffer_size,    /* IN */
00207                             caddr_t buffer,     /* IN */
00208                             fsal_size_t * p_write_amount /* OUT */ );
00209 
00210 fsal_status_t XFSFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00211 
00212 fsal_status_t XFSFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,   /* IN */
00213                                      fsal_op_context_t * p_context,  /* IN */
00214                                      fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00215 
00216 fsal_status_t XFSFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00217 
00218 fsal_status_t XFSFSAL_test_access(fsal_op_context_t * p_context,     /* IN */
00219                                   fsal_accessflags_t access_type,       /* IN */
00220                                   fsal_attrib_list_t * p_object_attributes /* IN */ );
00221 
00222 fsal_status_t XFSFSAL_setattr_access(fsal_op_context_t * p_context,  /* IN */
00223                                      fsal_attrib_list_t * candidate_attributes, /* IN */
00224                                      fsal_attrib_list_t * object_attributes /* IN */ );
00225 
00226 fsal_status_t XFSFSAL_rename_access(fsal_op_context_t * pcontext,    /* IN */
00227                                     fsal_attrib_list_t * pattrsrc,      /* IN */
00228                                     fsal_attrib_list_t * pattrdest) /* IN */ ;
00229 
00230 fsal_status_t XFSFSAL_create_access(fsal_op_context_t * pcontext,    /* IN */
00231                                     fsal_attrib_list_t * pattr) /* IN */ ;
00232 
00233 fsal_status_t XFSFSAL_unlink_access(fsal_op_context_t * pcontext,    /* IN */
00234                                     fsal_attrib_list_t * pattr) /* IN */ ;
00235 
00236 fsal_status_t XFSFSAL_link_access(fsal_op_context_t * pcontext,      /* IN */
00237                                   fsal_attrib_list_t * pattr) /* IN */ ;
00238 
00239 fsal_status_t XFSFSAL_merge_attrs(fsal_attrib_list_t * pinit_attr,
00240                                   fsal_attrib_list_t * pnew_attr,
00241                                   fsal_attrib_list_t * presult_attr);
00242 
00243 fsal_status_t XFSFSAL_lookup(fsal_handle_t * p_parent_directory_handle,      /* IN */
00244                              fsal_name_t * p_filename,  /* IN */
00245                              fsal_op_context_t * p_context,  /* IN */
00246                              fsal_handle_t * p_object_handle,        /* OUT */
00247                              fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00248 
00249 fsal_status_t XFSFSAL_lookupPath(fsal_path_t * p_path,  /* IN */
00250                                  fsal_op_context_t * p_context,      /* IN */
00251                                  fsal_handle_t * object_handle,      /* OUT */
00252                                  fsal_attrib_list_t *
00253                                  p_object_attributes /* [ IN/OUT ] */ );
00254 
00255 fsal_status_t XFSFSAL_lookupJunction(fsal_handle_t * p_junction_handle,      /* IN */
00256                                      fsal_op_context_t * p_context,  /* IN */
00257                                      fsal_handle_t * p_fsoot_handle, /* OUT */
00258                                      fsal_attrib_list_t *
00259                                      p_fsroot_attributes /* [ IN/OUT ] */ );
00260 
00261 fsal_status_t XFSFSAL_set_quota(fsal_path_t * pfsal_path,       /* IN */
00262                                 int quota_type, /* IN */
00263                                 fsal_uid_t fsal_uid,    /* IN */
00264                                 fsal_quota_t * pquota,  /* IN */
00265                                 fsal_quota_t * presquota);      /* OUT */
00266 
00267 fsal_status_t XFSFSAL_get_quota(fsal_path_t * pfsal_path,       /* IN */
00268                                 int quota_type, /* IN */
00269                                 fsal_uid_t fsal_uid,    /* IN */
00270                                 fsal_quota_t * pquota); /* OUT */
00271 
00272 fsal_status_t XFSFSAL_check_quota( char * path,  /* IN */
00273                                    fsal_quota_type_t   quota_type,
00274                                    fsal_uid_t fsal_uid);      /* IN */
00275 
00276 fsal_status_t XFSFSAL_rcp(fsal_handle_t * filehandle,        /* IN */
00277                           fsal_op_context_t * p_context,     /* IN */
00278                           fsal_path_t * p_local_path,   /* IN */
00279                           fsal_rcpflag_t transfer_opt /* IN */ );
00280 
00281 fsal_status_t XFSFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */
00282                              fsal_name_t * p_old_name,  /* IN */
00283                              fsal_handle_t * p_new_parentdir_handle, /* IN */
00284                              fsal_name_t * p_new_name,  /* IN */
00285                              fsal_op_context_t * p_context,  /* IN */
00286                              fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */
00287                              fsal_attrib_list_t * p_tgt_dir_attributes /* [ IN/OUT ] */ );
00288 
00289 void XFSFSAL_get_stats(fsal_statistics_t * stats,       /* OUT */
00290                        fsal_boolean_t reset /* IN */ );
00291 
00292 fsal_status_t XFSFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */
00293                                fsal_op_context_t * p_context,        /* IN */
00294                                fsal_path_t * p_link_content,    /* OUT */
00295                                fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00296 
00297 fsal_status_t XFSFSAL_symlink(fsal_handle_t * p_parent_directory_handle,     /* IN */
00298                               fsal_name_t * p_linkname, /* IN */
00299                               fsal_path_t * p_linkcontent,      /* IN */
00300                               fsal_op_context_t * p_context, /* IN */
00301                               fsal_accessmode_t accessmode,     /* IN (ignored) */
00302                               fsal_handle_t * p_link_handle, /* OUT */
00303                               fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00304 
00305 int XFSFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00306                       fsal_status_t * status);
00307 
00308 unsigned int XFSFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00309                                          unsigned int cookie,
00310                                          unsigned int alphabet_len,
00311                                          unsigned int index_size);
00312 
00313 unsigned int XFSFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, unsigned int cookie);
00314 
00315 fsal_status_t XFSFSAL_DigestHandle(fsal_export_context_t * p_expcontext,     /* IN */
00316                                    fsal_digesttype_t output_type,       /* IN */
00317                                    fsal_handle_t * p_in_fsal_handle, /* IN */
00318                                    struct fsal_handle_desc * fh_desc /* IN/OUT */ );
00319 
00320 fsal_status_t XFSFSAL_ExpandHandle(fsal_export_context_t * p_expcontext,     /* IN */
00321                                    fsal_digesttype_t in_type,   /* IN */
00322                                    struct fsal_handle_desc * fh_desc /* IN/OUT */);
00323 
00324 fsal_status_t XFSFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter);
00325 
00326 fsal_status_t XFSFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00327                                                            fsal_parameter_t *
00328                                                            out_parameter);
00329 
00330 fsal_status_t XFSFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */
00331                                fsal_op_context_t * p_context,        /* IN */
00332                                fsal_size_t length,      /* IN */
00333                                fsal_file_t * file_descriptor,        /* Unused in this FSAL */
00334                                fsal_attrib_list_t *
00335                                p_object_attributes /* [ IN/OUT ] */ );
00336 
00337 fsal_status_t XFSFSAL_unlink(fsal_handle_t * p_parent_directory_handle,      /* IN */
00338                              fsal_name_t * p_object_name,       /* IN */
00339                              fsal_op_context_t * p_context,  /* IN */
00340                              fsal_attrib_list_t *
00341                              p_parent_directory_attributes /* [IN/OUT ] */ );
00342 
00343 char *XFSFSAL_GetFSName();
00344 
00345 fsal_status_t XFSFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,  /* IN */
00346                                     fsal_op_context_t * p_context,   /* IN */
00347                                     unsigned int xattr_id,      /* IN */
00348                                     fsal_attrib_list_t * p_attrs);
00349 
00350 fsal_status_t XFSFSAL_ListXAttrs(fsal_handle_t * p_objecthandle,     /* IN */
00351                                  unsigned int cookie,   /* IN */
00352                                  fsal_op_context_t * p_context,      /* IN */
00353                                  fsal_xattrent_t * xattrs_tab,  /* IN/OUT */
00354                                  unsigned int xattrs_tabsize,   /* IN */
00355                                  unsigned int *p_nb_returned,   /* OUT */
00356                                  int *end_of_list /* OUT */ );
00357 
00358 fsal_status_t XFSFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00359                                         unsigned int xattr_id,  /* IN */
00360                                         fsal_op_context_t * p_context,       /* IN */
00361                                         caddr_t buffer_addr,    /* IN/OUT */
00362                                         size_t buffer_size,     /* IN */
00363                                         size_t * p_output_size /* OUT */ );
00364 
00365 fsal_status_t XFSFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,       /* IN */
00366                                        const fsal_name_t * xattr_name,  /* IN */
00367                                        fsal_op_context_t * p_context,        /* IN */
00368                                        unsigned int *pxattr_id /* OUT */ );
00369 
00370 fsal_status_t XFSFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,    /* IN */
00371                                           const fsal_name_t * xattr_name,       /* IN */
00372                                           fsal_op_context_t * p_context,     /* IN */
00373                                           caddr_t buffer_addr,  /* IN/OUT */
00374                                           size_t buffer_size,   /* IN */
00375                                           size_t * p_output_size /* OUT */ );
00376 
00377 fsal_status_t XFSFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,  /* IN */
00378                                     const fsal_name_t * xattr_name,     /* IN */
00379                                     fsal_op_context_t * p_context,   /* IN */
00380                                     caddr_t buffer_addr,        /* IN */
00381                                     size_t buffer_size, /* IN */
00382                                     int create /* IN */ );
00383 
00384 fsal_status_t XFSFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,      /* IN */
00385                                         unsigned int xattr_id,  /* IN */
00386                                         fsal_op_context_t * p_context,       /* IN */
00387                                         caddr_t buffer_addr,    /* IN */
00388                                         size_t buffer_size /* IN */ );
00389 
00390 fsal_status_t XFSFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,        /* IN */
00391                                       fsal_op_context_t * p_context, /* IN */
00392                                       unsigned int xattr_id) /* IN */ ;
00393 
00394 fsal_status_t XFSFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,      /* IN */
00395                                         fsal_op_context_t * p_context,       /* IN */
00396                                         const fsal_name_t * xattr_name) /* IN */ ;
00397 
00398 int XFSFSAL_GetXattrOffsetSetable( void ) ;
00399 
00400 unsigned int XFSFSAL_GetFileno(fsal_file_t * pfile);
00401 
00402 fsal_status_t XFSFSAL_getextattrs(fsal_handle_t * p_filehandle, /* IN */
00403                                   fsal_op_context_t * p_context,        /* IN */
00404                                   fsal_extattrib_list_t * p_object_attributes /* OUT */) ;
00405 
00406 fsal_status_t XFSFSAL_commit( fsal_file_t * p_file_descriptor,
00407                             fsal_off_t    offset,
00408                             fsal_size_t   size ) ;
00409 
00410 
00411 fsal_status_t xfsfsal_stat_by_name(fsal_op_context_t * context,
00412                                    int atfd,
00413                                    const char *name,
00414                                    fsal_handle_t *handle,
00415                                    fsal_attrib_list_t * attributes);
00416 
00417