summaryrefslogtreecommitdiffstats
path: root/src/server/fileutil.c
diff options
context:
space:
mode:
authorSimon Rettberg2017-10-11 16:00:00 +0200
committerSimon Rettberg2017-10-11 16:00:00 +0200
commit84b57000a176f676e2b70b29127455524e578f01 (patch)
tree04f2cd7ab4b867df1f1dce9fcec085c08eeafa4a /src/server/fileutil.c
parent[KERNEL] version check to support pointer to backing_dev_info in request_queue (diff)
downloaddnbd3-84b57000a176f676e2b70b29127455524e578f01.tar.gz
dnbd3-84b57000a176f676e2b70b29127455524e578f01.tar.xz
dnbd3-84b57000a176f676e2b70b29127455524e578f01.zip
[SERVER] rpc: Support querying storage size + available space
Diffstat (limited to 'src/server/fileutil.c')
-rw-r--r--src/server/fileutil.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/server/fileutil.c b/src/server/fileutil.c
index d68649e..d41dc85 100644
--- a/src/server/fileutil.c
+++ b/src/server/fileutil.c
@@ -66,13 +66,19 @@ bool file_alloc(int fd, uint64_t offset, uint64_t size)
return false;
}
-int64_t file_freeDiskSpace(const char * const path)
+bool file_freeDiskSpace(const char * const path, uint64_t *total, uint64_t *avail)
{
struct statvfs fiData;
- if ( (statvfs( path, &fiData )) < 0 ) {
- return -1;
+ if ( statvfs( path, &fiData ) < 0 ) {
+ return false;
}
- return ((int64_t)fiData.f_bavail * (int64_t)fiData.f_bsize);
+ if ( avail != NULL ) {
+ *avail = ((uint64_t)fiData.f_bavail * (uint64_t)fiData.f_frsize);
+ }
+ if ( total != NULL ) {
+ *total = ((uint64_t)fiData.f_blocks * (uint64_t)fiData.f_frsize);
+ }
+ return true;
}
time_t file_lastModification(const char * const file)