mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-27 22:59:43 +00:00
VFS: add an error to to the Sync_result enum
Sync errors can be used to indicate failed writes across the File_system session. Ref #2920
This commit is contained in:
parent
7fabc45313
commit
08b774e318
@ -175,7 +175,7 @@ struct Vfs::File_io_service : Interface
|
|||||||
** Sync **
|
** Sync **
|
||||||
**********/
|
**********/
|
||||||
|
|
||||||
enum Sync_result { SYNC_QUEUED, SYNC_OK };
|
enum Sync_result { SYNC_QUEUED, SYNC_ERR_INVALID, SYNC_OK };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queue sync operation
|
* Queue sync operation
|
||||||
|
@ -187,6 +187,7 @@ static inline void print(Genode::Output &output, Vfs::File_io_service::Sync_resu
|
|||||||
switch (r) {
|
switch (r) {
|
||||||
CASE_PRINT(SYNC_OK);
|
CASE_PRINT(SYNC_OK);
|
||||||
CASE_PRINT(SYNC_QUEUED);
|
CASE_PRINT(SYNC_QUEUED);
|
||||||
|
CASE_PRINT(SYNC_ERR_INVALID);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef CASE_PRINT
|
#undef CASE_PRINT
|
||||||
|
@ -211,12 +211,15 @@ class Vfs::Fs_file_system : public File_system
|
|||||||
|
|
||||||
::File_system::Session::Tx::Source &source = *_fs.tx();
|
::File_system::Session::Tx::Source &source = *_fs.tx();
|
||||||
|
|
||||||
|
Sync_result result = packet.succeeded()
|
||||||
|
? SYNC_OK : SYNC_ERR_INVALID;
|
||||||
|
|
||||||
queued_sync_state = Handle_state::Queued_state::IDLE;
|
queued_sync_state = Handle_state::Queued_state::IDLE;
|
||||||
queued_sync_packet = ::File_system::Packet_descriptor();
|
queued_sync_packet = ::File_system::Packet_descriptor();
|
||||||
|
|
||||||
source.release_packet(packet);
|
source.release_packet(packet);
|
||||||
|
|
||||||
return SYNC_OK;
|
return result;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -227,8 +227,7 @@ class Vfs_server::Session_component : public File_system::Session_rpc_object,
|
|||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
_apply(packet.handle(), [&] (Io_node &node) {
|
_apply(packet.handle(), [&] (Io_node &node) {
|
||||||
node.sync();
|
succeeded = node.sync();
|
||||||
succeeded = true;
|
|
||||||
});
|
});
|
||||||
} catch (Operation_incomplete) {
|
} catch (Operation_incomplete) {
|
||||||
throw Not_ready();
|
throw Not_ready();
|
||||||
|
@ -270,7 +270,7 @@ class Vfs_server::Io_node : public Vfs_server::Node,
|
|||||||
|
|
||||||
bool notify_read_ready() const { return _notify_read_ready; }
|
bool notify_read_ready() const { return _notify_read_ready; }
|
||||||
|
|
||||||
void sync()
|
bool sync()
|
||||||
{
|
{
|
||||||
typedef Vfs::File_io_service::Sync_result Result;
|
typedef Vfs::File_io_service::Sync_result Result;
|
||||||
Result out_result = Result::SYNC_OK;
|
Result out_result = Result::SYNC_OK;
|
||||||
@ -288,7 +288,10 @@ class Vfs_server::Io_node : public Vfs_server::Node,
|
|||||||
switch (out_result) {
|
switch (out_result) {
|
||||||
case Result::SYNC_OK:
|
case Result::SYNC_OK:
|
||||||
op_state = Op_state::IDLE;
|
op_state = Op_state::IDLE;
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
|
case Result::SYNC_ERR_INVALID:
|
||||||
|
return false;
|
||||||
|
|
||||||
case Result::SYNC_QUEUED:
|
case Result::SYNC_QUEUED:
|
||||||
op_state = Op_state::SYNC_QUEUED;
|
op_state = Op_state::SYNC_QUEUED;
|
||||||
@ -299,6 +302,7 @@ class Vfs_server::Io_node : public Vfs_server::Node,
|
|||||||
case Op_state::READ_QUEUED:
|
case Op_state::READ_QUEUED:
|
||||||
throw Operation_incomplete();
|
throw Operation_incomplete();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user