summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-04-19 15:29:56 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-19 15:29:56 +0000
commit79917d6afbd9b3efd082aba2e6930f40165e38a2 (patch)
treee1f7f58e748b1ba6692055a1409fa6bba70b5c0c
parent0eb0aff10720271f7cfcfaf2fff726f51bbc7a8d (diff)
parent8176192d0e250087e3ba9ddeb30f988bb4dcfb38 (diff)
downloadMediaProvider-79917d6afbd9b3efd082aba2e6930f40165e38a2.tar.gz
Merge "Revert "FuseDaemon: remove .flush callback"" am: 65b2a96a6d am: 0d96be68e4 am: 8176192d0e
Original change: https://android-review.googlesource.com/c/platform/packages/providers/MediaProvider/+/2062851 Change-Id: I61f440ad996b9f02a78fa767dd6eb918cc4eb172 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--jni/FuseDaemon.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/jni/FuseDaemon.cpp b/jni/FuseDaemon.cpp
index 1035a4f82..e0c32f4ca 100644
--- a/jni/FuseDaemon.cpp
+++ b/jni/FuseDaemon.cpp
@@ -1691,6 +1691,25 @@ static void pf_copy_file_range(fuse_req_t req, fuse_ino_t ino_in,
}
#endif
+/*
+ * This function does nothing except being a placeholder to keep the FUSE
+ * driver handling flushes on close(2).
+ * In fact, kernels prior to 5.8 stop attempting flushing the cache on close(2)
+ * if the .flush operation is not implemented by the FUSE daemon.
+ * This has been fixed in the kernel by commit 614c026e8a46 ("fuse: always
+ * flush dirty data on close(2)"), merged in Linux 5.8, but until then
+ * userspace must mitigate this behavior by not leaving the .flush function
+ * pointer empty.
+ */
+static void pf_flush(fuse_req_t req,
+ fuse_ino_t ino,
+ struct fuse_file_info* fi) {
+ ATRACE_CALL();
+ struct fuse* fuse = get_fuse(req);
+ TRACE_NODE(nullptr, req) << "noop";
+ fuse_reply_err(req, 0);
+}
+
static void pf_release(fuse_req_t req,
fuse_ino_t ino,
struct fuse_file_info* fi) {
@@ -2136,7 +2155,7 @@ static struct fuse_lowlevel_ops ops{
/*.link = pf_link,*/
.open = pf_open, .read = pf_read,
/*.write = pf_write,*/
- /*.flush = pf_flush,*/
+ .flush = pf_flush,
.release = pf_release, .fsync = pf_fsync, .opendir = pf_opendir, .readdir = pf_readdir,
.releasedir = pf_releasedir, .fsyncdir = pf_fsyncdir, .statfs = pf_statfs,
/*.setxattr = pf_setxattr,