From b805e001db94de0dedfdc0d7c6fd02aab5e4069f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 31 Jan 2017 15:36:00 +0100 Subject: [PATCH] Add READ_READY support to file-system session The read-ready packet informs the server that the client wants to be notified if a handle becomes readable. When becoming readable, the server acknowledges packet and the client may queue a read requests accordingly. --- repos/dde_rump/src/server/rump_fs/main.cc | 4 ++++ repos/libports/src/server/ffat_fs/main.cc | 4 ++++ repos/libports/src/server/fuse_fs/fuse_fs_main.cc | 4 ++++ repos/os/include/file_system_session/file_system_session.h | 6 ++++-- repos/os/src/server/lx_fs/main.cc | 4 ++++ repos/os/src/server/ram_fs/main.cc | 4 ++++ repos/os/src/server/trace_fs/main.cc | 4 ++++ repos/os/src/server/vfs/main.cc | 7 ++++++- 8 files changed, 34 insertions(+), 3 deletions(-) diff --git a/repos/dde_rump/src/server/rump_fs/main.cc b/repos/dde_rump/src/server/rump_fs/main.cc index 2619d001b..abaab1883 100644 --- a/repos/dde_rump/src/server/rump_fs/main.cc +++ b/repos/dde_rump/src/server/rump_fs/main.cc @@ -80,6 +80,10 @@ class File_system::Session_component : public Session_rpc_object case Packet_descriptor::WRITE: res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/libports/src/server/ffat_fs/main.cc b/repos/libports/src/server/ffat_fs/main.cc index 59b0cc3ba..e0af7ae81 100644 --- a/repos/libports/src/server/ffat_fs/main.cc +++ b/repos/libports/src/server/ffat_fs/main.cc @@ -98,6 +98,10 @@ namespace File_system { case Packet_descriptor::WRITE: res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/libports/src/server/fuse_fs/fuse_fs_main.cc b/repos/libports/src/server/fuse_fs/fuse_fs_main.cc index 35efa958f..79b81b41e 100644 --- a/repos/libports/src/server/fuse_fs/fuse_fs_main.cc +++ b/repos/libports/src/server/fuse_fs/fuse_fs_main.cc @@ -86,6 +86,10 @@ class File_system::Session_component : public Session_rpc_object res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/os/include/file_system_session/file_system_session.h b/repos/os/include/file_system_session/file_system_session.h index 74db13e22..d02f63941 100644 --- a/repos/os/include/file_system_session/file_system_session.h +++ b/repos/os/include/file_system_session/file_system_session.h @@ -1,11 +1,13 @@ /* * \brief File-system session interface * \author Norman Feske + * \author Emery Hemingway + * \author Christian Helmuth * \date 2012-04-05 */ /* - * Copyright (C) 2012-2016 Genode Labs GmbH + * Copyright (C) 2012-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. @@ -117,7 +119,7 @@ class File_system::Packet_descriptor : public Genode::Packet_descriptor { public: - enum Opcode { READ, WRITE }; + enum Opcode { READ, WRITE, READ_READY }; private: diff --git a/repos/os/src/server/lx_fs/main.cc b/repos/os/src/server/lx_fs/main.cc index 7e0963f7e..0f974bc95 100644 --- a/repos/os/src/server/lx_fs/main.cc +++ b/repos/os/src/server/lx_fs/main.cc @@ -77,6 +77,10 @@ class File_system::Session_component : public Session_rpc_object case Packet_descriptor::WRITE: res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/os/src/server/ram_fs/main.cc b/repos/os/src/server/ram_fs/main.cc index 2c08f7f34..0375e1cf7 100644 --- a/repos/os/src/server/ram_fs/main.cc +++ b/repos/os/src/server/ram_fs/main.cc @@ -83,6 +83,10 @@ class File_system::Session_component : public Session_rpc_object case Packet_descriptor::WRITE: res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/os/src/server/trace_fs/main.cc b/repos/os/src/server/trace_fs/main.cc index f23e84e4c..8fe4cf379 100644 --- a/repos/os/src/server/trace_fs/main.cc +++ b/repos/os/src/server/trace_fs/main.cc @@ -668,6 +668,10 @@ class File_system::Session_component : public Session_rpc_object case Packet_descriptor::WRITE: res_length = node.write((char const *)content, length, offset); break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length); diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc index 754572069..e4c88cb66 100644 --- a/repos/os/src/server/vfs/main.cc +++ b/repos/os/src/server/vfs/main.cc @@ -1,11 +1,12 @@ /* * \brief VFS File_system server * \author Emery Hemingway + * \author Christian Helmuth * \date 2015-08-16 */ /* - * Copyright (C) 2015-2016 Genode Labs GmbH + * Copyright (C) 2015-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. @@ -139,6 +140,10 @@ class Vfs_server::Session_component : res_length = node.write(_vfs, (char const *)content, length, seek); }); } catch (...) { } break; + + case Packet_descriptor::READ_READY: + /* not supported */ + break; } packet.length(res_length);