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
Merged-In: Ie9d4a1949586e90006256c975786e21ced655e66
(cherry picked from commit 1c75d1e3a7)
This commit is contained in:
Stephen Crane 2022-07-29 16:18:58 -07:00
parent 5b02ed521c
commit cf458bae1e
3 changed files with 6 additions and 2 deletions

View file

@ -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,
};
/**

View file

@ -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);
}
}

View file

@ -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;
}
}