From dd744c7fc26d99e8b3700daa6c52b51c9a151589 Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Wed, 24 Jul 2019 17:13:17 +0200 Subject: [PATCH] file, open: avoid deleting the whiteout if possible Signed-off-by: Giuseppe Scrivano --- main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 75b3af4..ac6a813 100644 --- a/main.c +++ b/main.c @@ -2933,6 +2933,7 @@ ovl_do_open (fuse_req_t req, fuse_ino_t parent, const char *name, int flags, mod struct ovl_node *p; const struct fuse_ctx *ctx = fuse_req_ctx (req); char wd_tmp_file_name[32]; + bool need_delete_whiteout = true; if ((flags & O_CREAT) == 0) { @@ -2951,6 +2952,9 @@ ovl_do_open (fuse_req_t req, fuse_ino_t parent, const char *name, int flags, mod if (p == NULL) return -1; + if (p->loaded && n == NULL) + need_delete_whiteout = false; + sprintf (wd_tmp_file_name, "%lu", get_next_wd_counter ()); ret = asprintf (&path, "%s/%s", p->path, name); @@ -2964,7 +2968,7 @@ ovl_do_open (fuse_req_t req, fuse_ino_t parent, const char *name, int flags, mod if (fd < 0) return fd; - if (delete_whiteout (lo, -1, p, name) < 0) + if (need_delete_whiteout && delete_whiteout (lo, -1, p, name) < 0) return -1; n = make_ovl_node (path, get_upper_layer (lo), name, 0, false, p, lo->fast_ino_check);