nfs-ganesha 1.4

mfsl_timer.c

Go to the documentation of this file.
00001 /*
00002  *
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 
00036 #include "config.h"
00037 
00038 /* fsal_types contains constants and type definitions for FSAL */
00039 #include "fsal_types.h"
00040 #include "fsal.h"
00041 #include "mfsl_types.h"
00042 #include "mfsl.h"
00043 #include "common_utils.h"
00044 
00045 #ifndef _USE_SWIG
00046 /******************************************************
00047  *            Attribute mask management.
00048  ******************************************************/
00049 
00050 static struct timeval mfsl_timer_diff( struct timeval * time_to, struct timeval * time_from ) 
00051 {
00052 
00053   struct timeval result;
00054 
00055   if(time_to->tv_usec < time_from->tv_usec)
00056     {
00057       result.tv_sec = time_to->tv_sec - time_from->tv_sec - 1;
00058       result.tv_usec = 1000000 + time_to->tv_usec - time_from->tv_usec;
00059     }
00060   else
00061     {
00062       result.tv_sec = time_to->tv_sec - time_from->tv_sec;
00063       result.tv_usec = time_to->tv_usec - time_from->tv_usec;
00064     }
00065 
00066   return result;
00067 }
00068 
00076 fsal_status_t MFSL_SetDefault_parameter(mfsl_parameter_t * out_parameter)
00077 {
00078   fsal_status_t fsal_status;
00079 
00080   fsal_status.major = ERR_FSAL_NO_ERROR;
00081   fsal_status.minor = 0;
00082 
00083   return fsal_status;
00084 }                               /* MFSL_SetDefault_parameter */
00085 
00104 fsal_status_t MFSL_load_parameter_from_conf(config_file_t in_config,
00105                                             mfsl_parameter_t * out_parameter)
00106 {
00107   fsal_status_t fsal_status;
00108 
00109   fsal_status.major = ERR_FSAL_NO_ERROR;
00110   fsal_status.minor = 0;
00111 
00112   return fsal_status;
00113 }
00114 
00119 fsal_status_t MFSL_Init(mfsl_parameter_t * init_info    /* IN */
00120     )
00121 {
00122   fsal_status_t fsal_status;
00123 
00124   fsal_status.major = ERR_FSAL_NO_ERROR;
00125   fsal_status.minor = 0;
00126 
00127   return fsal_status;
00128 }
00129 
00130 fsal_status_t MFSL_GetContext(mfsl_context_t * pcontext,
00131                               fsal_op_context_t * pfsal_context)
00132 {
00133   fsal_status_t fsal_status;
00134 
00135   fsal_status.major = ERR_FSAL_NO_ERROR;
00136   fsal_status.minor = 0;
00137 
00138   return fsal_status;
00139 }
00140 
00141 fsal_status_t MFSL_RefreshContext(mfsl_context_t * pcontext,
00142                                   fsal_op_context_t * pfsal_context)
00143 {
00144   fsal_status_t fsal_status;
00145 
00146   fsal_status.major = ERR_FSAL_NO_ERROR;
00147   fsal_status.minor = 0;
00148 
00149   return fsal_status;
00150 }
00151 
00152 #endif                          /* ! _USE_SWIG */
00153 
00154 /******************************************************
00155  *              Common Filesystem calls.
00156  ******************************************************/
00157 
00158 fsal_status_t MFSL_lookup(mfsl_object_t * parent_directory_handle,      /* IN */
00159                           fsal_name_t * p_filename,     /* IN */
00160                           fsal_op_context_t * p_context,        /* IN */
00161                           mfsl_context_t * p_mfsl_context,      /* IN */
00162                           mfsl_object_t * object_handle,        /* OUT */
00163                           fsal_attrib_list_t * object_attributes,        /* [ IN/OUT ] */
00164                           void * pextra
00165     )
00166 {
00167   struct timeval start, stop, delta ;
00168   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00169  
00170   gettimeofday( &start, 0 ) ; 
00171   fsal_status = FSAL_lookup(&parent_directory_handle->handle,
00172                      p_filename, p_context, &object_handle->handle, object_attributes);
00173   gettimeofday( &stop, 0 ) ; 
00174   delta = mfsl_timer_diff( &stop, &start ) ;
00175   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00176   return fsal_status ;
00177 }                               /* MFSL_lookup */
00178 
00179 fsal_status_t MFSL_lookupPath(fsal_path_t * p_path,     /* IN */
00180                               fsal_op_context_t * p_context,    /* IN */
00181                               mfsl_context_t * p_mfsl_context,  /* IN */
00182                               mfsl_object_t * object_handle,    /* OUT */
00183                               fsal_attrib_list_t * object_attributes    /* [ IN/OUT ] */
00184     )
00185 {
00186   struct timeval start, stop, delta ;
00187   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00188   
00189   gettimeofday( &start, 0 ) ; 
00190   fsal_status = FSAL_lookupPath(p_path, p_context, &object_handle->handle, object_attributes);
00191   gettimeofday( &stop, 0 ) ; 
00192   delta = mfsl_timer_diff( &stop, &start ) ;
00193   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00194   return fsal_status ;
00195 }                               /* MFSL_lookupPath */
00196 
00197 fsal_status_t MFSL_lookupJunction(mfsl_object_t * p_junction_handle,    /* IN */
00198                                   fsal_op_context_t * p_context,        /* IN */
00199                                   mfsl_context_t * p_mfsl_context,      /* IN */
00200                                   mfsl_object_t * p_fsoot_handle,       /* OUT */
00201                                   fsal_attrib_list_t * p_fsroot_attributes      /* [ IN/OUT ] */
00202     )
00203 {
00204   struct timeval start, stop, delta ;
00205   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00206   
00207   gettimeofday( &start, 0 ) ; 
00208   fsal_status = FSAL_lookupJunction(&p_junction_handle->handle,
00209                              p_context, &p_fsoot_handle->handle, p_fsroot_attributes);
00210   gettimeofday( &stop, 0 ) ; 
00211   delta = mfsl_timer_diff( &stop, &start ) ;
00212   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00213   return fsal_status ;
00214 }                               /* MFSL_lookupJunction */
00215 
00216 fsal_status_t MFSL_access(mfsl_object_t * object_handle,        /* IN */
00217                           fsal_op_context_t * p_context,        /* IN */
00218                           mfsl_context_t * p_mfsl_context,      /* IN */
00219                           fsal_accessflags_t access_type,       /* IN */
00220                           fsal_attrib_list_t * object_attributes,        /* [ IN/OUT ] */
00221                           void * pextra
00222     )
00223 {
00224   struct timeval start, stop, delta ;
00225   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00226   
00227   gettimeofday( &start, 0 ) ; 
00228   fsal_status = FSAL_access(&object_handle->handle, p_context, access_type, object_attributes);
00229   gettimeofday( &stop, 0 ) ; 
00230   delta = mfsl_timer_diff( &stop, &start ) ;
00231   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00232   return fsal_status ;
00233 }                               /* MFSL_access */
00234 
00235 fsal_status_t MFSL_create(mfsl_object_t * parent_directory_handle,      /* IN */
00236                           fsal_name_t * p_filename,     /* IN */
00237                           fsal_op_context_t * p_context,        /* IN */
00238                           mfsl_context_t * p_mfsl_context,      /* IN */
00239                           fsal_accessmode_t accessmode, /* IN */
00240                           mfsl_object_t * object_handle,        /* OUT */
00241                           fsal_attrib_list_t * object_attributes,       /* [ IN/OUT ] */
00242                           fsal_attrib_list_t * parent_attributes,        /* [ IN/OUT ] */
00243                           void * pextra
00244     )
00245 {
00246   struct timeval start, stop, delta ;
00247   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00248   
00249   gettimeofday( &start, 0 ) ; 
00250   fsal_status = FSAL_create(&parent_directory_handle->handle,
00251                      p_filename,
00252                      p_context, accessmode, &object_handle->handle, object_attributes);
00253   gettimeofday( &stop, 0 ) ; 
00254   delta = mfsl_timer_diff( &stop, &start ) ;
00255   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00256   return fsal_status ;
00257 }                               /* MFSL_create */
00258 
00259 fsal_status_t MFSL_mkdir(mfsl_object_t * parent_directory_handle,       /* IN */
00260                          fsal_name_t * p_dirname,       /* IN */
00261                          fsal_op_context_t * p_context, /* IN */
00262                          mfsl_context_t * p_mfsl_context,       /* IN */
00263                          fsal_accessmode_t accessmode,  /* IN */
00264                          mfsl_object_t * object_handle, /* OUT */
00265                          fsal_attrib_list_t * object_attributes,        /* [ IN/OUT ] */
00266                          fsal_attrib_list_t * parent_attributes, /* [ IN/OUT ] */
00267                          void * pextra
00268     )
00269 {
00270   struct timeval start, stop, delta ;
00271   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00272   
00273   gettimeofday( &start, 0 ) ; 
00274   fsal_status = FSAL_mkdir(&parent_directory_handle->handle,
00275                     p_dirname,
00276                     p_context, accessmode, &object_handle->handle, object_attributes);
00277   gettimeofday( &stop, 0 ) ; 
00278   delta = mfsl_timer_diff( &stop, &start ) ;
00279   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00280   return fsal_status ;
00281 }                               /* MFSL_mkdir */
00282 
00283 fsal_status_t MFSL_truncate(mfsl_object_t * filehandle, /* IN */
00284                             fsal_op_context_t * p_context,      /* IN */
00285                             mfsl_context_t * p_mfsl_context,    /* IN */
00286                             fsal_size_t length, /* IN */
00287                             mfsl_file_t * file_descriptor,      /* INOUT */
00288                             fsal_attrib_list_t * object_attributes,      /* [ IN/OUT ] */
00289                             void * pextra
00290     )
00291 {
00292   struct timeval start, stop, delta ;
00293   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00294   
00295   gettimeofday( &start, 0 ) ; 
00296   fsal_status = FSAL_truncate(&filehandle->handle,
00297                        p_context, length, &file_descriptor->fsal_file, object_attributes);
00298   gettimeofday( &stop, 0 ) ; 
00299   delta = mfsl_timer_diff( &stop, &start ) ;
00300   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00301   return fsal_status ;
00302 }                               /* MFSL_truncate */
00303 
00304 fsal_status_t MFSL_getattrs(mfsl_object_t * filehandle, /* IN */
00305                             fsal_op_context_t * p_context,      /* IN */
00306                             mfsl_context_t * p_mfsl_context,    /* IN */
00307                             fsal_attrib_list_t * object_attributes,      /* IN/OUT */
00308                             void * pextra
00309     )
00310 {
00311   struct timeval start, stop, delta ;
00312   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00313   
00314   gettimeofday( &start, 0 ) ; 
00315   fsal_status = FSAL_getattrs(&filehandle->handle, p_context, object_attributes);
00316   gettimeofday( &stop, 0 ) ; 
00317   delta = mfsl_timer_diff( &stop, &start ) ;
00318   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00319   return fsal_status ;
00320 }                               /* MFSL_getattrs */
00321 
00322 fsal_status_t MFSL_setattrs(mfsl_object_t * filehandle, /* IN */
00323                             fsal_op_context_t * p_context,      /* IN */
00324                             mfsl_context_t * p_mfsl_context,    /* IN */
00325                             fsal_attrib_list_t * attrib_set,    /* IN */
00326                             fsal_attrib_list_t * object_attributes,      /* [ IN/OUT ] */
00327                             void * pextra
00328     )
00329 {
00330   struct timeval start, stop, delta ;
00331   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00332   
00333   gettimeofday( &start, 0 ) ; 
00334   fsal_status = FSAL_setattrs(&filehandle->handle, p_context, attrib_set, object_attributes);
00335   gettimeofday( &stop, 0 ) ; 
00336   delta = mfsl_timer_diff( &stop, &start ) ;
00337   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00338   return fsal_status ;
00339 }                               /* MFSL_setattrs */
00340 
00341 fsal_status_t MFSL_link(mfsl_object_t * target_handle,  /* IN */
00342                         mfsl_object_t * dir_handle,     /* IN */
00343                         fsal_name_t * p_link_name,      /* IN */
00344                         fsal_op_context_t * p_context,  /* IN */
00345                         mfsl_context_t * p_mfsl_context,        /* IN */
00346                         fsal_attrib_list_t * attributes,    /* [ IN/OUT ] */ 
00347                         void * pextra )
00348 {
00349   struct timeval start, stop, delta ;
00350   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00351   
00352   gettimeofday( &start, 0 ) ; 
00353   fsal_status = FSAL_link(&target_handle->handle,
00354                    &dir_handle->handle, p_link_name, p_context, attributes);
00355   gettimeofday( &stop, 0 ) ; 
00356   delta = mfsl_timer_diff( &stop, &start ) ;
00357   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00358   return fsal_status ;
00359 }                               /* MFSL_link */
00360 
00361 fsal_status_t MFSL_opendir(mfsl_object_t * dir_handle,  /* IN */
00362                            fsal_op_context_t * p_context,       /* IN */
00363                            mfsl_context_t * p_mfsl_context,     /* IN */
00364                            fsal_dir_t * dir_descriptor, /* OUT */
00365                            fsal_attrib_list_t * dir_attributes,  /* [ IN/OUT ] */
00366                            void * pextra
00367     )
00368 {
00369   struct timeval start, stop, delta ;
00370   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00371   
00372   gettimeofday( &start, 0 ) ; 
00373   fsal_status = FSAL_opendir(&dir_handle->handle, p_context, dir_descriptor, dir_attributes);
00374   gettimeofday( &stop, 0 ) ; 
00375   delta = mfsl_timer_diff( &stop, &start ) ;
00376   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00377   return fsal_status ;
00378 }                               /* MFSL_opendir */
00379 
00380 fsal_status_t MFSL_readdir(fsal_dir_t * dir_descriptor, /* IN */
00381                            fsal_cookie_t start_position,        /* IN */
00382                            fsal_attrib_mask_t get_attr_mask,    /* IN */
00383                            fsal_mdsize_t buffersize,    /* IN */
00384                            fsal_dirent_t * pdirent,     /* OUT */
00385                            fsal_cookie_t * end_position,        /* OUT */
00386                            fsal_count_t * nb_entries,   /* OUT */
00387                            fsal_boolean_t * end_of_dir, /* OUT */
00388                            mfsl_context_t * p_mfsl_context,      /* IN */
00389                            void * pextra
00390     )
00391 {
00392   struct timeval start, stop, delta ;
00393   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00394   
00395   gettimeofday( &start, 0 ) ; 
00396   fsal_status = FSAL_readdir(dir_descriptor,
00397                       start_position,
00398                       get_attr_mask,
00399                       buffersize, pdirent, end_position, nb_entries, end_of_dir);
00400   gettimeofday( &stop, 0 ) ; 
00401   delta = mfsl_timer_diff( &stop, &start ) ;
00402   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00403   return fsal_status ;
00404 }                               /* MFSL_readdir */
00405 
00406 fsal_status_t MFSL_closedir(fsal_dir_t * dir_descriptor,        /* IN */
00407                             mfsl_context_t * p_mfsl_context,     /* IN */
00408                             void * pextra
00409     )
00410 {
00411   struct timeval start, stop, delta ;
00412   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00413   
00414   gettimeofday( &start, 0 ) ; 
00415   fsal_status = FSAL_closedir(dir_descriptor);
00416   gettimeofday( &stop, 0 ) ; 
00417   delta = mfsl_timer_diff( &stop, &start ) ;
00418   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00419   return fsal_status ;
00420 }                               /* FSAL_closedir */
00421 
00422 fsal_status_t MFSL_open(mfsl_object_t * filehandle,     /* IN */
00423                         fsal_op_context_t * p_context,  /* IN */
00424                         mfsl_context_t * p_mfsl_context,        /* IN */
00425                         fsal_openflags_t openflags,     /* IN */
00426                         mfsl_file_t * file_descriptor,  /* OUT */
00427                         fsal_attrib_list_t * file_attributes,    /* [ IN/OUT ] */
00428                         void * pextra
00429     )
00430 {
00431   struct timeval start, stop, delta ;
00432   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00433   
00434   gettimeofday( &start, 0 ) ; 
00435   fsal_status = FSAL_open(&filehandle->handle,
00436                    p_context, openflags, &file_descriptor->fsal_file, file_attributes);
00437   gettimeofday( &stop, 0 ) ; 
00438   delta = mfsl_timer_diff( &stop, &start ) ;
00439   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00440   return fsal_status ;
00441 }                               /* MFSL_open */
00442 
00443 fsal_status_t MFSL_open_by_name(mfsl_object_t * dirhandle,      /* IN */
00444                                 fsal_name_t * filename, /* IN */
00445                                 fsal_op_context_t * p_context,  /* IN */
00446                                 mfsl_context_t * p_mfsl_context,        /* IN */
00447                                 fsal_openflags_t openflags,     /* IN */
00448                                 mfsl_file_t * file_descriptor,  /* OUT */
00449                                 fsal_attrib_list_t * file_attributes, /* [ IN/OUT ] */ 
00450                                 void * pextra )
00451 {
00452   struct timeval start, stop, delta ;
00453   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00454   
00455   gettimeofday( &start, 0 ) ; 
00456   fsal_status = FSAL_open_by_name(&dirhandle->handle,
00457                            filename,
00458                            p_context, openflags, &file_descriptor->fsal_file, file_attributes);
00459   gettimeofday( &stop, 0 ) ; 
00460   delta = mfsl_timer_diff( &stop, &start ) ;
00461   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00462   return fsal_status ;
00463 }                               /* MFSL_open_by_name */
00464 
00465 fsal_status_t MFSL_open_by_fileid(mfsl_object_t * filehandle,   /* IN */
00466                                   fsal_u64_t fileid,    /* IN */
00467                                   fsal_op_context_t * p_context,        /* IN */
00468                                   mfsl_context_t * p_mfsl_context,      /* IN */
00469                                   fsal_openflags_t openflags,   /* IN */
00470                                   mfsl_file_t * file_descriptor,        /* OUT */
00471                                   fsal_attrib_list_t * file_attributes, /* [ IN/OUT ] */ 
00472                                   void * pextra )
00473 {
00474   struct timeval start, stop, delta ;
00475   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00476   
00477   gettimeofday( &start, 0 ) ; 
00478   fsal_status = FSAL_open_by_fileid(&filehandle->handle,
00479                              fileid,
00480                              p_context, openflags, &file_descriptor->fsal_file, file_attributes);
00481   gettimeofday( &stop, 0 ) ; 
00482   delta = mfsl_timer_diff( &stop, &start ) ;
00483   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00484   return fsal_status ;
00485 }                               /* MFSL_open_by_fileid */
00486 
00487 fsal_status_t MFSL_read(mfsl_file_t * file_descriptor,  /*  IN  */
00488                         fsal_seek_t * seek_descriptor,  /* [IN] */
00489                         fsal_size_t buffer_size,        /*  IN  */
00490                         caddr_t buffer, /* OUT  */
00491                         fsal_size_t * read_amount,      /* OUT  */
00492                         fsal_boolean_t * end_of_file,   /* OUT  */
00493                         mfsl_context_t * p_mfsl_context, /* IN */
00494                         void * pextra
00495     )
00496 {
00497   struct timeval start, stop, delta ;
00498   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00499   
00500   gettimeofday( &start, 0 ) ; 
00501   fsal_status = FSAL_read(&file_descriptor->fsal_file,
00502                    seek_descriptor, buffer_size, buffer, read_amount, end_of_file);
00503   gettimeofday( &stop, 0 ) ; 
00504   delta = mfsl_timer_diff( &stop, &start ) ;
00505   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00506   return fsal_status ;
00507 }                               /* MFSL_read */
00508 
00509 fsal_status_t MFSL_write(mfsl_file_t * file_descriptor, /* IN */
00510                          fsal_seek_t * seek_descriptor, /* IN */
00511                          fsal_size_t buffer_size,       /* IN */
00512                          caddr_t buffer,        /* IN */
00513                          fsal_size_t * write_amount,    /* OUT */
00514                          mfsl_context_t * p_mfsl_context,        /* IN */
00515                          void * pextra
00516     )
00517 {
00518   struct timeval start, stop, delta ;
00519   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00520   
00521   gettimeofday( &start, 0 ) ; 
00522   fsal_status = FSAL_write(&file_descriptor->fsal_file, seek_descriptor, buffer_size, buffer, write_amount);
00523   gettimeofday( &stop, 0 ) ; 
00524   delta = mfsl_timer_diff( &stop, &start ) ;
00525   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00526   return fsal_status ;
00527 }                               /* MFSL_write */
00528 
00529 fsal_status_t MFSL_close(mfsl_file_t * file_descriptor, /* IN */
00530                          mfsl_context_t * p_mfsl_context,        /* IN */
00531                          void * pextra
00532     )
00533 {
00534   struct timeval start, stop, delta ;
00535   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00536   
00537   gettimeofday( &start, 0 ) ; 
00538   fsal_status = FSAL_close(&file_descriptor->fsal_file);
00539   gettimeofday( &stop, 0 ) ; 
00540   delta = mfsl_timer_diff( &stop, &start ) ;
00541   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00542   return fsal_status ;
00543 }                               /* MFSL_close */
00544 
00545 fsal_status_t MFSL_commit( mfsl_file_t * file_descriptor /* IN */,
00546                          fsal_off_t    offset,
00547                          fsal_size_t   length,
00548                          void        * pextra)
00549 {
00550   struct timeval start, stop, delta ;
00551   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00552   
00553   gettimeofday( &start, 0 ) ; 
00554   fsal_status = FSAL_commit( &file_descriptor->fsal_file, offset, length ) ;
00555   gettimeofday( &stop, 0 ) ; 
00556   delta = mfsl_timer_diff( &stop, &start ) ;
00557   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00558   return fsal_status ;
00559 }
00560 
00561 fsal_status_t MFSL_close_by_fileid(mfsl_file_t * file_descriptor /* IN */ ,
00562                                    fsal_u64_t fileid, 
00563                                    mfsl_context_t * p_mfsl_context,  /* IN */
00564                                    void * pextra )
00565 {
00566   struct timeval start, stop, delta ;
00567   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00568   
00569   gettimeofday( &start, 0 ) ; 
00570   fsal_status = FSAL_close_by_fileid(&file_descriptor->fsal_file, fileid);
00571   gettimeofday( &stop, 0 ) ; 
00572   delta = mfsl_timer_diff( &stop, &start ) ;
00573   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00574   return fsal_status ;
00575 }                               /* MFSL_close_by_fileid */
00576 
00577 fsal_status_t MFSL_readlink(mfsl_object_t * linkhandle, /* IN */
00578                             fsal_op_context_t * p_context,      /* IN */
00579                             mfsl_context_t * p_mfsl_context,    /* IN */
00580                             fsal_path_t * p_link_content,       /* OUT */
00581                             fsal_attrib_list_t * link_attributes,        /* [ IN/OUT ] */
00582                             void * pextra
00583     )
00584 {
00585   struct timeval start, stop, delta ;
00586   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00587   
00588   gettimeofday( &start, 0 ) ; 
00589   fsal_status = FSAL_readlink(&linkhandle->handle, p_context, p_link_content, link_attributes);
00590   gettimeofday( &stop, 0 ) ; 
00591   delta = mfsl_timer_diff( &stop, &start ) ;
00592   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00593   return fsal_status ;
00594 }                               /* MFSL_readlink */
00595 
00596 fsal_status_t MFSL_symlink(mfsl_object_t * parent_directory_handle,     /* IN */
00597                            fsal_name_t * p_linkname,    /* IN */
00598                            fsal_path_t * p_linkcontent, /* IN */
00599                            fsal_op_context_t * p_context,       /* IN */
00600                            mfsl_context_t * p_mfsl_context,     /* IN */
00601                            fsal_accessmode_t accessmode,        /* IN (ignored); */
00602                            mfsl_object_t * link_handle, /* OUT */
00603                            fsal_attrib_list_t * link_attributes, /* [ IN/OUT ] */
00604                            void * pextra
00605     )
00606 {
00607   struct timeval start, stop, delta ;
00608   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00609   
00610   gettimeofday( &start, 0 ) ; 
00611   fsal_status = FSAL_symlink(&parent_directory_handle->handle,
00612                       p_linkname,
00613                       p_linkcontent,
00614                       p_context, accessmode, &link_handle->handle, link_attributes);
00615   gettimeofday( &stop, 0 ) ; 
00616   delta = mfsl_timer_diff( &stop, &start ) ;
00617   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00618   return fsal_status ;
00619 }                               /* MFSL_symlink */
00620 
00621 fsal_status_t MFSL_rename(mfsl_object_t * old_parentdir_handle, /* IN */
00622                           fsal_name_t * p_old_name,     /* IN */
00623                           mfsl_object_t * new_parentdir_handle, /* IN */
00624                           fsal_name_t * p_new_name,     /* IN */
00625                           fsal_op_context_t * p_context,        /* IN */
00626                           mfsl_context_t * p_mfsl_context,      /* IN */
00627                           fsal_attrib_list_t * src_dir_attributes,      /* [ IN/OUT ] */
00628                           fsal_attrib_list_t * tgt_dir_attributes,       /* [ IN/OUT ] */
00629                           void * pextra
00630     )
00631 {
00632   struct timeval start, stop, delta ;
00633   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00634   
00635   gettimeofday( &start, 0 ) ; 
00636   fsal_status = FSAL_rename(&old_parentdir_handle->handle,
00637                      p_old_name,
00638                      &new_parentdir_handle->handle,
00639                      p_new_name, p_context, src_dir_attributes, tgt_dir_attributes);
00640   gettimeofday( &stop, 0 ) ; 
00641   delta = mfsl_timer_diff( &stop, &start ) ;
00642   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00643   return fsal_status ;
00644 }                               /* MFSL_rename */
00645 
00646 fsal_status_t MFSL_unlink(mfsl_object_t * parentdir_handle,     /* INOUT */
00647                           fsal_name_t * p_object_name,  /* IN */
00648                           mfsl_object_t * object_handle,        /* INOUT */
00649                           fsal_op_context_t * p_context,        /* IN */
00650                           mfsl_context_t * p_mfsl_context,      /* IN */
00651                           fsal_attrib_list_t * parentdir_attributes,     /* [IN/OUT ] */
00652                           void * pextra
00653     )
00654 {
00655   struct timeval start, stop, delta ;
00656   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00657   
00658   gettimeofday( &start, 0 ) ; 
00659   fsal_status = FSAL_unlink(&parentdir_handle->handle,
00660                      p_object_name, p_context, parentdir_attributes);
00661   gettimeofday( &stop, 0 ) ; 
00662   delta = mfsl_timer_diff( &stop, &start ) ;
00663   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00664   return fsal_status ;
00665 }                               /* MFSL_unlink */
00666 
00667 fsal_status_t MFSL_mknode(mfsl_object_t * parentdir_handle,     /* IN */
00668                           fsal_name_t * p_node_name,    /* IN */
00669                           fsal_op_context_t * p_context,        /* IN */
00670                           mfsl_context_t * p_mfsl_context,      /* IN */
00671                           fsal_accessmode_t accessmode, /* IN */
00672                           fsal_nodetype_t nodetype,     /* IN */
00673                           fsal_dev_t * dev,     /* IN */
00674                           mfsl_object_t * p_object_handle,      /* OUT */
00675                           fsal_attrib_list_t * node_attributes,  /* [ IN/OUT ] */
00676                           void * pextra
00677     )
00678 {
00679   struct timeval start, stop, delta ;
00680   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00681   
00682   gettimeofday( &start, 0 ) ; 
00683   fsal_status = FSAL_mknode(&parentdir_handle->handle,
00684                      p_node_name,
00685                      p_context,
00686                      accessmode,
00687                      nodetype, dev, &p_object_handle->handle, node_attributes);
00688   gettimeofday( &stop, 0 ) ; 
00689   delta = mfsl_timer_diff( &stop, &start ) ;
00690   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00691   return fsal_status ;
00692 }                               /* MFSL_mknode */
00693 
00694 fsal_status_t MFSL_rcp(mfsl_object_t * filehandle,      /* IN */
00695                        fsal_op_context_t * p_context,   /* IN */
00696                        mfsl_context_t * p_mfsl_context, /* IN */
00697                        fsal_path_t * p_local_path,      /* IN */
00698                        fsal_rcpflag_t transfer_opt,      /* IN */
00699                        void * pextra
00700     )
00701 {
00702   struct timeval start, stop, delta ;
00703   fsal_status_t fsal_status = { ERR_FSAL_NO_ERROR, 0 } ;
00704   
00705   gettimeofday( &start, 0 ) ; 
00706   fsal_status = FSAL_rcp(&filehandle->handle, p_context, p_local_path, transfer_opt);
00707   gettimeofday( &stop, 0 ) ; 
00708   delta = mfsl_timer_diff( &stop, &start ) ;
00709   LogFullDebug( COMPONENT_MFSL, "%s: duration=%ld.%06ld", __FUNCTION__, delta.tv_sec, delta.tv_usec ) ;
00710   return fsal_status ;
00711 }                               /* MFSL_rcp */
00712 
00713 /* To be called before exiting */
00714 fsal_status_t MFSL_terminate(void)
00715 {
00716   fsal_status_t fsal_status;
00717 
00718   fsal_status.major = ERR_FSAL_NO_ERROR;
00719   fsal_status.minor = 0;
00720 
00721   return fsal_status;
00722 
00723 }                               /* MFSL_terminate */