From 40be5c5cab097df9f70e93521c79cf0765b765f7 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Tue, 26 Jan 2021 12:45:21 +0100 Subject: [PATCH] Diskmanage: introduce get_sysdir_size helper to be used for partitions as well. Signed-off-by: Fabian Ebner --- PVE/Diskmanage.pm | 18 ++++++++++++------ test/disk_tests/usages/sdd/sdd1/size | 1 + test/disk_tests/usages/sdd/sdd2/size | 1 + test/disk_tests/usages/sde/sde1/size | 1 + test/disk_tests/usages/sdf/sdf1/size | 1 + test/disk_tests/usages/sdm/sdm1/size | 1 + test/disk_tests/usages/sdm/sdm9/size | 1 + test/disklist_test.pm | 12 ++++++++++++ 8 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 test/disk_tests/usages/sdd/sdd1/size create mode 100644 test/disk_tests/usages/sdd/sdd2/size create mode 100644 test/disk_tests/usages/sde/sde1/size create mode 100644 test/disk_tests/usages/sdf/sdf1/size create mode 100644 test/disk_tests/usages/sdm/sdm1/size create mode 100644 test/disk_tests/usages/sdm/sdm9/size diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index 94ec93a..95aba12 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -368,6 +368,17 @@ sub get_udev_info { return $data; } +sub get_sysdir_size { + my ($sysdir) = @_; + + my $size = file_read_firstline("$sysdir/size"); + return if !$size; + + # linux always considers sectors to be 512 bytes, + # independently of real block size + return $size * 512; +} + sub get_sysdir_info { my ($sysdir) = @_; @@ -375,12 +386,7 @@ sub get_sysdir_info { my $data = {}; - my $size = file_read_firstline("$sysdir/size"); - return undef if !$size; - - # linux always considers sectors to be 512 bytes, - # independently of real block size - $data->{size} = $size * 512; + $data->{size} = get_sysdir_size($sysdir) or return; # dir/queue/rotational should be 1 for hdd, 0 for ssd $data->{rotational} = file_read_firstline("$sysdir/queue/rotational") // -1; diff --git a/test/disk_tests/usages/sdd/sdd1/size b/test/disk_tests/usages/sdd/sdd1/size new file mode 100644 index 0000000..83b33d2 --- /dev/null +++ b/test/disk_tests/usages/sdd/sdd1/size @@ -0,0 +1 @@ +1000 diff --git a/test/disk_tests/usages/sdd/sdd2/size b/test/disk_tests/usages/sdd/sdd2/size new file mode 100644 index 0000000..8bd1af1 --- /dev/null +++ b/test/disk_tests/usages/sdd/sdd2/size @@ -0,0 +1 @@ +2000 diff --git a/test/disk_tests/usages/sde/sde1/size b/test/disk_tests/usages/sde/sde1/size new file mode 100644 index 0000000..13de30f --- /dev/null +++ b/test/disk_tests/usages/sde/sde1/size @@ -0,0 +1 @@ +3000 diff --git a/test/disk_tests/usages/sdf/sdf1/size b/test/disk_tests/usages/sdf/sdf1/size new file mode 100644 index 0000000..13de30f --- /dev/null +++ b/test/disk_tests/usages/sdf/sdf1/size @@ -0,0 +1 @@ +3000 diff --git a/test/disk_tests/usages/sdm/sdm1/size b/test/disk_tests/usages/sdm/sdm1/size new file mode 100644 index 0000000..83b33d2 --- /dev/null +++ b/test/disk_tests/usages/sdm/sdm1/size @@ -0,0 +1 @@ +1000 diff --git a/test/disk_tests/usages/sdm/sdm9/size b/test/disk_tests/usages/sdm/sdm9/size new file mode 100644 index 0000000..8bd1af1 --- /dev/null +++ b/test/disk_tests/usages/sdm/sdm9/size @@ -0,0 +1 @@ +2000 diff --git a/test/disklist_test.pm b/test/disklist_test.pm index 9cb6763..bfce1ea 100644 --- a/test/disklist_test.pm +++ b/test/disklist_test.pm @@ -87,6 +87,16 @@ sub mocked_get_sysdir_info { return &$originalsub($param); } +sub mocked_get_sysdir_size { + my ($param) = @_; + + my $originalsub = $diskmanage_module->original('get_sysdir_size'); + + $param =~ s|/sys/block|disk_tests/$testcasedir|; + + return &$originalsub($param); +} + sub mocked_is_iscsi { return 0; } @@ -219,6 +229,8 @@ $diskmanage_module->mock('dir_glob_foreach' => \&mocked_dir_glob_foreach); print("\tMocked dir_glob_foreach\n"); $diskmanage_module->mock('get_sysdir_info' => \&mocked_get_sysdir_info); print("\tMocked get_sysdir_info\n"); +$diskmanage_module->mock('get_sysdir_size' => \&mocked_get_sysdir_size); +print("\tMocked get_sysdir_size\n"); $diskmanage_module->mock('is_iscsi' => \&mocked_is_iscsi); print("\tMocked is_iscsi\n"); $diskmanage_module->mock('assert_blockdev' => sub { return 1; });