From: Fotis Xenakis <fo...@windowslive.com>
Committer: Waldemar Kozaczuk <jwkozac...@gmail.com>
Branch: master

virtio-fs: minor driver code improvements

Signed-off-by: Fotis Xenakis <fo...@windowslive.com>
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 osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/0000000000006887fb05aa5a0c1d%40google.com.

Reply via email to