diff options
author | Stephen Crane <cranes@google.com> | 2022-07-27 17:16:05 -0700 |
---|---|---|
committer | Stephen Crane <cranes@google.com> | 2022-08-03 19:05:53 +0000 |
commit | 5b02ed521ccbb52e727364769aa4514f58055f82 (patch) | |
tree | c4875961287d141daf5770f8a6ce946cb3364308 | |
parent | c134d822c5a5273fa97749fca0babce3f176b72a (diff) | |
download | core-5b02ed521ccbb52e727364769aa4514f58055f82.tar.gz |
storageproxy: Support POST_COMMIT sync for all commands
Previously we did not support STORAGE_MSG_FLAG_POST_COMMIT for anything
but RPMB operations (in which case it was a no-op). We need to support
this flag in order to store a superblock in non-secure storage, as we
need that write to commit atomically wrt all other writes.
Test: com.android.storage-unittest.nsp
Bug: 228793975
Change-Id: Ia453c1916970e0b65a91e42f18b920ac4e1f01db
Merged-In: Ia453c1916970e0b65a91e42f18b920ac4e1f01db
(cherry picked from commit 57770a531885cea930f8c56a311c0a0c530abdad)
-rw-r--r-- | trusty/storage/proxy/proxy.c | 7 | ||||
-rw-r--r-- | trusty/storage/proxy/storage.c | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/trusty/storage/proxy/proxy.c b/trusty/storage/proxy/proxy.c index 262003427..ed670b7fe 100644 --- a/trusty/storage/proxy/proxy.c +++ b/trusty/storage/proxy/proxy.c @@ -116,10 +116,11 @@ static int drop_privs(void) { static int handle_req(struct storage_msg* msg, const void* req, size_t req_len) { int rc; - if ((msg->flags & STORAGE_MSG_FLAG_POST_COMMIT) && (msg->cmd != STORAGE_RPMB_SEND)) { + if ((msg->flags & STORAGE_MSG_FLAG_POST_COMMIT) && msg->cmd != STORAGE_RPMB_SEND && + msg->cmd != STORAGE_FILE_WRITE) { /* - * handling post commit messages on non rpmb commands are not - * implemented as there is no use case for this yet. + * handling post commit messages on commands other than rpmb and write + * operations are not implemented as there is no use case for this yet. */ ALOGE("cmd 0x%x: post commit option is not implemented\n", msg->cmd); msg->result = STORAGE_ERR_UNIMPLEMENTED; diff --git a/trusty/storage/proxy/storage.c b/trusty/storage/proxy/storage.c index c00c399d9..2fedcce6d 100644 --- a/trusty/storage/proxy/storage.c +++ b/trusty/storage/proxy/storage.c @@ -407,6 +407,14 @@ int storage_file_write(struct storage_msg *msg, goto err_response; } + if (msg->flags & STORAGE_MSG_FLAG_POST_COMMIT) { + rc = storage_sync_checkpoint(); + if (rc < 0) { + msg->result = STORAGE_ERR_GENERIC; + goto err_response; + } + } + msg->result = STORAGE_NO_ERROR; err_response: |