nfs-ganesha 1.4
|
00001 00012 #include "fsal.h" 00013 #include "FSAL/common_functions.h" 00014 00015 /* the following variables must not be defined in fsal_internal.c */ 00016 #ifndef FSAL_INTERNAL_C 00017 00018 /* static filesystem info. 00019 * read access only. 00020 */ 00021 extern fsal_staticfsinfo_t global_fs_info; 00022 00023 /* filesystem operations */ 00024 extern struct ganefuse_operations *p_fs_ops; 00025 00026 /* filesystem opaque data */ 00027 extern void *fs_user_data; 00028 extern void *fs_private_data; 00029 00030 #endif 00031 00032 struct ganefuse 00033 { 00034 /* unused for now */ 00035 void *reserved; 00036 }; 00037 00041 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, 00042 fs_common_initinfo_t * fs_common_info); 00043 00047 void fsal_increment_nbcall(int function_index, fsal_status_t status); 00048 00052 void fsal_internal_getstats(fsal_statistics_t * output_stats); 00053 00057 void TakeTokenFSCall(); 00058 void ReleaseTokenFSCall(); 00059 00067 fsal_boolean_t fsal_do_log(fsal_status_t status); 00068 00075 int fsal_set_thread_context(fsal_op_context_t * p_ctx); 00076 00080 fsal_op_context_t *fsal_get_thread_context(); 00081 00082 /* used for generating inode numbers for FS which don't have some */ 00083 static inline unsigned long hash_peer(ino_t parent_inode, char *name) 00084 { 00085 unsigned long hash; 00086 char *curr; 00087 00088 hash = 1; 00089 00090 for(curr = name; *curr != '\0'; curr++) 00091 hash = ((hash << 5) - hash + (unsigned long)(*curr)); 00092 00093 return (hash ^ (unsigned long)parent_inode); 00094 } 00095 00096 /* All the call to FSAL to be wrapped */ 00097 fsal_status_t FUSEFSAL_access(fsal_handle_t * p_object_handle, /* IN */ 00098 fsal_op_context_t * p_context, /* IN */ 00099 fsal_accessflags_t access_type, /* IN */ 00100 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00101 00102 fsal_status_t FUSEFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */ 00103 fsal_op_context_t * p_context, /* IN */ 00104 fsal_attrib_list_t * p_object_attributes /* IN/OUT */ ); 00105 00106 fsal_status_t FUSEFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */ 00107 fsal_op_context_t * p_context, /* IN */ 00108 fsal_attrib_list_t * p_attrib_set, /* IN */ 00109 fsal_attrib_list_t * 00110 p_object_attributes /* [ IN/OUT ] */ ); 00111 00112 fsal_status_t FUSEFSAL_BuildExportContext(fsal_export_context_t * p_export_context, /* OUT */ 00113 fsal_path_t * p_export_path, /* IN */ 00114 char *fs_specific_options /* IN */ ); 00115 00116 fsal_status_t FUSEFSAL_InitClientContext(fsal_op_context_t * p_thr_context); 00117 00118 fsal_status_t FUSEFSAL_GetClientContext(fsal_op_context_t * p_thr_context, /* IN/OUT */ 00119 fsal_export_context_t * p_export_context, /* IN */ 00120 fsal_uid_t uid, /* IN */ 00121 fsal_gid_t gid, /* IN */ 00122 fsal_gid_t * alt_groups, /* IN */ 00123 fsal_count_t nb_alt_groups /* IN */ ); 00124 00125 fsal_status_t FUSEFSAL_create(fsal_handle_t * p_parent_directory_handle, /* IN */ 00126 fsal_name_t * p_filename, /* IN */ 00127 fsal_op_context_t * p_context, /* IN */ 00128 fsal_accessmode_t accessmode, /* IN */ 00129 fsal_handle_t * p_object_handle, /* OUT */ 00130 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00131 00132 fsal_status_t FUSEFSAL_mkdir(fsal_handle_t * p_parent_directory_handle, /* IN */ 00133 fsal_name_t * p_dirname, /* IN */ 00134 fsal_op_context_t * p_context, /* IN */ 00135 fsal_accessmode_t accessmode, /* IN */ 00136 fsal_handle_t * p_object_handle, /* OUT */ 00137 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00138 00139 fsal_status_t FUSEFSAL_link(fsal_handle_t * p_target_handle, /* IN */ 00140 fsal_handle_t * p_dir_handle, /* IN */ 00141 fsal_name_t * p_link_name, /* IN */ 00142 fsal_op_context_t * p_context, /* IN */ 00143 fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ ); 00144 00145 fsal_status_t FUSEFSAL_mknode(fsal_handle_t * parentdir_handle, /* IN */ 00146 fsal_name_t * p_node_name, /* IN */ 00147 fsal_op_context_t * p_context, /* IN */ 00148 fsal_accessmode_t accessmode, /* IN */ 00149 fsal_nodetype_t nodetype, /* IN */ 00150 fsal_dev_t * dev, /* IN */ 00151 fsal_handle_t * p_object_handle, /* OUT (handle to the created node) */ 00152 fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ ); 00153 00154 fsal_status_t FUSEFSAL_opendir(fsal_handle_t * p_dir_handle, /* IN */ 00155 fsal_op_context_t * p_context, /* IN */ 00156 fsal_dir_t * p_dir_descriptor, /* OUT */ 00157 fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ ); 00158 00159 fsal_status_t FUSEFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */ 00160 fsal_cookie_t start_position, /* IN */ 00161 fsal_attrib_mask_t get_attr_mask, /* IN */ 00162 fsal_mdsize_t buffersize, /* IN */ 00163 fsal_dirent_t * p_pdirent, /* OUT */ 00164 fsal_cookie_t * p_end_position, /* OUT */ 00165 fsal_count_t * p_nb_entries, /* OUT */ 00166 fsal_boolean_t * p_end_of_dir /* OUT */ ); 00167 00168 fsal_status_t FUSEFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ ); 00169 00170 fsal_status_t FUSEFSAL_open_by_name(fsal_handle_t * dirhandle, /* IN */ 00171 fsal_name_t * filename, /* IN */ 00172 fsal_op_context_t * p_context, /* IN */ 00173 fsal_openflags_t openflags, /* IN */ 00174 fsal_file_t * file_descriptor, /* OUT */ 00175 fsal_attrib_list_t * 00176 file_attributes /* [ IN/OUT ] */ ); 00177 00178 fsal_status_t FUSEFSAL_open(fsal_handle_t * p_filehandle, /* IN */ 00179 fsal_op_context_t * p_context, /* IN */ 00180 fsal_openflags_t openflags, /* IN */ 00181 fsal_file_t * p_file_descriptor, /* OUT */ 00182 fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ ); 00183 00184 fsal_status_t FUSEFSAL_read(fsal_file_t * p_file_descriptor, /* IN */ 00185 fsal_seek_t * p_seek_descriptor, /* [IN] */ 00186 fsal_size_t buffer_size, /* IN */ 00187 caddr_t buffer, /* OUT */ 00188 fsal_size_t * p_read_amount, /* OUT */ 00189 fsal_boolean_t * p_end_of_file /* OUT */ ); 00190 00191 fsal_status_t FUSEFSAL_write(fsal_file_t * p_file_descriptor, /* IN */ 00192 fsal_op_context_t * p_context, /* IN */ 00193 fsal_seek_t * p_seek_descriptor, /* IN */ 00194 fsal_size_t buffer_size, /* IN */ 00195 caddr_t buffer, /* IN */ 00196 fsal_size_t * p_write_amount /* OUT */ ); 00197 00198 fsal_status_t FUSEFSAL_close(fsal_file_t * p_file_descriptor /* IN */ ); 00199 00200 fsal_status_t FUSEFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle, /* IN */ 00201 fsal_op_context_t * p_context, /* IN */ 00202 fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ ); 00203 00204 fsal_status_t FUSEFSAL_Init(fsal_parameter_t * init_info /* IN */ ); 00205 00206 fsal_status_t FUSEFSAL_test_access(fsal_op_context_t * p_context, /* IN */ 00207 fsal_accessflags_t access_type, /* IN */ 00208 fsal_attrib_list_t * p_object_attributes /* IN */ ); 00209 00210 fsal_status_t FUSEFSAL_lookup(fsal_handle_t * p_parent_directory_handle, /* IN */ 00211 fsal_name_t * p_filename, /* IN */ 00212 fsal_op_context_t * p_context, /* IN */ 00213 fsal_handle_t * p_object_handle, /* OUT */ 00214 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00215 00216 fsal_status_t FUSEFSAL_lookupPath(fsal_path_t * p_path, /* IN */ 00217 fsal_op_context_t * p_context, /* IN */ 00218 fsal_handle_t * object_handle, /* OUT */ 00219 fsal_attrib_list_t * 00220 p_object_attributes /* [ IN/OUT ] */ ); 00221 00222 fsal_status_t FUSEFSAL_lookupJunction(fsal_handle_t * p_junction_handle, /* IN */ 00223 fsal_op_context_t * p_context, /* IN */ 00224 fsal_handle_t * p_fsoot_handle, /* OUT */ 00225 fsal_attrib_list_t * 00226 p_fsroot_attributes /* [ IN/OUT ] */ ); 00227 00228 fsal_status_t FUSEFSAL_rcp(fsal_handle_t * filehandle, /* IN */ 00229 fsal_op_context_t * p_context, /* IN */ 00230 fsal_path_t * p_local_path, /* IN */ 00231 fsal_rcpflag_t transfer_opt /* IN */ ); 00232 00233 fsal_status_t FUSEFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */ 00234 fsal_name_t * p_old_name, /* IN */ 00235 fsal_handle_t * p_new_parentdir_handle, /* IN */ 00236 fsal_name_t * p_new_name, /* IN */ 00237 fsal_op_context_t * p_context, /* IN */ 00238 fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */ 00239 fsal_attrib_list_t * 00240 p_tgt_dir_attributes /* [ IN/OUT ] */ ); 00241 00242 void FUSEFSAL_get_stats(fsal_statistics_t * stats, /* OUT */ 00243 fsal_boolean_t reset /* IN */ ); 00244 00245 fsal_status_t FUSEFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */ 00246 fsal_op_context_t * p_context, /* IN */ 00247 fsal_path_t * p_link_content, /* OUT */ 00248 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ ); 00249 00250 fsal_status_t FUSEFSAL_symlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00251 fsal_name_t * p_linkname, /* IN */ 00252 fsal_path_t * p_linkcontent, /* IN */ 00253 fsal_op_context_t * p_context, /* IN */ 00254 fsal_accessmode_t accessmode, /* IN (ignored) */ 00255 fsal_handle_t * p_link_handle, /* OUT */ 00256 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ ); 00257 00258 int FUSEFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2, 00259 fsal_status_t * status); 00260 00261 unsigned int FUSEFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle, 00262 unsigned int cookie, 00263 unsigned int alphabet_len, 00264 unsigned int index_size); 00265 00266 unsigned int FUSEFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, 00267 unsigned int cookie); 00268 00269 fsal_status_t FUSEFSAL_DigestHandle(fsal_export_context_t * exp_context, /* IN */ 00270 fsal_digesttype_t output_type, /* IN */ 00271 fsal_handle_t *in_fsal_handle, /* IN */ 00272 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00273 00274 fsal_status_t FUSEFSAL_ExpandHandle(fsal_export_context_t * pexpcontext, /* IN not used */ 00275 fsal_digesttype_t in_type, /* IN */ 00276 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00277 00278 fsal_status_t FUSEFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter); 00279 00280 fsal_status_t FUSEFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config, 00281 fsal_parameter_t * 00282 out_parameter); 00283 00284 fsal_status_t FUSEFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */ 00285 fsal_op_context_t * p_context, /* IN */ 00286 fsal_size_t length, /* IN */ 00287 fsal_file_t * file_descriptor, /* Unused in this FSAL */ 00288 fsal_attrib_list_t * 00289 p_object_attributes /* [ IN/OUT ] */ ); 00290 00291 fsal_status_t FUSEFSAL_unlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00292 fsal_name_t * p_object_name, /* IN */ 00293 fsal_op_context_t * p_context, /* IN */ 00294 fsal_attrib_list_t * 00295 p_parent_directory_attributes /* [IN/OUT ] */ ); 00296 00297 char *FUSEFSAL_GetFSName(); 00298 00299 fsal_status_t FUSEFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00300 fsal_op_context_t * p_context, /* IN */ 00301 unsigned int xattr_id, /* IN */ 00302 fsal_attrib_list_t * p_attrs); 00303 00304 fsal_status_t FUSEFSAL_ListXAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00305 unsigned int cookie, /* IN */ 00306 fsal_op_context_t * p_context, /* IN */ 00307 fsal_xattrent_t * xattrs_tab, /* IN/OUT */ 00308 unsigned int xattrs_tabsize, /* IN */ 00309 unsigned int *p_nb_returned, /* OUT */ 00310 int *end_of_list /* OUT */ ); 00311 00312 fsal_status_t FUSEFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00313 unsigned int xattr_id, /* IN */ 00314 fsal_op_context_t * p_context, /* IN */ 00315 caddr_t buffer_addr, /* IN/OUT */ 00316 size_t buffer_size, /* IN */ 00317 size_t * p_output_size /* OUT */ ); 00318 00319 fsal_status_t FUSEFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle, /* IN */ 00320 const fsal_name_t * xattr_name, /* IN */ 00321 fsal_op_context_t * p_context, /* IN */ 00322 unsigned int *pxattr_id /* OUT */ ); 00323 00324 fsal_status_t FUSEFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle, /* IN */ 00325 const fsal_name_t * xattr_name, /* IN */ 00326 fsal_op_context_t * p_context, /* IN */ 00327 caddr_t buffer_addr, /* IN/OUT */ 00328 size_t buffer_size, /* IN */ 00329 size_t * p_output_size /* OUT */ ); 00330 00331 fsal_status_t FUSEFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle, /* IN */ 00332 const fsal_name_t * xattr_name, /* IN */ 00333 fsal_op_context_t * p_context, /* IN */ 00334 caddr_t buffer_addr, /* IN */ 00335 size_t buffer_size, /* IN */ 00336 int create /* IN */ ); 00337 00338 fsal_status_t FUSEFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00339 unsigned int xattr_id, /* IN */ 00340 fsal_op_context_t * p_context, /* IN */ 00341 caddr_t buffer_addr, /* IN */ 00342 size_t buffer_size /* IN */ ); 00343 00344 fsal_status_t FUSEFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle, /* IN */ 00345 fsal_op_context_t * p_context, /* IN */ 00346 unsigned int xattr_id) /* IN */ ; 00347 00348 fsal_status_t FUSEFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle, /* IN */ 00349 fsal_op_context_t * p_context, /* IN */ 00350 const fsal_name_t * xattr_name) /* IN */ ; 00351 00352 int FUSEFSAL_GetXattrOffsetSetable( void ) ; 00353 00354 unsigned int FUSEFSAL_GetFileno(fsal_file_t * pfile); 00355 00356 fsal_status_t FUSEFSAL_commit( fsal_file_t * p_file_descriptor, 00357 fsal_off_t offset, 00358 fsal_size_t size ) ; 00359