]> mj.ucw.cz Git - libucw.git/commitdiff
backbuf support in parametrized fastbuf
authorPavel Charvat <pavel.charvat@netcentrum.cz>
Thu, 7 Jun 2007 07:35:25 +0000 (09:35 +0200)
committerPavel Charvat <pavel.charvat@netcentrum.cz>
Thu, 7 Jun 2007 07:35:25 +0000 (09:35 +0200)
lib/fastbuf.h
lib/fb-param.c

index 09114f4cf98090bce6a6c2901b51175538cc5bcb..7bedd76df08200623ce264c66266295740042323 100644 (file)
@@ -84,7 +84,10 @@ enum fb_type {                               /* Which back-end you want to use */
 struct fb_params {
   enum fb_type type;
   uns buffer_size;
-  uns read_ahead;                      /* The next three fields are used for FB_DIRECT files */
+  /* FB_STD only */
+  uns keep_back_buf;
+  /* FB_DIRECT only */
+  uns read_ahead;                      
   uns write_back;
   struct asio_queue *asio;
 };
index 38cd5801118293e1bdf71c5268c612cb869e7394..e487ced4068bb9e01fb26792ad820a84c28abf5b 100644 (file)
@@ -27,6 +27,7 @@ struct cf_section fbpar_cf = {
   CF_ITEMS {
     CF_LOOKUP("Type", (int *)F(type), ((byte *[]){"std", "direct", "mmap", NULL})),
     CF_UNS("BufSize", F(buffer_size)),
+    CF_UNS("KeepBackBuf", F(keep_back_buf)),
     CF_UNS("ReadAhead", F(read_ahead)),
     CF_UNS("WriteBack", F(write_back)),
     CF_END
@@ -57,8 +58,11 @@ bopen_fd_internal(int fd, struct fb_params *params, uns mode, byte *name)
   switch (params->type)
     {
       case FB_STD:
-       return bfdopen_internal(fd, name,
+       fb = bfdopen_internal(fd, name,
            params->buffer_size ? : fbpar_def.buffer_size);
+       if (params->keep_back_buf)
+         bconfig(fb, BCONFIG_KEEP_BACK_BUF, 1);
+       return fb;
       case FB_DIRECT:
        fb = fbdir_open_fd_internal(fd, name, params->asio,
            params->buffer_size ? : fbpar_def.buffer_size,
@@ -71,8 +75,9 @@ bopen_fd_internal(int fd, struct fb_params *params, uns mode, byte *name)
        if (!~mode && (int)(mode = fcntl(fd, F_GETFL)) < 0)
           die("Cannot get flags of fd %d: %m", fd);
        return bfmmopen_internal(fd, name, mode);
+      default:
+       ASSERT(0);
     }
-  ASSERT(0);
 }
 
 static struct fastbuf *