From 43312883a346326bf65d076927a5685c49fd287c Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Thu, 7 Jun 2007 09:35:25 +0200 Subject: [PATCH] backbuf support in parametrized fastbuf --- lib/fastbuf.h | 5 ++++- lib/fb-param.c | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/fastbuf.h b/lib/fastbuf.h index 09114f4c..7bedd76d 100644 --- a/lib/fastbuf.h +++ b/lib/fastbuf.h @@ -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; }; diff --git a/lib/fb-param.c b/lib/fb-param.c index 38cd5801..e487ced4 100644 --- a/lib/fb-param.c +++ b/lib/fb-param.c @@ -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 * -- 2.39.2