fs-backend: Fix freelist implementation
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 15 Jul 2008 16:59:31 +0000 (17:59 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 15 Jul 2008 16:59:31 +0000 (17:59 +0100)
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
tools/fs-back/fs-backend.c
tools/fs-back/fs-backend.h

index fd5ba2b46ba05d8c3de199a55cc928ad19a7a117..71518f0aa2251a7e1a7716655fb97591d4600af9 100644 (file)
@@ -110,9 +110,9 @@ void allocate_request_array(struct mount *mount)
     unsigned short *freelist;
     
     requests = malloc(sizeof(struct fs_request) *nr_entries);
-    freelist = malloc(sizeof(unsigned short) * nr_entries); 
+    freelist = malloc(sizeof(unsigned short) * (nr_entries + 1)); 
     memset(requests, 0, sizeof(struct fs_request) * nr_entries);
-    memset(freelist, 0, sizeof(unsigned short) * nr_entries);
+    memset(freelist, 0, sizeof(unsigned short) * (nr_entries + 1));
     for(i=0; i< nr_entries; i++)
     {
         requests[i].active = 0; 
index 9150d214a51b4936ecb696262b5b581b2367a415..bf54dae531557a02c6f35aefcdb57a942a908e15 100644 (file)
@@ -72,14 +72,14 @@ extern struct fs_op *fsops[];
 
 static inline void add_id_to_freelist(unsigned int id,unsigned short* freelist)
 {
-    freelist[id] = freelist[0];
+    freelist[id + 1] = freelist[0];
     freelist[0]  = id;
 }
 
 static inline unsigned short get_id_from_freelist(unsigned short* freelist)
 {
     unsigned int id = freelist[0];
-    freelist[0] = freelist[id];
+    freelist[0] = freelist[id + 1];
     return id;
 }