nfs-ganesha 1.4
|
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);