diff --git a/SOURCES/0002-fileio-backstore-fix-sparse-file-creation.patch b/SOURCES/0002-fileio-backstore-fix-sparse-file-creation.patch new file mode 100644 index 0000000..49951f0 --- /dev/null +++ b/SOURCES/0002-fileio-backstore-fix-sparse-file-creation.patch @@ -0,0 +1,55 @@ +From 3176671662bda79d4b4059b8cc22b4b31a6547e0 Mon Sep 17 00:00:00 2001 +From: Maurizio Lombardi +Date: Fri, 13 Nov 2020 11:44:40 +0100 +Subject: [PATCH] fileio backstore: fix sparse file creation + +fallocate() can't be used to create sparse files because it +actually preallocates all the disk space that will be used by the file +backstore, sparse files do not have preallocated disk space +by definition. +We must therefore use ftruncate(). + +We can, on the other hand, use fallocate() to create non-sparse +files and fall back to the slower "while() fwrite()" if we +are running on Python version < 3.3 where fallocate() is not available + +Fixes 3bd4d8ef7c9b154c53e8b8dd863a570bce7f5c2c + +Signed-off-by: Maurizio Lombardi +--- + targetcli/ui_backstore.py | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/targetcli/ui_backstore.py b/targetcli/ui_backstore.py +index 8692f22..9bc0c58 100644 +--- a/targetcli/ui_backstore.py ++++ b/targetcli/ui_backstore.py +@@ -423,17 +423,17 @@ class UIFileIOBackstore(UIBackstore): + raise ExecutionError("Could not open %s" % filename) + try: + if sparse: ++ os.ftruncate(f.fileno(), size) ++ else: ++ self.shell.log.info("Writing %d bytes" % size) + try: ++ # Prior to version 3.3, Python does not provide fallocate + os.posix_fallocate(f.fileno(), 0, size) + except AttributeError: +- # Prior to version 3.3, Python does not provide fallocate +- os.ftruncate(f.fileno(), size) +- else: +- self.shell.log.info("Writing %d bytes" % size) +- while size > 0: +- write_size = min(size, 1024) +- f.write("\0" * write_size) +- size -= write_size ++ while size > 0: ++ write_size = min(size, 1024) ++ f.write("\0" * write_size) ++ size -= write_size + except (OSError, IOError): + os.remove(filename) + raise ExecutionError("Could not expand file to %d bytes" % size) +-- +2.28.0 + diff --git a/SPECS/targetcli.spec b/SPECS/targetcli.spec index 0afbdf2..89fd561 100644 --- a/SPECS/targetcli.spec +++ b/SPECS/targetcli.spec @@ -5,10 +5,11 @@ License: ASL 2.0 Group: System Environment/Libraries Summary: An administration shell for storage targets Version: 2.1.53 -Release: 1%{?dist} +Release: 2%{?dist} URL: https://github.com/open-iscsi/%{oname} Source: %{url}/archive/v%{version}/%{oname}-%{version}.tar.gz Patch0: 0001-setup.py-add-the-socket-and-service-files-to-the-dat.patch +Patch1: 0002-fileio-backstore-fix-sparse-file-creation.patch BuildArch: noarch BuildRequires: python3-devel, python3-setuptools Requires: python3-rtslib, target-restore, python3-configshell, python3-six, python3-dbus, python3-gobject-base @@ -23,6 +24,7 @@ users will also need to install and use fcoe-utils. %prep %setup -q -n %{oname}-%{version} %patch0 -p1 +%patch1 -p1 %build %{__python3} setup.py build @@ -52,6 +54,9 @@ install -m 644 targetclid.8.gz %{buildroot}%{_mandir}/man8/ %{_usr}/lib/systemd/system/targetclid.socket %changelog +* Tue Dec 01 2020 Maurizio Lombardi - 2.1.53-2 +- Fix sparse file creation + * Thu Jun 25 2020 Maurizio Lombardi - 2.1.53-1 - Update to new upstream version