diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-04-19 15:29:56 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-19 15:29:56 +0000 |
commit | 79917d6afbd9b3efd082aba2e6930f40165e38a2 (patch) | |
tree | e1f7f58e748b1ba6692055a1409fa6bba70b5c0c | |
parent | 0eb0aff10720271f7cfcfaf2fff726f51bbc7a8d (diff) | |
parent | 8176192d0e250087e3ba9ddeb30f988bb4dcfb38 (diff) | |
download | MediaProvider-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.cpp | 21 |
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, |