From: Waldemar Kozaczuk <jwkozac...@gmail.com>
Committer: Nadav Har'El <n...@scylladb.com>
Branch: master

Added blocksize to httpserver-api fs/df call

Added blocksize property to the payload of httpserver-api fs/df call
to make it possible to calculate free and total size of given mount in bytes.
Also replaced statfs with more universal statvfs call.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
Message-Id: <1506821067-4890-1-git-send-email-jwkozac...@gmail.com>

---
diff --git a/modules/httpserver-api/api-doc/listings/fs.json b/modules/httpserver-api/api-doc/listings/fs.json
--- a/modules/httpserver-api/api-doc/listings/fs.json
+++ b/modules/httpserver-api/api-doc/listings/fs.json
@@ -87,6 +87,10 @@
                 "ffree" : {
                     "type": "long",
                     "description": "free file nodes in file system"
+                },
+                "blocksize" : {
+                    "type": "long",
+                    "description": "block size in bytes"
                 }
             }
         }
diff --git a/modules/httpserver-api/api/fs.cc b/modules/httpserver-api/api/fs.cc
--- a/modules/httpserver-api/api/fs.cc
+++ b/modules/httpserver-api/api/fs.cc
@@ -11,7 +11,7 @@
 #include "autogen/fs.json.hh"
 #include <string>
 #include <vector>
-#include <sys/vfs.h>
+#include <sys/statvfs.h>

 namespace httpserver {

@@ -23,13 +23,14 @@ using namespace std;
 using namespace json;
 using namespace fs_json;

-static void fill_dfstat(DFStat& dfstat, const osv::mount_desc& mount, const struct statfs& st) { +static void fill_dfstat(DFStat& dfstat, const osv::mount_desc& mount, const struct statvfs& st) {
     dfstat.filesystem = mount.special;
     dfstat.mount = mount.path;
     dfstat.btotal = st.f_blocks;
     dfstat.bfree = st.f_bfree;
     dfstat.ftotal = st.f_files;
     dfstat.ffree = st.f_ffree;
+    dfstat.blocksize = st.f_frsize;
 }

extern "C" void httpserver_plugin_register_routes(httpserver::routes* routes) {
@@ -45,13 +46,13 @@ void init(routes& routes) {
     {
         using namespace osv;
         const std::string onemount = req.param.at("mount");
-        struct statfs st;
+        struct statvfs st;
         httpserver::json::DFStat dfstat;
         vector<httpserver::json::DFStat> dfstats;

         for (mount_desc mount : osv::current_mounts()) {
if (mount.type == "zfs" && (onemount == "" || onemount == mount.path)) {
-                if (statfs(mount.path.c_str(),&st) != 0) {
+                if (statvfs(mount.path.c_str(),&st) != 0) {
                     throw not_found_exception("mount does not exist");
                 }
                 fill_dfstat(dfstat, mount, st);
@@ -69,13 +70,13 @@ void init(routes& routes) {

     list_df_stats.set_handler([](const_req req)
         {
-            struct statfs st;
+            struct statvfs st;
             httpserver::json::DFStat dfstat;
             vector<httpserver::json::DFStat> res;

             for (osv::mount_desc mount : osv::current_mounts()) {
                 if (mount.type == "zfs") {
-                    if (statfs(mount.path.c_str(),&st) == 0) {
+                    if (statvfs(mount.path.c_str(),&st) == 0) {
                         fill_dfstat(dfstat, mount, st);
                         res.push_back(dfstat);
                     }

--
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to