about summary refs log tree commit diff
path: root/pkgs/tools/misc/woeusb
diff options
context:
space:
mode:
authorMichael Hoang <enzime@users.noreply.github.com>2019-10-09 13:00:25 +1100
committerBjørn Forsman <bjorn.forsman@gmail.com>2019-10-11 08:00:35 +0200
commit0277cc1f1cb2d4becbb6e4c5f3699c0bcd8ccb95 (patch)
tree75d96632219bee304a73ec857da77f8e397c82eb /pkgs/tools/misc/woeusb
parentc82c6d3a1201ff99065330709f2ce760a6e7434c (diff)
WoeUSB: Remove writeback buffering workaround
WoeUSB contains a writeback buffering workaround for 64-bit Linux
systems, however this workaround relies on setting
/proc/sys/vm/dirty_background_bytes which no longer works on newer
versions of the Linux kernel.
Diffstat (limited to 'pkgs/tools/misc/woeusb')
-rw-r--r--pkgs/tools/misc/woeusb/default.nix2
-rw-r--r--pkgs/tools/misc/woeusb/remove-workaround.patch82
2 files changed, 84 insertions, 0 deletions
diff --git a/pkgs/tools/misc/woeusb/default.nix b/pkgs/tools/misc/woeusb/default.nix
index f25034dd8cda2..cc53b26e23882 100644
--- a/pkgs/tools/misc/woeusb/default.nix
+++ b/pkgs/tools/misc/woeusb/default.nix
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sha256 = "1w3m3qbjn0igydsbpf22w29lzf1pkxv7dlny5mbyrb6j0q6wlx0b";
   };
 
+  patches = [ ./remove-workaround.patch ];
+
   nativeBuildInputs = [ autoreconfHook makeWrapper ];
   buildInputs = [ wxGTK30 ];
 
diff --git a/pkgs/tools/misc/woeusb/remove-workaround.patch b/pkgs/tools/misc/woeusb/remove-workaround.patch
new file mode 100644
index 0000000000000..094da2cb2bc1d
--- /dev/null
+++ b/pkgs/tools/misc/woeusb/remove-workaround.patch
@@ -0,0 +1,82 @@
+From 3cf93fd595bd3fca98c98a0bdc8fc86b36ee1403 Mon Sep 17 00:00:00 2001
+From: Michael Hoang <enzime@users.noreply.github.com>
+Date: Wed, 9 Oct 2019 12:42:53 +1100
+Subject: [PATCH] Remove writeback buffering workaround
+
+---
+ src/woeusb | 45 ---------------------------------------------
+ 1 file changed, 45 deletions(-)
+
+diff --git a/src/woeusb b/src/woeusb
+index 3284259..0d3ea20 100755
+--- a/src/woeusb
++++ b/src/woeusb
+@@ -308,9 +308,6 @@ init(){
+ 
+ 	current_state=copying-filesystem
+ 
+-	workaround_linux_make_writeback_buffering_not_suck \
+-		apply
+-
+ 	copy_filesystem_files \
+ 		"${source_fs_mountpoint}" \
+ 		"${target_fs_mountpoint}" \
+@@ -1650,41 +1647,6 @@ workaround_support_windows_7_uefi_boot(){
+ 		> "${efi_boot_directory}/bootx64.efi"
+ }; declare -fr workaround_support_windows_7_uefi_boot
+ 
+-## Currently WoeUSB indirectly causes severely unresponsive system on 64-bit architecture with large primary memory during file copy process due to a flaw of the writeback buffer size handling in Linux kernel, workaround it before it is fixed
+-## Refer: 
+-## - System lagging while copying data · Issue #113 · slacka/WoeUSB <https://github.com/slacka/WoeUSB/issues/113>
+-## - The pernicious USB-stick stall problem [LWN.net] <https://lwn.net/Articles/572911/>
+-workaround_linux_make_writeback_buffering_not_suck(){
+-	util_check_function_parameters_quantity 1 "${#}"
+-	local -r mode="${1}"
+-
+-	local -ir VM_DIRTY_BACKGROUND_BYTES=$((16*1024*1024)) # 16MiB
+-	local -ir VM_DIRTY_BYTES=$((48*1024*1024)) # 48MiB
+-
+-	case "${mode}" in
+-		apply)
+-			echo_with_color \
+-				yellow \
+-				'Applying workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.'
+-			echo "${VM_DIRTY_BACKGROUND_BYTES}" > /proc/sys/vm/dirty_background_bytes
+-			echo "${VM_DIRTY_BYTES}" > /proc/sys/vm/dirty_bytes
+-		;;
+-		reset)
+-			echo_with_color \
+-				yellow \
+-				'Resetting workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.'
+-			echo 0 > /proc/sys/vm/dirty_background_bytes
+-			echo 0 > /proc/sys/vm/dirty_bytes
+-		;;
+-		*)
+-			printf_with_color \
+-				red \
+-				'Fatal: %s: Unexpected *mode* encountered, please report bug.\n' \
+-				"${FUNCNAME[0]}"
+-		;;
+-	esac
+-}; declare -fr workaround_linux_make_writeback_buffering_not_suck
+-
+ install_legacy_pc_bootloader_grub(){
+ 	util_check_function_parameters_quantity 3 "${#}"
+ 	local -r target_fs_mountpoint="${1}"; shift 1
+@@ -1836,13 +1798,6 @@ trap_exit(){
+ 		off \
+ 		"${global_only_for_gui}"
+ 
+-	case "${current_state}" in
+-		copying-filesystem|finished)
+-			workaround_linux_make_writeback_buffering_not_suck \
+-				reset
+-		;;
+-	esac
+-
+ 	if util_is_parameter_set_and_not_empty \
+ 		source_fs_mountpoint; then
+ 		if ! cleanup_mountpoint  \
+-- 
+2.23.0
+