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