mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-30 02:00:19 +00:00
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
|
package cephfs
|
||
|
|
||
|
/*
|
||
|
#cgo LDFLAGS: -lcephfs
|
||
|
#cgo CPPFLAGS: -D_FILE_OFFSET_BITS=64
|
||
|
#include <stdlib.h>
|
||
|
#include <cephfs/libcephfs.h>
|
||
|
*/
|
||
|
import "C"
|
||
|
|
||
|
import (
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
// CephStatVFS instances are returned from the StatFS call. It reports
|
||
|
// file-system wide statistics.
|
||
|
type CephStatVFS struct {
|
||
|
// Bsize reports the file system's block size.
|
||
|
Bsize int64
|
||
|
// Fragment reports the file system's fragment size.
|
||
|
Frsize int64
|
||
|
// Blocks reports the number of blocks in the file system.
|
||
|
Blocks uint64
|
||
|
// Bfree reports the number of free blocks.
|
||
|
Bfree uint64
|
||
|
// Bavail reports the number of free blocks for unprivileged users.
|
||
|
Bavail uint64
|
||
|
// Files reports the number of inodes in the file system.
|
||
|
Files uint64
|
||
|
// Ffree reports the number of free indoes.
|
||
|
Ffree uint64
|
||
|
// Favail reports the number of free indoes for unprivileged users.
|
||
|
Favail uint64
|
||
|
// Fsid reports the file system ID number.
|
||
|
Fsid int64
|
||
|
// Flag reports the file system mount flags.
|
||
|
Flag int64
|
||
|
// Namemax reports the maximum file name length.
|
||
|
Namemax int64
|
||
|
}
|
||
|
|
||
|
// StatFS returns file system wide statistics.
|
||
|
// NOTE: Many of the statistics fields reported by ceph are not filled in with
|
||
|
// useful values.
|
||
|
//
|
||
|
// Implements:
|
||
|
//
|
||
|
// int ceph_statfs(struct ceph_mount_info *cmount, const char *path, struct statvfs *stbuf);
|
||
|
func (mount *MountInfo) StatFS(path string) (*CephStatVFS, error) {
|
||
|
if err := mount.validate(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
cPath := C.CString(path)
|
||
|
defer C.free(unsafe.Pointer(cPath))
|
||
|
|
||
|
var statvfs C.struct_statvfs
|
||
|
ret := C.ceph_statfs(mount.mount, cPath, &statvfs)
|
||
|
if ret != 0 {
|
||
|
return nil, getError(ret)
|
||
|
}
|
||
|
csfs := &CephStatVFS{
|
||
|
Bsize: int64(statvfs.f_bsize),
|
||
|
Frsize: int64(statvfs.f_frsize),
|
||
|
Blocks: uint64(statvfs.f_blocks),
|
||
|
Bfree: uint64(statvfs.f_bfree),
|
||
|
Bavail: uint64(statvfs.f_bavail),
|
||
|
Files: uint64(statvfs.f_files),
|
||
|
Ffree: uint64(statvfs.f_ffree),
|
||
|
Favail: uint64(statvfs.f_favail),
|
||
|
Fsid: int64(statvfs.f_fsid),
|
||
|
Flag: int64(statvfs.f_flag),
|
||
|
Namemax: int64(statvfs.f_namemax),
|
||
|
}
|
||
|
return csfs, nil
|
||
|
}
|