diff options
author | Mathijs Kwik <mathijs@bluescreen303.nl> | 2012-12-30 12:14:20 +0100 |
---|---|---|
committer | Mathijs Kwik <mathijs@bluescreen303.nl> | 2013-01-01 13:50:14 +0100 |
commit | 3d0b5b7a8fe8887a90a84d18b3cdd0b451190596 (patch) | |
tree | f5dfeaf65aad0287713844574db0e6f4986ebd13 /pkgs/tools | |
parent | 66a7fa30b80f54f25d531b69b757d8c1cd6a203b (diff) | |
download | nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar.gz nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar.bz2 nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar.lz nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar.xz nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.tar.zst nixpkgs-3d0b5b7a8fe8887a90a84d18b3cdd0b451190596.zip |
btrfs-progs: small patch to fix listing subvolumes on kernel 3.6+
The btrfs cleaner, introduced in 3.6 leaves some unresolvable entries, which the userspace utils don't know how to handle.
Diffstat (limited to 'pkgs/tools')
-rw-r--r-- | pkgs/tools/filesystems/btrfsprogs/default.nix | 2 | ||||
-rw-r--r-- | pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch | 34 |
2 files changed, 36 insertions, 0 deletions
diff --git a/pkgs/tools/filesystems/btrfsprogs/default.nix b/pkgs/tools/filesystems/btrfsprogs/default.nix index 4c1963f4633..c8a39a1672a 100644 --- a/pkgs/tools/filesystems/btrfsprogs/default.nix +++ b/pkgs/tools/filesystems/btrfsprogs/default.nix @@ -11,6 +11,8 @@ stdenv.mkDerivation { sha256 = "72d4cd4fb23d876a17146d6231ad40a2151fa47c648485c54cf7478239b43764"; }; + patches = [ ./subvol-listing.patch ]; + buildInputs = [ zlib libuuid acl attr e2fsprogs ]; makeFlags = "prefix=$(out)"; diff --git a/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch b/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch new file mode 100644 index 00000000000..1c113ddefbe --- /dev/null +++ b/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch @@ -0,0 +1,34 @@ +--- a/btrfs-list.c 2012-12-30 12:20:01.394137593 +0100 ++++ b/btrfs-list.c 2012-12-30 12:22:47.242452906 +0100 +@@ -1004,6 +1004,23 @@ + return 0; + } + ++static void __drop_deleting_roots(struct root_lookup *root_lookup) ++{ ++ struct rb_node *n; ++ ++again: ++ n = rb_first(&root_lookup->root); ++ while (n) { ++ struct root_info *entry = rb_entry(n, struct root_info, rb_node); ++ if (!entry->ref_tree) { ++ rb_erase(n, &root_lookup->root); ++ free(entry); ++ goto again; ++ } ++ n = rb_next(n); ++ } ++} ++ + static int __list_subvol_search(int fd, struct root_lookup *root_lookup) + { + int ret; +@@ -1123,6 +1140,8 @@ + break; + } + ++ __drop_deleting_roots(root_lookup); ++ + return 0; + } |