diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py index 9f0525f1e..ac21e730c 100644 --- a/blivet/formats/fs.py +++ b/blivet/formats/fs.py @@ -192,6 +192,14 @@ def dict(self): "mountable": self.mountable}) return d + @classmethod + def _compression_size_factor(cls): + """ Adjust free space estimate for transparent compression. + Classes for filesystems that implement transparent compression + can override this. + """ + return 1 + @classmethod def free_space_estimate(cls, device_size): """ Get estimated free space when format will be done on device @@ -207,7 +215,7 @@ def free_space_estimate(cls, device_size): :return: estimated free size after format :rtype: :class:`~.size.Size` """ - return device_size * cls._metadata_size_factor + return device_size * cls._metadata_size_factor * cls._compression_size_factor() @classmethod def get_required_size(cls, free_space): @@ -1108,6 +1116,16 @@ def _pre_process_subvolnames(subvols): return False return True + @classmethod + def _compression_size_factor(cls): + """ Adjust free space estimate for transparent compression. + We estimate 40% 'additional space' if it's enabled (this is + pretty conservative). + """ + if flags.btrfs_compression: + return 1.40 + return 1 + register_device_format(BTRFS)