From 4dffbaf2d4b99f6bbd89c620cfd7dffd2171b2f9 Mon Sep 17 00:00:00 2001 From: chn Date: Tue, 27 Aug 2024 09:22:06 +0800 Subject: [PATCH] fix build --- flake.lock | 6 +- modules/packages/desktop/default.nix | 2 +- modules/system/kernel/btrfs.patch | 141 --------------------------- modules/system/kernel/default.nix | 10 +- modules/system/nixpkgs.nix | 2 +- 5 files changed, 6 insertions(+), 155 deletions(-) delete mode 100644 modules/system/kernel/btrfs.patch diff --git a/flake.lock b/flake.lock index 89179ac9..b499e7a4 100644 --- a/flake.lock +++ b/flake.lock @@ -915,11 +915,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1724690375, - "narHash": "sha256-ow1HWzTNnbHBUmnIK4kKAt0SR38iyjDObUGwej1soC8=", + "lastModified": 1724805153, + "narHash": "sha256-MFgWuUxpxphKDkymInOSKVvAJMqWhI0Xk+zuhxOrvXU=", "owner": "CHN-beta", "repo": "nixpkgs", - "rev": "7496c107d60dfbbc0c258550bbcc1d0df570aee4", + "rev": "ac7d64c6a94e2d95f91f68df0097184db12364db", "type": "github" }, "original": { diff --git a/modules/packages/desktop/default.nix b/modules/packages/desktop/default.nix index 5a21d55f..9e15a9fe 100644 --- a/modules/packages/desktop/default.nix +++ b/modules/packages/desktop/default.nix @@ -61,7 +61,7 @@ inputs: nix-template nil pnpm-lock-export bundix # instant messager element-desktop telegram-desktop discord fluffychat zoom-us signal-desktop slack nur-linyinfeng.wemeet - cinny-desktop nheko # qq nur-xddxdd.wechat-uos + nheko # qq nur-xddxdd.wechat-uos TODO: cinny-desktop # browser google-chrome tor-browser microsoft-edge # office diff --git a/modules/system/kernel/btrfs.patch b/modules/system/kernel/btrfs.patch deleted file mode 100644 index 4d3016ce..00000000 --- a/modules/system/kernel/btrfs.patch +++ /dev/null @@ -1,141 +0,0 @@ -From ae1e766f623f7a2a889a0b09eb076dd9a60efbe9 Mon Sep 17 00:00:00 2001 -From: Filipe Manana -Date: Sun, 11 Aug 2024 11:53:42 +0100 -Subject: btrfs: only run the extent map shrinker from kswapd tasks - -Currently the extent map shrinker can be run by any task when attempting -to allocate memory and there's enough memory pressure to trigger it. - -To avoid too much latency we stop iterating over extent maps and removing -them once the task needs to reschedule. This logic was introduced in commit -b3ebb9b7e92a ("btrfs: stop extent map shrinker if reschedule is needed"). - -While that solved high latency problems for some use cases, it's still -not enough because with a too high number of tasks entering the extent map -shrinker code, either due to memory allocations or because they are a -kswapd task, we end up having a very high level of contention on some -spin locks, namely: - -1) The fs_info->fs_roots_radix_lock spin lock, which we need to find - roots to iterate over their inodes; - -2) The spin lock of the xarray used to track open inodes for a root - (struct btrfs_root::inodes) - on 6.10 kernels and below, it used to - be a red black tree and the spin lock was root->inode_lock; - -3) The fs_info->delayed_iput_lock spin lock since the shrinker adds - delayed iputs (calls btrfs_add_delayed_iput()). - -Instead of allowing the extent map shrinker to be run by any task, make -it run only by kswapd tasks. This still solves the problem of running -into OOM situations due to an unbounded extent map creation, which is -simple to trigger by direct IO writes, as described in the changelog -of commit 956a17d9d050 ("btrfs: add a shrinker for extent maps"), and -by a similar case when doing buffered IO on files with a very large -number of holes (keeping the file open and creating many holes, whose -extent maps are only released when the file is closed). - -Reported-by: kzd -Link: https://bugzilla.kernel.org/show_bug.cgi?id=219121 -Reported-by: Octavia Togami -Link: https://lore.kernel.org/linux-btrfs/CAHPNGSSt-a4ZZWrtJdVyYnJFscFjP9S7rMcvEMaNSpR556DdLA@mail.gmail.com/ -Fixes: 956a17d9d050 ("btrfs: add a shrinker for extent maps") -CC: stable@vger.kernel.org # 6.10+ -Tested-by: kzd -Tested-by: Octavia Togami -Signed-off-by: Filipe Manana -Reviewed-by: David Sterba -Signed-off-by: David Sterba ---- - fs/btrfs/extent_map.c | 22 ++++++---------------- - fs/btrfs/super.c | 10 ++++++++++ - 2 files changed, 16 insertions(+), 16 deletions(-) - -diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c -index 23b65dc73c0048..10ac5f657e3889 100644 ---- a/fs/btrfs/extent_map.c -+++ b/fs/btrfs/extent_map.c -@@ -1147,8 +1147,7 @@ static long btrfs_scan_inode(struct btrfs_inode *inode, struct btrfs_em_shrink_c - return 0; - - /* -- * We want to be fast because we can be called from any path trying to -- * allocate memory, so if the lock is busy we don't want to spend time -+ * We want to be fast so if the lock is busy we don't want to spend time - * waiting for it - either some task is about to do IO for the inode or - * we may have another task shrinking extent maps, here in this code, so - * skip this inode. -@@ -1191,9 +1190,7 @@ next: - /* - * Stop if we need to reschedule or there's contention on the - * lock. This is to avoid slowing other tasks trying to take the -- * lock and because the shrinker might be called during a memory -- * allocation path and we want to avoid taking a very long time -- * and slowing down all sorts of tasks. -+ * lock. - */ - if (need_resched() || rwlock_needbreak(&tree->lock)) - break; -@@ -1222,12 +1219,7 @@ static long btrfs_scan_root(struct btrfs_root *root, struct btrfs_em_shrink_ctx - if (ctx->scanned >= ctx->nr_to_scan) - break; - -- /* -- * We may be called from memory allocation paths, so we don't -- * want to take too much time and slowdown tasks. -- */ -- if (need_resched()) -- break; -+ cond_resched(); - - inode = btrfs_find_first_inode(root, min_ino); - } -@@ -1285,14 +1277,12 @@ long btrfs_free_extent_maps(struct btrfs_fs_info *fs_info, long nr_to_scan) - ctx.last_ino); - } - -- /* -- * We may be called from memory allocation paths, so we don't want to -- * take too much time and slowdown tasks, so stop if we need reschedule. -- */ -- while (ctx.scanned < ctx.nr_to_scan && !need_resched()) { -+ while (ctx.scanned < ctx.nr_to_scan) { - struct btrfs_root *root; - unsigned long count; - -+ cond_resched(); -+ - spin_lock(&fs_info->fs_roots_radix_lock); - count = radix_tree_gang_lookup(&fs_info->fs_roots_radix, - (void **)&root, -diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c -index 83478deada3bd2..11044e9e2cb110 100644 ---- a/fs/btrfs/super.c -+++ b/fs/btrfs/super.c -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - #include "messages.h" - #include "delayed-inode.h" - #include "ctree.h" -@@ -2409,6 +2410,15 @@ static long btrfs_free_cached_objects(struct super_block *sb, struct shrink_cont - const long nr_to_scan = min_t(unsigned long, LONG_MAX, sc->nr_to_scan); - struct btrfs_fs_info *fs_info = btrfs_sb(sb); - -+ /* -+ * We may be called from any task trying to allocate memory and we don't -+ * want to slow it down with scanning and dropping extent maps. It would -+ * also cause heavy lock contention if many tasks concurrently enter -+ * here. Therefore only allow kswapd tasks to scan and drop extent maps. -+ */ -+ if (!current_is_kswapd()) -+ return 0; -+ - return btrfs_free_extent_maps(fs_info, nr_to_scan); - } - --- -cgit 1.2.3-korg - diff --git a/modules/system/kernel/default.nix b/modules/system/kernel/default.nix index 9fb86950..1e12456b 100644 --- a/modules/system/kernel/default.nix +++ b/modules/system/kernel/default.nix @@ -133,16 +133,8 @@ inputs: name = "amdgpu"; patch = ./0001-drm-amdgpu-sdma5.2-limit-wptr-workaround-to-sdma-5.2.patch; }]; - # TODO: remove in 6.11 - btrfs = - [{ - name = "btrfs"; - patch = - let version = inputs.lib.versions.majorMinor inputs.config.boot.kernelPackages.kernel.version; - in if version == "6.10" then ./btrfs.patch else null; - }]; }; - in builtins.concatLists (builtins.map (name: patches.${name}) (kernel.patches ++ [ "btrfs" ])); + in builtins.concatLists (builtins.map (name: patches.${name}) kernel.patches); }; } ( diff --git a/modules/system/nixpkgs.nix b/modules/system/nixpkgs.nix index ed99a25b..1310c4a6 100644 --- a/modules/system/nixpkgs.nix +++ b/modules/system/nixpkgs.nix @@ -23,7 +23,7 @@ inputs: nixpkgs = let permittedInsecurePackages = - [ "openssl_1_1" "python2" "zotero" "electron_27" "electron_28" ]; + [ "openssl_1_1" "python2" "zotero" "electron_27" "electron_28" "olm" "fluffychat" ]; hostPlatform = if nixpkgs.march != null then { system = "${nixpkgs.arch}-linux"; gcc = { arch = nixpkgs.march; tune = nixpkgs.march; }; } else "${nixpkgs.arch}-linux";