diff --git a/rmtfs.c b/rmtfs.c index 25862d1..ffca070 100644 --- a/rmtfs.c +++ b/rmtfs.c @@ -220,6 +220,10 @@ static void rmtfs_iovec(int sock, struct qrtr_packet *pkt) respond: dbgprintf("[RMTFS] iovec %d, %sforced => (%d:%d)\n", caller_id, force ? "" : "not ", resp.result.result, resp.result.error); + + if (is_write) + storage_sync(rmtfd); + for (i = 0; i < num_entries; i++) { dbgprintf("[RMTFS] %s %d:%d 0x%x\n", is_write ? "write" : "read", entries[i].sector_addr, diff --git a/rmtfs.h b/rmtfs.h index 242baa5..fa4b806 100644 --- a/rmtfs.h +++ b/rmtfs.h @@ -34,6 +34,7 @@ int storage_get_error(const struct rmtfd *rmtfd); void storage_exit(void); ssize_t storage_pread(const struct rmtfd *rmtfd, void *buf, size_t nbyte, off_t offset); ssize_t storage_pwrite(struct rmtfd *rmtfd, const void *buf, size_t nbyte, off_t offset); +int storage_sync(struct rmtfd *rmtfd); int rproc_init(void); int rproc_start(void); diff --git a/storage.c b/storage.c index 0f882eb..aaf73d0 100644 --- a/storage.c +++ b/storage.c @@ -122,7 +122,7 @@ found: fspath = alloca(pathlen); snprintf(fspath, pathlen, "%s/%s", storage_dir, file); if (!storage_read_only) { - fd = open(fspath, O_RDWR | O_SYNC); + fd = open(fspath, O_RDWR); if (fd < 0) { saved_errno = errno; fprintf(stderr, "[storage] failed to open '%s' (requested '%s'): %s\n", @@ -245,6 +245,14 @@ ssize_t storage_pwrite(struct rmtfd *rmtfd, const void *buf, size_t nbyte, off_t return nbyte; } +int storage_sync(struct rmtfd *rmtfd) +{ + if (storage_read_only) + return 0; + + return fdatasync(rmtfd->fd); +} + static int storage_populate_shadow_buf(struct rmtfd *rmtfd, const char *file) { ssize_t len;