ZFS: Changes.

This commit is contained in:
Alastair Poole 2020-06-08 10:39:43 +01:00
parent f5e8d5e6de
commit b8e8164f85
6 changed files with 39 additions and 30 deletions

View File

@ -87,30 +87,6 @@ _cmp_cb(const void *p1, const void *p2)
return strcmp(s1, s2);
}
Eina_Bool
disk_zfs_mounted_get(void)
{
Eina_List *disks;
char *path;
Eina_Bool zfs_mounted = EINA_FALSE;
disks = disks_get();
EINA_LIST_FREE(disks, path)
{
Filesystem_Info *fs = filesystem_info_get(path);
if (fs)
{
if (fs->type == filesystem_id_by_name("ZFS"))
zfs_mounted = EINA_TRUE;
filesystem_info_free(fs);
}
free(path);
}
return zfs_mounted;
}
Eina_List *
disks_get(void)
{

View File

@ -2,11 +2,6 @@
#define __DISKS_H__
#include "filesystems.h"
#include <Eina.h>
#include <Ecore.h>
Eina_Bool
disk_zfs_mounted_get(void);
char *
disk_mount_point_get(const char *path);

View File

@ -158,3 +158,28 @@ filesystem_info_free(Filesystem_Info *fs)
free(fs);
}
Eina_Bool
filesystem_in_use(const char *name)
{
Eina_List *disks;
char *path;
Eina_Bool fs_mounted = EINA_FALSE;
if (!name) return EINA_FALSE;
disks = disks_get();
EINA_LIST_FREE(disks, path)
{
Filesystem_Info *fs = filesystem_info_get(path);
if (fs)
{
if (fs->type == filesystem_id_by_name(name))
fs_mounted = EINA_TRUE;
filesystem_info_free(fs);
}
free(path);
}
return fs_mounted;
}

View File

@ -1,6 +1,8 @@
#ifndef __FILESYSTEMS_H__
#define __FILESYSTEMS_H__
#include <Eina.h>
typedef struct {
unsigned long long total;
unsigned long long used;
@ -25,4 +27,7 @@ filesystem_info_get(const char *path);
void
filesystem_info_free(Filesystem_Info *fs);
Eina_Bool
filesystem_in_use(const char *name);
#endif

View File

@ -1684,7 +1684,8 @@ _ui_init(Evas_Object *parent)
ui->cpu_times = NULL;
ui->cpu_list = NULL;
ui->zfs_mounted = disk_zfs_mounted_get();
// Only take account of the ZFS ARC if there is an active mount.
ui->zfs_mounted = filesystem_in_use("ZFS");
_ui = NULL;
_evisum_config = NULL;

View File

@ -96,6 +96,7 @@ ui_tab_disk_update(Ui *ui)
if (!ui->disk_visible)
return;
// FIXME
elm_box_clear(ui->disk_activity);
disks = disks_get();
@ -104,6 +105,9 @@ ui_tab_disk_update(Ui *ui)
Filesystem_Info *fs = filesystem_info_get(path);
if (fs)
{
// ZFS usage may have changed during application's lifetime.
// Keep track of ZFS mounts else we may report bogus use
// of memory.
if (fs->type == filesystem_id_by_name("ZFS"))
zfs_mounted = EINA_TRUE;
@ -115,6 +119,9 @@ ui_tab_disk_update(Ui *ui)
if (disks)
eina_list_free(disks);
// Need to keep track of ZFS mounts. If we have no mounts
// then memory usage should not take into account the ZFS
// ARC memory allocation.
if (!zfs_mounted) ui->zfs_mounted = EINA_FALSE;
}