main: disable fsync for lower layers

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2019-07-15 00:43:55 +02:00
parent d092552b76
commit 241fecf92b
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED

18
main.c
View File

@ -3884,14 +3884,30 @@ ovl_mkdir (fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode)
static void static void
ovl_fsync (fuse_req_t req, fuse_ino_t ino, int datasync, struct fuse_file_info *fi) ovl_fsync (fuse_req_t req, fuse_ino_t ino, int datasync, struct fuse_file_info *fi)
{ {
int ret, fd; int fd;
int ret = 0;
bool do_fsync;
struct ovl_node *node;
struct ovl_data *lo = ovl_data (req);
cleanup_lock int l = enter_big_lock ();
if (ovl_debug (req)) if (ovl_debug (req))
fprintf (stderr, "ovl_fsync(ino=%" PRIu64 ", datasync=%d, fi=%p)\n", fprintf (stderr, "ovl_fsync(ino=%" PRIu64 ", datasync=%d, fi=%p)\n",
ino, datasync, fi); ino, datasync, fi);
node = do_lookup_file (lo, ino, NULL);
do_fsync = node && node->layer == get_upper_layer (lo);
l = release_big_lock ();
fd = fi->fh; fd = fi->fh;
if (do_fsync)
{
/* Skip fsync for lower layers. */
ret = datasync ? fdatasync (fd) : fsync (fd); ret = datasync ? fdatasync (fd) : fsync (fd);
}
fuse_reply_err (req, ret == 0 ? 0 : errno); fuse_reply_err (req, ret == 0 ? 0 : errno);
} }