From 1c75d1e3a7a70881879ab751747eeba39da98d7b Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Fri, 29 Jul 2022 16:18:58 -0700 Subject: [PATCH] storageproxy: Report fsync failures with a distinct error code Fsync failures are special because they may indicate a failure of an operation before the current operation. Report these cases as a new, distinct error. Test: Cause fsync failure and check error response Bug: 239105007 Change-Id: Ie9d4a1949586e90006256c975786e21ced655e66 --- trusty/storage/interface/include/trusty/interface/storage.h | 4 ++++ trusty/storage/proxy/proxy.c | 2 +- trusty/storage/proxy/storage.c | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/trusty/storage/interface/include/trusty/interface/storage.h b/trusty/storage/interface/include/trusty/interface/storage.h index 3f1dcb8c6..255ade127 100644 --- a/trusty/storage/interface/include/trusty/interface/storage.h +++ b/trusty/storage/interface/include/trusty/interface/storage.h @@ -70,6 +70,9 @@ enum storage_cmd { * @STORAGE_ERR_TRANSACT returned by various operations to indicate that current transaction * is in error state. Such state could be only cleared by sending * STORAGE_END_TRANSACTION message. + * @STORAGE_ERR_SYNC_FAILURE indicates that the current operation failed to sync + * to disk. Only returned if STORAGE_MSG_FLAG_PRE_COMMIT or + * STORAGE_MSG_FLAG_POST_COMMIT was set for the request. */ enum storage_err { STORAGE_NO_ERROR = 0, @@ -80,6 +83,7 @@ enum storage_err { STORAGE_ERR_NOT_FOUND = 5, STORAGE_ERR_EXIST = 6, STORAGE_ERR_TRANSACT = 7, + STORAGE_ERR_SYNC_FAILURE = 8, }; /** diff --git a/trusty/storage/proxy/proxy.c b/trusty/storage/proxy/proxy.c index ed670b7fe..f01589287 100644 --- a/trusty/storage/proxy/proxy.c +++ b/trusty/storage/proxy/proxy.c @@ -130,7 +130,7 @@ static int handle_req(struct storage_msg* msg, const void* req, size_t req_len) if (msg->flags & STORAGE_MSG_FLAG_PRE_COMMIT) { rc = storage_sync_checkpoint(); if (rc < 0) { - msg->result = STORAGE_ERR_GENERIC; + msg->result = STORAGE_ERR_SYNC_FAILURE; return ipc_respond(msg, NULL, 0); } } diff --git a/trusty/storage/proxy/storage.c b/trusty/storage/proxy/storage.c index 2fedcce6d..c531cfd13 100644 --- a/trusty/storage/proxy/storage.c +++ b/trusty/storage/proxy/storage.c @@ -410,7 +410,7 @@ int storage_file_write(struct storage_msg *msg, if (msg->flags & STORAGE_MSG_FLAG_POST_COMMIT) { rc = storage_sync_checkpoint(); if (rc < 0) { - msg->result = STORAGE_ERR_GENERIC; + msg->result = STORAGE_ERR_SYNC_FAILURE; goto err_response; } }