diff --git a/quota/quota-lib.pl b/quota/quota-lib.pl index 6ea6a4a0a..265c8e7b3 100755 --- a/quota/quota-lib.pl +++ b/quota/quota-lib.pl @@ -508,25 +508,31 @@ returned by this function before display to users. =cut sub block_size { +my ($dir, $forfs) = @_; +$forfs ||= 0; return undef if (!$config{'block_mode'}); return undef if (!defined("a_block_size) && !defined(&fs_block_size)); -local @mounts = &mount::list_mounted(); -local ($mount) = grep { $_->[0] eq $_[0] } @mounts; -if ($mount) { - if ($_[1]) { - return &fs_block_size(@$mount); - } - else { - if (defined("a_block_size)) { - return "a_block_size(@$mount); +if (!exists($block_size_cache{$dir,$forfs})) { + my @mounts = &mount::list_mounted(); + my ($mount) = grep { $_->[0] eq $dir } @mounts; + my $rv = undef; + if ($mount) { + if ($forfs) { + $rv = &fs_block_size(@$mount); } else { - return &fs_block_size(@$mount); + if (defined("a_block_size)) { + $rv = "a_block_size(@$mount); + } + else { + $rv = &fs_block_size(@$mount); + } } } + $block_size_cache{$dir,$forfs} = $rv; } -return undef; +return $block_size_cache{$dir,$forfs}; } =head2 nice_limit(amount, bsize, no-blocks)