Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove an ugly pimple thanks to units in XML
[simgrid.git] / src / surf / storage.c
index 20105ac..227c717 100644 (file)
@@ -37,7 +37,7 @@ static xbt_dynar_t storage_list;
 static xbt_dict_t parse_storage_content(char *filename, size_t *used_size);
 static int storage_action_unref(surf_action_t action);
 static void storage_action_state_set(surf_action_t action, e_surf_action_state_t state);
-static surf_action_t storage_action_execute (void *storage, double size, e_surf_action_storage_type_t type);
+static surf_action_t storage_action_execute (void *storage, size_t size, e_surf_action_storage_type_t type);
 
 static surf_action_t storage_action_ls(void *storage, const char* path)
 {
@@ -95,7 +95,7 @@ static surf_action_t storage_action_open(void *storage, const char* mount,
   surf_file_t file = xbt_new0(s_surf_file_t,1);
   file->name = xbt_strdup(path);
   file->size = size;
-  file->storage = xbt_strdup(mount);
+  file->mount = xbt_strdup(mount);
 
   surf_action_t action = storage_action_execute(storage,0, OPEN);
   action->file = (void *)file;
@@ -117,14 +117,14 @@ static surf_action_t storage_action_close(void *storage, surf_file_t fd)
   }
 
   free(fd->name);
-  free(fd->storage);
+  free(fd->mount);
   xbt_free(fd);
   surf_action_t action = storage_action_execute(storage,0, CLOSE);
   return action;
 }
 
-static surf_action_t storage_action_read(void *storage, void* ptr, double size,
-                                         size_t nmemb, surf_file_t fd)
+static surf_action_t storage_action_read(void *storage, size_t size,
+                                         surf_file_t fd)
 {
   if(size > fd->size)
     size = fd->size;
@@ -132,8 +132,7 @@ static surf_action_t storage_action_read(void *storage, void* ptr, double size,
   return action;
 }
 
-static surf_action_t storage_action_write(void *storage, const void* ptr,
-                                          size_t size, size_t nmemb,
+static surf_action_t storage_action_write(void *storage, size_t size, 
                                           surf_file_t fd)
 {
   char *filename = fd->name;
@@ -149,12 +148,12 @@ static surf_action_t storage_action_write(void *storage, const void* ptr,
   return action;
 }
 
-static surf_action_t storage_action_execute (void *storage, double size, e_surf_action_storage_type_t type)
+static surf_action_t storage_action_execute (void *storage, size_t size, e_surf_action_storage_type_t type)
 {
   surf_action_storage_t action = NULL;
   storage_t STORAGE = storage;
 
-  XBT_IN("(%s,%f", surf_resource_name(STORAGE), size);
+  XBT_IN("(%s,%zu", surf_resource_name(STORAGE), size);
   action =
       surf_action_new(sizeof(s_surf_action_storage_t), size, surf_storage_model,
           STORAGE->state_current != SURF_RESOURCE_ON);
@@ -262,8 +261,11 @@ static void storage_update_actions_state(double now, double delta)
     if(action->type == WRITE)
     {
       double rate = lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable);
-      ((storage_t)(action->storage))->used_size += delta * rate; // disk usage
-      ((surf_action_t)action)->file->size += delta * rate; // file size
+      /* Hack to avoid rounding differences between x86 and x86_64
+       * (note that the next sizes are of type size_t). */
+      long incr = delta * rate + MAXMIN_PRECISION;
+      ((storage_t)(action->storage))->used_size += incr; // disk usage
+      ((surf_action_t)action)->file->size += incr; // file size
     }
   }
 
@@ -539,7 +541,7 @@ static xbt_dict_t parse_storage_content(char *filename, size_t *used_size)
 
   while ((read = xbt_getline(&line, &len, file)) != -1) {
     if (read){
-    if(sscanf(line,"%s %lu",path, &size)==2) {
+    if(sscanf(line,"%s %zu",path, &size)==2) {
         *used_size += size;
         xbt_dict_set(parse_content,path,(void*) size,NULL);
       } else {
@@ -562,7 +564,7 @@ static void storage_parse_storage_type(sg_platf_storage_type_cbarg_t storage_typ
   stype->properties = storage_type->properties;
   stype->content = xbt_strdup(storage_type->content);
   stype->type_id = xbt_strdup(storage_type->id);
-  stype->size = storage_type->size * 1000000000; /* storage_type->size is in Gbytes and stype->sizeis in bytes */
+  stype->size = storage_type->size;
 
   XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s' content '%s'",
       stype->type_id,