From: Fotis Xenakis <[email protected]>
Committer: Waldemar Kozaczuk <[email protected]>
Branch: master

virtio-fs: minor driver code improvements

Signed-off-by: Fotis Xenakis <[email protected]>
Message-Id: 
<am0pr03mb629203a23a47480e05c4479da6...@am0pr03mb6292.eurprd03.prod.outlook.com>

---
diff --git a/drivers/virtio-fs.cc b/drivers/virtio-fs.cc
--- a/drivers/virtio-fs.cc
+++ b/drivers/virtio-fs.cc
@@ -5,28 +5,20 @@
  * BSD license as described in the LICENSE file in the top-level directory.
  */
 
-#include <sys/cdefs.h>
-
-#include "drivers/virtio.hh"
-#include "drivers/virtio-fs.hh"
-#include <osv/interrupt.hh>
-
-#include <osv/mempool.hh>
-#include <osv/mmu.hh>
-
 #include <string>
-#include <string.h>
-#include <map>
-#include <errno.h>
-#include <osv/debug.h>
-
-#include <osv/sched.hh>
-#include "osv/trace.hh"
-#include "osv/aligned_new.hh"
 
+#include <osv/debug.h>
 #include <osv/device.h>
+#include <osv/interrupt.hh>
+#include <osv/mmio.hh>
+#include <osv/msi.hh>
+#include <osv/sched.hh>
 
-using namespace memory;
+#include "drivers/pci-device.hh"
+#include "drivers/virtio.hh"
+#include "drivers/virtio-fs.hh"
+#include "drivers/virtio-vring.hh"
+#include "fs/virtiofs/fuse_kernel.h"
 
 using fuse_request = virtio::fs::fuse_request;
 
@@ -48,25 +40,25 @@ void fs::fuse_request::done()
     }
 }
 
-static void fuse_req_enqueue_input(vring* queue, fuse_request* req)
+static void fuse_req_enqueue_input(vring& queue, fuse_request& req)
 {
     // Header goes first
-    queue->add_out_sg(&req->in_header, sizeof(struct fuse_in_header));
+    queue.add_out_sg(&req.in_header, sizeof(struct fuse_in_header));
 
     // Add fuse in arguments as out sg
-    if (req->input_args_size > 0) {
-        queue->add_out_sg(req->input_args_data, req->input_args_size);
+    if (req.input_args_size > 0) {
+        queue.add_out_sg(req.input_args_data, req.input_args_size);
     }
 }
 
-static void fuse_req_enqueue_output(vring* queue, fuse_request* req)
+static void fuse_req_enqueue_output(vring& queue, fuse_request& req)
 {
     // Header goes first
-    queue->add_in_sg(&req->out_header, sizeof(struct fuse_out_header));
+    queue.add_in_sg(&req.out_header, sizeof(struct fuse_out_header));
 
     // Add fuse out arguments as in sg
-    if (req->output_args_size > 0) {
-        queue->add_in_sg(req->output_args_data, req->output_args_size);
+    if (req.output_args_size > 0) {
+        queue.add_in_sg(req.output_args_data, req.output_args_size);
     }
 }
 
@@ -194,7 +186,7 @@ void fs::req_done()
     auto* queue = get_virt_queue(VQ_REQUEST);
 
     while (true) {
-        virtio_driver::wait_for_queue(queue, &vring::used_ring_not_empty);
+        wait_for_queue(queue, &vring::used_ring_not_empty);
 
         fuse_request* req;
         u32 len;
@@ -210,26 +202,21 @@ void fs::req_done()
     }
 }
 
-int fs::make_request(fuse_request* req)
+int fs::make_request(fuse_request& req)
 {
-    // The lock is here for parallel requests protection
-    WITH_LOCK(_lock) {
-        if (!req) {
-            return EIO;
-        }
-
-        auto* queue = get_virt_queue(VQ_REQUEST);
+    auto* queue = get_virt_queue(VQ_REQUEST);
 
+    WITH_LOCK(_lock) {
         queue->init_sg();
 
-        fuse_req_enqueue_input(queue, req);
-        fuse_req_enqueue_output(queue, req);
+        fuse_req_enqueue_input(*queue, req);
+        fuse_req_enqueue_output(*queue, req);
 
-        queue->add_buf_wait(req);
+        queue->add_buf_wait(&req);
         queue->kick();
-
-        return 0;
     }
+
+    return 0;
 }
 
 hw_driver* fs::probe(hw_device* dev)
diff --git a/drivers/virtio-fs.hh b/drivers/virtio-fs.hh
--- a/drivers/virtio-fs.hh
+++ b/drivers/virtio-fs.hh
@@ -10,9 +10,12 @@
 
 #include <functional>
 
+#include <osv/mmio.hh>
 #include <osv/mutex.h>
 #include <osv/waitqueue.hh>
 
+#include "drivers/device.hh"
+#include "drivers/driver.hh"
 #include "drivers/virtio.hh"
 #include "drivers/virtio-device.hh"
 #include "fs/virtiofs/fuse_kernel.h"
@@ -67,7 +70,7 @@ public:
     virtual std::string get_name() const { return _driver_name; }
     void read_config();
 
-    int make_request(fuse_request*);
+    int make_request(fuse_request&);
     dax_window* get_dax() {
         return (_dax.addr != mmio_nullptr) ? &_dax : nullptr;
     }
@@ -94,8 +97,9 @@ private:
     // maintains the virtio instance number for multiple drives
     static int _instance;
     int _id;
+
     // This mutex protects parallel make_request invocations
-    mutex _lock;
+    mutex _lock;    // TODO: Maintain one mutex per virtqueue
 };
 
 }
diff --git a/fs/virtiofs/virtiofs_vfsops.cc b/fs/virtiofs/virtiofs_vfsops.cc
--- a/fs/virtiofs/virtiofs_vfsops.cc
+++ b/fs/virtiofs/virtiofs_vfsops.cc
@@ -52,7 +52,7 @@ int fuse_req_send_and_receive_reply(virtio::fs* drv, uint32_t 
opcode,
     req->output_args_size = output_args_size;
 
     assert(drv);
-    drv->make_request(req.get());
+    drv->make_request(*req);
     req->wait();
 
     int error = -req->out_header.error;

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/0000000000006887fb05aa5a0c1d%40google.com.

Reply via email to