From: Fabian Maurer Subject: Re: [PATCH v3 0/5] Implement reflink support Message-Id: <5614710.DvuYhMxLoT@arch> Date: Thu, 27 Jan 2022 23:24:11 +0100 In-Reply-To: <20220127215056.243525-1-alex_y_xu@yahoo.ca> References: <20220127215056.243525-1-alex_y_xu.ref@yahoo.ca> <20220127215056.243525-1-alex_y_xu@yahoo.ca> Hello, first, thanks for working on this, would be a welcome improvement! Do I understand that right that it wouldn't work for ext4 and there's not really anything we could do to support it? Regards, Fabian Maurer On Donnerstag, 27. Januar 2022 22:50:51 CET Alex Xu (Hello71) wrote: > Over the years, Wine prefixes have gotten bigger and bigger, for a > number of reasons. Creating a new Wine prefix for each application is > still the current recommendation, as despite the best efforts of Wine > developers, some applications still require system-wide workarounds. > This leads to significant bloat for each application installed. With a > MinGW build of Wine without Mono or Gecko, new 32-bit prefixes are over > 150 MB, and new 64-bit prefixes are over 300 MB. The vast majority of > these files are byte-for-byte identical to Wine's central DLL copies. > > This patch set implements reflink support in Wine via the > copy_file_range syscall. The reasons for selecting copy_file_range over > FICLONE are outlined in patch 2. A previous unpublished version of this > patch set used FICLONERANGE, but it was less convenient to use from > setupapi and has inferior system support. > > When reflink is supported by the underlying filesystem, new Wine prefix > sizes with Mono and Gecko disabled are reduced to less than 1 MB. The > resulting Wine prefix is byte-for-byte identical to one created without > reflink, but occupies less space on disk. If hard links or symlinks were > used, if an application such as winetricks writes to a system file, it > would overwrite the central copy. With reflink, the file blocks will be > transparently copied by the Linux kernel so that each Wine prefix can be > independent. > > Some files cannot be deduplicated in the current Wine system, as they > are dynamically generated during the Wine prefix installation process. > These include 16-bit fake DLLs and manifest files. In theory, it should > be possible to pre-generate these files, but considering the Wine prefix > size is already reduced to less than 1 MB, the extra space savings are > likely not worth the effort. > > v1->v2: Fix/improve errno handling. > v2->v3: Rebase. > > Alex Xu (Hello71) (5): > ntdll: add support for IOCTL_COPYCHUNK. > kernelbase: use IOCTL_COPYCHUNK in CopyFile* > setupapi: Use IOCTL_COPYCHUNK, avoid buffering whole file > lmshare.h: define STYPE_TEMPORARY > kernel32/tests: add IOCTL_COPYCHUNK test > > configure | 6 ++ > configure.ac | 1 + > dlls/kernel32/tests/file.c | 137 +++++++++++++++++++++++++ > dlls/kernelbase/file.c | 44 ++++----- > dlls/ntdll/unix/file.c | 121 +++++++++++++++++++++++ > dlls/setupapi/fakedll.c | 198 ++++++++++++++++++++----------------- > include/config.h.in | 3 + > include/lmshare.h | 11 ++- > include/winioctl.h | 34 +++++++ > 9 files changed, 434 insertions(+), 121 deletions(-)