use different read and write functions when using direct_io

This commit is contained in:
Antonio SJ Musumeci 2016-12-20 17:06:34 -05:00
parent 437067b5e0
commit 1aa76a54c2
8 changed files with 122 additions and 19 deletions

View file

@ -78,7 +78,8 @@ namespace local
static
void
get_fuse_operations(struct fuse_operations &ops)
get_fuse_operations(struct fuse_operations &ops,
const bool direct_io)
{
#if FLAG_NOPATH
ops.flag_nopath = false;
@ -115,7 +116,9 @@ namespace local
ops.open = mergerfs::fuse::open;
ops.opendir = mergerfs::fuse::opendir;
ops.poll = NULL;
ops.read = mergerfs::fuse::read;
ops.read = direct_io ?
mergerfs::fuse::read_direct_io :
mergerfs::fuse::read;
#if READ_BUF
ops.read_buf = mergerfs::fuse::read_buf;
#endif
@ -133,7 +136,9 @@ namespace local
ops.unlink = mergerfs::fuse::unlink;
ops.utime = NULL; /* deprecated; use utimens() */
ops.utimens = mergerfs::fuse::utimens;
ops.write = mergerfs::fuse::write;
ops.write = direct_io ?
mergerfs::fuse::write_direct_io :
mergerfs::fuse::write;
#if WRITE_BUF
ops.write_buf = mergerfs::fuse::write_buf;
#endif
@ -172,7 +177,7 @@ namespace mergerfs
mergerfs::options::parse(args,config);
local::setup_resources();
local::get_fuse_operations(ops);
local::get_fuse_operations(ops,config.direct_io);
return fuse_main(args.argc,
args.argv,