]> mj.ucw.cz Git - libucw.git/blobdiff - lib/pagecache.c
I always wanted to rename the rather inconsistent memory pool modules.
[libucw.git] / lib / pagecache.c
index 81f5b9fd1d0e158cae04b5b1bdafef05f58b8f96..6a2643dfae7547caceae0098ec926b076fd8f141 100644 (file)
@@ -1,7 +1,10 @@
 /*
  *     Sherlock Library -- File Page Cache
  *
- *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
+ *     (c) 1999--2002 Martin Mares <mj@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
 #include "lib/lib.h"
@@ -13,6 +16,7 @@
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <alloca.h>
 
 struct page_cache {
   list free_pages;                     /* LRU queue of free non-dirty pages */
@@ -104,7 +108,7 @@ flush_page(struct page_cache *c, struct page *p)
 #ifdef SHERLOCK_HAVE_PREAD
   s = sh_pwrite(p->fd, p->data, c->page_size, p->pos);
 #else
-  if (c->pos != p->pos || c->pos_fd != p->fd)
+  if (c->pos != p->pos || c->pos_fd != (int) p->fd)
     sh_seek(p->fd, p->pos, SEEK_SET);
   s = write(p->fd, p->data, c->page_size);
   c->pos = p->pos + s;
@@ -139,7 +143,7 @@ static void
 flush_pages(struct page_cache *c, uns force)
 {
   uns cnt = 0;
-  uns max = force ? ~0U : c->free_count / 2; /* FIXME: Needs tuning */
+  uns max = force ? ~0U : c->free_count / 2;
   uns i;
   struct page *p, *q, **req, **rr;
 
@@ -281,7 +285,7 @@ pgc_read(struct page_cache *c, int fd, sh_off_t pos)
 #ifdef SHERLOCK_HAVE_PREAD
       s = sh_pread(fd, p->data, c->page_size, pos);
 #else
-      if (c->pos != pos || c->pos_fd != fd)
+      if (c->pos != pos || c->pos_fd != (int)fd)
        sh_seek(fd, pos, SEEK_SET);
       s = read(fd, p->data, c->page_size);
       c->pos = pos + s;
@@ -339,7 +343,7 @@ pgc_put(struct page_cache *c, struct page *p)
   else
     {
       rem_node(&p->hn);
-      free(p);
+      xfree(p);
       c->total_count--;
     }
 }