Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dd73924aa0 | ||
|
897c96ed34 | ||
|
1030255be2 | ||
|
b536e09e55 | ||
|
c166122e78 |
125
.gitignore
vendored
125
.gitignore
vendored
@ -1,124 +1 @@
|
||||
/btrfs-progs-*.tar.bz2
|
||||
/btrfs-progs-v3.12.tar.xz
|
||||
/btrfs-progs-v3.14.tar.xz
|
||||
/btrfs-progs-v3.14.1.tar.xz
|
||||
/btrfs-progs-v3.14.2.tar.xz
|
||||
/btrfs-progs-v3.16.tar.xz
|
||||
/btrfs-progs-v3.16.2.tar.xz
|
||||
/btrfs-progs-v3.17.tar.xz
|
||||
/btrfs-progs-v3.17.2.tar.xz
|
||||
/btrfs-progs-v3.17.3.tar.xz
|
||||
/btrfs-progs-v3.18.tar.xz
|
||||
/btrfs-progs-v3.18.1.tar.xz
|
||||
/btrfs-progs-v3.18.2.tar.xz
|
||||
/btrfs-progs-v3.19.tar.xz
|
||||
/btrfs-progs-v3.19.1.tar.xz
|
||||
/btrfs-progs-v4.0.tar.xz
|
||||
/btrfs-progs-v4.0.1.tar.xz
|
||||
/btrfs-progs-v4.1.tar.xz
|
||||
/btrfs-progs-v4.1.2.tar.xz
|
||||
/btrfs-progs-v4.2.tar.xz
|
||||
/btrfs-progs-v4.2.1.tar.xz
|
||||
/btrfs-progs-v4.2.2.tar.xz
|
||||
/btrfs-progs-v4.3.1.tar.xz
|
||||
/btrfs-progs-v4.4.tar.xz
|
||||
/btrfs-progs-v4.4.1.tar.xz
|
||||
/btrfs-progs-v4.5.tar.xz
|
||||
/btrfs-progs-v4.5.1.tar.xz
|
||||
/btrfs-progs-v4.5.2.tar.xz
|
||||
/btrfs-progs-v4.5.3.tar.xz
|
||||
/btrfs-progs-v4.6.tar.xz
|
||||
/btrfs-progs-v4.6.1.tar.xz
|
||||
/btrfs-progs-v4.7.tar.xz
|
||||
/btrfs-progs-v4.7.1.tar.xz
|
||||
/btrfs-progs-v4.7.2.tar.xz
|
||||
/btrfs-progs-v4.7.3.tar.xz
|
||||
/btrfs-progs-v4.8.tar.xz
|
||||
/btrfs-progs-v4.8.1.tar.xz
|
||||
/btrfs-progs-v4.8.2.tar.xz
|
||||
/btrfs-progs-v4.8.3.tar.xz
|
||||
/btrfs-progs-v4.8.4.tar.xz
|
||||
/btrfs-progs-v4.8.5.tar.xz
|
||||
/btrfs-progs-4.9-1.fc26.src.rpm
|
||||
/btrfs-progs-v4.9.tar.xz
|
||||
/btrfs-progs-v4.9.1.tar.xz
|
||||
/btrfs-progs-v4.10.tar.xz
|
||||
/btrfs-progs-v4.10.1.tar.xz
|
||||
/btrfs-progs-v4.10.2.tar.xz
|
||||
/btrfs-progs-v4.11.tar.xz
|
||||
/btrfs-progs-v4.11.1.tar.xz
|
||||
/btrfs-progs-v4.12.tar.xz
|
||||
/btrfs-progs-v4.12.1.tar.xz
|
||||
/btrfs-progs-v4.13.tar.xz
|
||||
/btrfs-progs-v4.13.1.tar.xz
|
||||
/btrfs-progs-v4.13.2.tar.xz
|
||||
/btrfs-progs-v4.13.3.tar.xz
|
||||
/btrfs-progs-v4.14.1.tar.xz
|
||||
/btrfs-progs-v4.15.1.tar.xz
|
||||
/btrfs-progs-v4.16.tar.xz
|
||||
/btrfs-progs-v4.17.tar.xz
|
||||
/btrfs-progs-v4.17.1.tar.xz
|
||||
/btrfs-progs-v4.19.tar.xz
|
||||
/btrfs-progs-v4.19.1.tar.xz
|
||||
/btrfs-progs-v4.20.2.tar.xz
|
||||
/btrfs-progs-v5.1.tar.xz
|
||||
/btrfs-progs-v5.2.1.tar.xz
|
||||
/btrfs-progs-v5.4.tar.xz
|
||||
/btrfs-progs-v5.6.tar.xz
|
||||
/btrfs-progs-v5.6.1.tar.xz
|
||||
/btrfs-progs-v5.7-rc1.tar.xz
|
||||
/btrfs-progs-v5.7.tar.xz
|
||||
/btrfs-progs-v5.9.tar.xz
|
||||
/btrfs-progs-v5.10-rc1.tar.xz
|
||||
/btrfs-progs-v5.10.tar.xz
|
||||
/btrfs-progs-v5.11.tar.xz
|
||||
/btrfs-progs-v5.11.1.tar.sign
|
||||
/btrfs-progs-v5.11.1.tar.xz
|
||||
/btrfs-progs-v5.12.tar.sign
|
||||
/btrfs-progs-v5.12.tar.xz
|
||||
/btrfs-progs-v5.12.1.tar.sign
|
||||
/btrfs-progs-v5.12.1.tar.xz
|
||||
/btrfs-progs-v5.13.tar.sign
|
||||
/btrfs-progs-v5.13.tar.xz
|
||||
/btrfs-progs-v5.13.1.tar.sign
|
||||
/btrfs-progs-v5.13.1.tar.xz
|
||||
/btrfs-progs-v5.14.tar.sign
|
||||
/btrfs-progs-v5.14.tar.xz
|
||||
/btrfs-progs-v5.14.1.tar.sign
|
||||
/btrfs-progs-v5.14.1.tar.xz
|
||||
/btrfs-progs-v5.14.2.tar.sign
|
||||
/btrfs-progs-v5.14.2.tar.xz
|
||||
/btrfs-progs-v5.14.91.tar.sign
|
||||
/btrfs-progs-v5.14.91.tar.xz
|
||||
/btrfs-progs-v5.15.tar.sign
|
||||
/btrfs-progs-v5.15.tar.xz
|
||||
/btrfs-progs-v5.15.1.tar.sign
|
||||
/btrfs-progs-v5.15.1.tar.xz
|
||||
/btrfs-progs-v5.16.tar.sign
|
||||
/btrfs-progs-v5.16.tar.xz
|
||||
/btrfs-progs-v5.16.1.tar.sign
|
||||
/btrfs-progs-v5.16.1.tar.xz
|
||||
/btrfs-progs-v5.16.2.tar.sign
|
||||
/btrfs-progs-v5.16.2.tar.xz
|
||||
/btrfs-progs-v5.18.tar.sign
|
||||
/btrfs-progs-v5.18.tar.xz
|
||||
/btrfs-progs-v5.19.1.tar.sign
|
||||
/btrfs-progs-v5.19.1.tar.xz
|
||||
/btrfs-progs-v6.0.tar.sign
|
||||
/btrfs-progs-v6.0.tar.xz
|
||||
/btrfs-progs-v6.0.1.tar.sign
|
||||
/btrfs-progs-v6.0.1.tar.xz
|
||||
/btrfs-progs-v6.0.2.tar.sign
|
||||
/btrfs-progs-v6.0.2.tar.xz
|
||||
/btrfs-progs-v6.1.tar.sign
|
||||
/btrfs-progs-v6.1.tar.xz
|
||||
/btrfs-progs-v6.1.1.tar.sign
|
||||
/btrfs-progs-v6.1.1.tar.xz
|
||||
/btrfs-progs-v6.1.2.tar.sign
|
||||
/btrfs-progs-v6.1.2.tar.xz
|
||||
/btrfs-progs-v6.1.3.tar.sign
|
||||
/btrfs-progs-v6.1.3.tar.xz
|
||||
/btrfs-progs-v6.2.1.tar.sign
|
||||
/btrfs-progs-v6.2.1.tar.xz
|
||||
/btrfs-progs-v6.2.2.tar.sign
|
||||
/btrfs-progs-v6.2.2.tar.xz
|
||||
btrfs-progs-0.19.tar.bz2
|
||||
|
@ -1,91 +0,0 @@
|
||||
From: Neal Gompa <neal@gompa.dev>
|
||||
Subject: [PATCH 1/1] btrfs-progs: mkfs: Enforce 4k sectorsize by default
|
||||
Date: Wed, 22 Mar 2023 18:17:14 -0400
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We have had working subpage support in Btrfs for many cycles now.
|
||||
Generally, we do not want people creating filesystems by default
|
||||
with non-4k sectorsizes since it creates portability problems.
|
||||
|
||||
Signed-off-by: Neal Gompa <neal@gompa.dev>
|
||||
|
||||
Reviewed-by: Anand Jain <anand.jain@oracle.com>
|
||||
Reviewed-by: Qu Wenruo <wqu@suse.com>
|
||||
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
|
||||
|
||||
---
|
||||
Documentation/Subpage.rst | 15 ++++++++-------
|
||||
Documentation/mkfs.btrfs.rst | 13 +++++++++----
|
||||
mkfs/main.c | 2 +-
|
||||
3 files changed, 18 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/Documentation/Subpage.rst b/Documentation/Subpage.rst
|
||||
index 21a495d5..39ef7d6d 100644
|
||||
--- a/Documentation/Subpage.rst
|
||||
+++ b/Documentation/Subpage.rst
|
||||
@@ -9,17 +9,18 @@ to the exactly same size of the block and page. On x86_64 this is typically
|
||||
pages, like 64KiB on 64bit ARM or PowerPC. This means filesystems created
|
||||
with 64KiB sector size cannot be mounted on a system with 4KiB page size.
|
||||
|
||||
-While with subpage support, systems with 64KiB page size can create (still needs
|
||||
-"-s 4k" option for mkfs.btrfs) and mount filesystems with 4KiB sectorsize,
|
||||
-allowing us to push 4KiB sectorsize as default sectorsize for all platforms in the
|
||||
-near future.
|
||||
+Since v6.3, filesystems are created with a 4KiB sectorsize by default,
|
||||
+though it remains possible to create filesystems with other page sizes
|
||||
+(such as 64KiB with the "-s 64k" option for mkfs.btrfs). This ensures that
|
||||
+new filesystems are compatible across other architecture variants using
|
||||
+larger page sizes.
|
||||
|
||||
Requirements, limitations
|
||||
-------------------------
|
||||
|
||||
-The initial subpage support has been added in v5.15, although it's still
|
||||
-considered as experimental at the time of writing (v5.18), most features are
|
||||
-already working without problems.
|
||||
+The initial subpage support has been added in v5.15. Most features are
|
||||
+already working without problems. Subpage support is used by default
|
||||
+for systems with a non-4KiB page size since v6.3.
|
||||
|
||||
End users can mount filesystems with 4KiB sectorsize and do their usual
|
||||
workload, while should not notice any obvious change, as long as the initial
|
||||
diff --git a/Documentation/mkfs.btrfs.rst b/Documentation/mkfs.btrfs.rst
|
||||
index ba7227b3..16abf0ca 100644
|
||||
--- a/Documentation/mkfs.btrfs.rst
|
||||
+++ b/Documentation/mkfs.btrfs.rst
|
||||
@@ -116,10 +116,15 @@ OPTIONS
|
||||
-s|--sectorsize <size>
|
||||
Specify the sectorsize, the minimum data block allocation unit.
|
||||
|
||||
- The default value is the page size and is autodetected. If the sectorsize
|
||||
- differs from the page size, the created filesystem may not be mountable by the
|
||||
- running kernel. Therefore it is not recommended to use this option unless you
|
||||
- are going to mount it on a system with the appropriate page size.
|
||||
+ By default, the value is 4KiB, but it can be manually set to match the
|
||||
+ system page size. However, if the sector size is different from the page
|
||||
+ size, the resulting filesystem may not be mountable by the current
|
||||
+ kernel, apart from the default 4KiB. Hence, using this option is not
|
||||
+ advised unless you intend to mount it on a system with the suitable
|
||||
+ page size.
|
||||
+
|
||||
+ .. note::
|
||||
+ Versions prior to 6.3 set the sectorsize matching to the page size.
|
||||
|
||||
-L|--label <string>
|
||||
Specify a label for the filesystem. The *string* should be less than 256
|
||||
diff --git a/mkfs/main.c b/mkfs/main.c
|
||||
index f5e34cbd..5e1834d7 100644
|
||||
--- a/mkfs/main.c
|
||||
+++ b/mkfs/main.c
|
||||
@@ -1207,7 +1207,7 @@ int BOX_MAIN(mkfs)(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (!sectorsize)
|
||||
- sectorsize = (u32)sysconf(_SC_PAGESIZE);
|
||||
+ sectorsize = (u32)SZ_4K;
|
||||
if (btrfs_check_sectorsize(sectorsize))
|
||||
goto error;
|
||||
|
||||
--
|
||||
2.39.2
|
||||
|
@ -1,52 +0,0 @@
|
||||
From 56ea5a3eba4f2048d3e6297a7ab7eb5ef19e2177 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Gompa <ngompa@fedoraproject.org>
|
||||
Date: Tue, 21 Mar 2023 15:40:15 -0400
|
||||
Subject: [PATCH 2/2] btrfs-progs: mkfs: doc: Drop version change for 4k
|
||||
sectorsize
|
||||
|
||||
This is not yet upstream so we don't know what version this change
|
||||
has landed in.
|
||||
---
|
||||
Documentation/Subpage.rst | 4 ++--
|
||||
Documentation/mkfs.btrfs.rst | 3 ---
|
||||
2 files changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Documentation/Subpage.rst b/Documentation/Subpage.rst
|
||||
index 39ef7d6d..a128db95 100644
|
||||
--- a/Documentation/Subpage.rst
|
||||
+++ b/Documentation/Subpage.rst
|
||||
@@ -9,7 +9,7 @@ to the exactly same size of the block and page. On x86_64 this is typically
|
||||
pages, like 64KiB on 64bit ARM or PowerPC. This means filesystems created
|
||||
with 64KiB sector size cannot be mounted on a system with 4KiB page size.
|
||||
|
||||
-Since v6.3, filesystems are created with a 4KiB sectorsize by default,
|
||||
+Filesystems are created with a 4KiB sectorsize by default,
|
||||
though it remains possible to create filesystems with other page sizes
|
||||
(such as 64KiB with the "-s 64k" option for mkfs.btrfs). This ensures that
|
||||
new filesystems are compatible across other architecture variants using
|
||||
@@ -20,7 +20,7 @@ Requirements, limitations
|
||||
|
||||
The initial subpage support has been added in v5.15. Most features are
|
||||
already working without problems. Subpage support is used by default
|
||||
-for systems with a non-4KiB page size since v6.3.
|
||||
+for systems with a non-4KiB page size.
|
||||
|
||||
End users can mount filesystems with 4KiB sectorsize and do their usual
|
||||
workload, while should not notice any obvious change, as long as the initial
|
||||
diff --git a/Documentation/mkfs.btrfs.rst b/Documentation/mkfs.btrfs.rst
|
||||
index 50d9921a..0f6056a4 100644
|
||||
--- a/Documentation/mkfs.btrfs.rst
|
||||
+++ b/Documentation/mkfs.btrfs.rst
|
||||
@@ -123,9 +123,6 @@ OPTIONS
|
||||
advised unless you intend to mount it on a system with the suitable
|
||||
page size.
|
||||
|
||||
- .. note::
|
||||
- Versions prior to 6.3 set the sectorsize matching to the page size.
|
||||
-
|
||||
-L|--label <string>
|
||||
Specify a label for the filesystem. The *string* should be less than 256
|
||||
bytes and must not contain newline characters.
|
||||
--
|
||||
2.39.2
|
||||
|
12
btrfs-progs-build-everything.patch
Normal file
12
btrfs-progs-build-everything.patch
Normal file
@ -0,0 +1,12 @@
|
||||
diff -up btrfs-progs-0.19/Makefile.orig btrfs-progs-0.19/Makefile
|
||||
--- btrfs-progs-0.19/Makefile.orig 2009-06-19 08:05:49.151573429 -0400
|
||||
+++ btrfs-progs-0.19/Makefile 2009-06-19 08:08:35.192509803 -0400
|
||||
@@ -16,7 +16,7 @@ prefix ?= /usr/local
|
||||
bindir = $(prefix)/bin
|
||||
LIBS=-luuid
|
||||
|
||||
-progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck
|
||||
+progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck btrfs-image btrfstune
|
||||
|
||||
# make C=1 to enable sparse
|
||||
ifdef C
|
25
btrfs-progs-fix-labels.patch
Normal file
25
btrfs-progs-fix-labels.patch
Normal file
@ -0,0 +1,25 @@
|
||||
diff --git a/mkfs.c b/mkfs.c
|
||||
index d664254..138bcc9 100644
|
||||
--- a/mkfs.c
|
||||
+++ b/mkfs.c
|
||||
@@ -294,7 +294,6 @@ static u64 parse_profile(char *s)
|
||||
|
||||
static char *parse_label(char *input)
|
||||
{
|
||||
- int i;
|
||||
int len = strlen(input);
|
||||
|
||||
if (len > BTRFS_LABEL_SIZE) {
|
||||
@@ -302,12 +301,6 @@ static char *parse_label(char *input)
|
||||
BTRFS_LABEL_SIZE);
|
||||
exit(1);
|
||||
}
|
||||
- for (i = 0; i < len; i++) {
|
||||
- if (input[i] == '/' || input[i] == '\\') {
|
||||
- fprintf(stderr, "invalid label %s\n", input);
|
||||
- exit(1);
|
||||
- }
|
||||
- }
|
||||
return strdup(input);
|
||||
}
|
||||
|
767
btrfs-progs-upstream.patch
Normal file
767
btrfs-progs-upstream.patch
Normal file
@ -0,0 +1,767 @@
|
||||
diff --git a/btrfsck.c b/btrfsck.c
|
||||
index 40c90f8..73f1836 100644
|
||||
--- a/btrfsck.c
|
||||
+++ b/btrfsck.c
|
||||
@@ -36,7 +36,7 @@ static u64 total_fs_tree_bytes = 0;
|
||||
static u64 btree_space_waste = 0;
|
||||
static u64 data_bytes_allocated = 0;
|
||||
static u64 data_bytes_referenced = 0;
|
||||
-int found_old_backref = 0;
|
||||
+static int found_old_backref = 0;
|
||||
|
||||
struct extent_backref {
|
||||
struct list_head list;
|
||||
@@ -100,7 +100,11 @@ struct inode_backref {
|
||||
#define REF_ERR_DUP_INODE_REF (1 << 5)
|
||||
#define REF_ERR_INDEX_UNMATCH (1 << 6)
|
||||
#define REF_ERR_FILETYPE_UNMATCH (1 << 7)
|
||||
-#define REF_ERR_NAME_TOO_LONG (1 << 8)
|
||||
+#define REF_ERR_NAME_TOO_LONG (1 << 8) // 100
|
||||
+#define REF_ERR_NO_ROOT_REF (1 << 9)
|
||||
+#define REF_ERR_NO_ROOT_BACKREF (1 << 10)
|
||||
+#define REF_ERR_DUP_ROOT_REF (1 << 11)
|
||||
+#define REF_ERR_DUP_ROOT_BACKREF (1 << 12)
|
||||
|
||||
struct inode_record {
|
||||
struct list_head backrefs;
|
||||
@@ -144,6 +148,29 @@ struct inode_record {
|
||||
#define I_ERR_SOME_CSUM_MISSING (1 << 12)
|
||||
#define I_ERR_LINK_COUNT_WRONG (1 << 13)
|
||||
|
||||
+struct root_backref {
|
||||
+ struct list_head list;
|
||||
+ unsigned int found_dir_item:1;
|
||||
+ unsigned int found_dir_index:1;
|
||||
+ unsigned int found_back_ref:1;
|
||||
+ unsigned int found_forward_ref:1;
|
||||
+ unsigned int reachable:1;
|
||||
+ int errors;
|
||||
+ u64 ref_root;
|
||||
+ u64 dir;
|
||||
+ u64 index;
|
||||
+ u16 namelen;
|
||||
+ char name[0];
|
||||
+};
|
||||
+
|
||||
+struct root_record {
|
||||
+ struct list_head backrefs;
|
||||
+ struct cache_extent cache;
|
||||
+ unsigned int found_root_item:1;
|
||||
+ u64 objectid;
|
||||
+ u32 found_ref;
|
||||
+};
|
||||
+
|
||||
struct ptr_node {
|
||||
struct cache_extent cache;
|
||||
void *data;
|
||||
@@ -151,6 +178,7 @@ struct ptr_node {
|
||||
|
||||
struct shared_node {
|
||||
struct cache_extent cache;
|
||||
+ struct cache_tree root_cache;
|
||||
struct cache_tree inode_cache;
|
||||
struct inode_record *current;
|
||||
u32 refs;
|
||||
@@ -258,6 +286,14 @@ static void free_inode_rec(struct inode_record *rec)
|
||||
free(rec);
|
||||
}
|
||||
|
||||
+static int can_free_inode_rec(struct inode_record *rec)
|
||||
+{
|
||||
+ if (!rec->errors && rec->checked && rec->found_inode_item &&
|
||||
+ rec->nlink == rec->found_link && list_empty(&rec->backrefs))
|
||||
+ return 1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void maybe_free_inode_rec(struct cache_tree *inode_cache,
|
||||
struct inode_record *rec)
|
||||
{
|
||||
@@ -309,8 +345,7 @@ static void maybe_free_inode_rec(struct cache_tree *inode_cache,
|
||||
}
|
||||
|
||||
BUG_ON(rec->refs != 1);
|
||||
- if (!rec->errors && rec->nlink == rec->found_link &&
|
||||
- list_empty(&rec->backrefs)) {
|
||||
+ if (can_free_inode_rec(rec)) {
|
||||
cache = find_cache_extent(inode_cache, rec->ino, 1);
|
||||
node = container_of(cache, struct ptr_node, cache);
|
||||
BUG_ON(node->data != rec);
|
||||
@@ -338,14 +373,12 @@ static int check_orphan_item(struct btrfs_root *root, u64 ino)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int process_inode_item(struct btrfs_root *root,
|
||||
- struct extent_buffer *eb,
|
||||
+static int process_inode_item(struct extent_buffer *eb,
|
||||
int slot, struct btrfs_key *key,
|
||||
struct shared_node *active_node)
|
||||
{
|
||||
struct inode_record *rec;
|
||||
struct btrfs_inode_item *item;
|
||||
- int ret;
|
||||
|
||||
rec = active_node->current;
|
||||
BUG_ON(rec->ino != key->objectid || rec->refs > 1);
|
||||
@@ -361,11 +394,8 @@ static int process_inode_item(struct btrfs_root *root,
|
||||
if (btrfs_inode_flags(eb, item) & BTRFS_INODE_NODATASUM)
|
||||
rec->nodatasum = 1;
|
||||
rec->found_inode_item = 1;
|
||||
- if (rec->nlink == 0) {
|
||||
- ret = check_orphan_item(root, rec->ino);
|
||||
- if (ret == -ENOENT)
|
||||
- rec->errors |= I_ERR_NO_ORPHAN_ITEM;
|
||||
- }
|
||||
+ if (rec->nlink == 0)
|
||||
+ rec->errors |= I_ERR_NO_ORPHAN_ITEM;
|
||||
maybe_free_inode_rec(&active_node->inode_cache, rec);
|
||||
return 0;
|
||||
}
|
||||
@@ -443,10 +473,9 @@ static int add_inode_backref(struct cache_tree *inode_cache,
|
||||
}
|
||||
|
||||
static int merge_inode_recs(struct inode_record *src, struct inode_record *dst,
|
||||
- struct shared_node *dst_node)
|
||||
+ struct cache_tree *dst_cache)
|
||||
{
|
||||
struct inode_backref *backref;
|
||||
- struct cache_tree *dst_cache = &dst_node->inode_cache;
|
||||
|
||||
dst->merging = 1;
|
||||
list_for_each_entry(backref, &src->backrefs, list) {
|
||||
@@ -510,14 +539,8 @@ static int merge_inode_recs(struct inode_record *src, struct inode_record *dst,
|
||||
dst->errors |= I_ERR_DUP_INODE_ITEM;
|
||||
}
|
||||
}
|
||||
-
|
||||
- if (src->checked) {
|
||||
- dst->checked = 1;
|
||||
- if (dst_node->current == dst)
|
||||
- dst_node->current = NULL;
|
||||
- }
|
||||
dst->merging = 0;
|
||||
- maybe_free_inode_rec(dst_cache, dst);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -537,8 +560,9 @@ static int splice_shared_node(struct shared_node *src_node,
|
||||
if (src_node->current)
|
||||
current_ino = src_node->current->ino;
|
||||
|
||||
- src = &src_node->inode_cache;
|
||||
- dst = &dst_node->inode_cache;
|
||||
+ src = &src_node->root_cache;
|
||||
+ dst = &dst_node->root_cache;
|
||||
+again:
|
||||
cache = find_first_cache_extent(src, 0);
|
||||
while (cache) {
|
||||
node = container_of(cache, struct ptr_node, cache);
|
||||
@@ -557,14 +581,28 @@ static int splice_shared_node(struct shared_node *src_node,
|
||||
}
|
||||
ret = insert_existing_cache_extent(dst, &ins->cache);
|
||||
if (ret == -EEXIST) {
|
||||
+ WARN_ON(src == &src_node->root_cache);
|
||||
conflict = get_inode_rec(dst, rec->ino, 1);
|
||||
- merge_inode_recs(rec, conflict, dst_node);
|
||||
+ merge_inode_recs(rec, conflict, dst);
|
||||
+ if (rec->checked) {
|
||||
+ conflict->checked = 1;
|
||||
+ if (dst_node->current == conflict)
|
||||
+ dst_node->current = NULL;
|
||||
+ }
|
||||
+ maybe_free_inode_rec(dst, conflict);
|
||||
free_inode_rec(rec);
|
||||
free(ins);
|
||||
} else {
|
||||
BUG_ON(ret);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ if (src == &src_node->root_cache) {
|
||||
+ src = &src_node->inode_cache;
|
||||
+ dst = &dst_node->inode_cache;
|
||||
+ goto again;
|
||||
+ }
|
||||
+
|
||||
if (current_ino > 0 && (!dst_node->current ||
|
||||
current_ino > dst_node->current->ino)) {
|
||||
if (dst_node->current) {
|
||||
@@ -616,6 +654,7 @@ static int add_shared_node(struct cache_tree *shared, u64 bytenr, u32 refs)
|
||||
node = calloc(1, sizeof(*node));
|
||||
node->cache.start = bytenr;
|
||||
node->cache.size = 1;
|
||||
+ cache_tree_init(&node->root_cache);
|
||||
cache_tree_init(&node->inode_cache);
|
||||
node->refs = refs;
|
||||
|
||||
@@ -646,6 +685,7 @@ static int enter_shared_node(struct btrfs_root *root, u64 bytenr, u32 refs,
|
||||
if (wc->root_level == wc->active_node &&
|
||||
btrfs_root_refs(&root->root_item) == 0) {
|
||||
if (--node->refs == 0) {
|
||||
+ free_inode_recs(&node->root_cache);
|
||||
free_inode_recs(&node->inode_cache);
|
||||
remove_cache_extent(&wc->shared, &node->cache);
|
||||
free(node);
|
||||
@@ -708,10 +748,12 @@ static int process_dir_item(struct extent_buffer *eb,
|
||||
int filetype;
|
||||
struct btrfs_dir_item *di;
|
||||
struct inode_record *rec;
|
||||
+ struct cache_tree *root_cache;
|
||||
struct cache_tree *inode_cache;
|
||||
struct btrfs_key location;
|
||||
char namebuf[BTRFS_NAME_LEN];
|
||||
|
||||
+ root_cache = &active_node->root_cache;
|
||||
inode_cache = &active_node->inode_cache;
|
||||
rec = active_node->current;
|
||||
rec->found_dir_item = 1;
|
||||
@@ -740,7 +782,9 @@ static int process_dir_item(struct extent_buffer *eb,
|
||||
key->objectid, key->offset, namebuf,
|
||||
len, filetype, key->type, error);
|
||||
} else if (location.type == BTRFS_ROOT_ITEM_KEY) {
|
||||
- /* fixme: check root back & forward references */
|
||||
+ add_inode_backref(root_cache, location.objectid,
|
||||
+ key->objectid, key->offset, namebuf,
|
||||
+ len, filetype, key->type, error);
|
||||
} else {
|
||||
fprintf(stderr, "warning line %d\n", __LINE__);
|
||||
}
|
||||
@@ -977,8 +1021,7 @@ static int process_one_leaf(struct btrfs_root *root, struct extent_buffer *eb,
|
||||
ret = process_inode_ref(eb, i, &key, active_node);
|
||||
break;
|
||||
case BTRFS_INODE_ITEM_KEY:
|
||||
- ret = process_inode_item(root, eb, i, &key,
|
||||
- active_node);
|
||||
+ ret = process_inode_item(eb, i, &key, active_node);
|
||||
break;
|
||||
case BTRFS_EXTENT_DATA_KEY:
|
||||
ret = process_file_extent(root, eb, i, &key,
|
||||
@@ -1176,13 +1219,23 @@ static int check_inode_recs(struct btrfs_root *root,
|
||||
node = container_of(cache, struct ptr_node, cache);
|
||||
rec = node->data;
|
||||
remove_cache_extent(inode_cache, &node->cache);
|
||||
+ free(node);
|
||||
if (rec->ino == root_dirid ||
|
||||
rec->ino == BTRFS_ORPHAN_OBJECTID) {
|
||||
- free(node);
|
||||
free_inode_rec(rec);
|
||||
continue;
|
||||
}
|
||||
|
||||
+ if (rec->errors & I_ERR_NO_ORPHAN_ITEM) {
|
||||
+ ret = check_orphan_item(root, rec->ino);
|
||||
+ if (ret == 0)
|
||||
+ rec->errors &= ~I_ERR_NO_ORPHAN_ITEM;
|
||||
+ if (can_free_inode_rec(rec)) {
|
||||
+ free_inode_rec(rec);
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
error++;
|
||||
if (!rec->found_inode_item)
|
||||
rec->errors |= I_ERR_NO_INODE_ITEM;
|
||||
@@ -1205,13 +1258,314 @@ static int check_inode_recs(struct btrfs_root *root,
|
||||
backref->namelen, backref->name,
|
||||
backref->filetype, backref->errors);
|
||||
}
|
||||
- free(node);
|
||||
free_inode_rec(rec);
|
||||
}
|
||||
return (error > 0) ? -1 : 0;
|
||||
}
|
||||
|
||||
+static struct root_record *get_root_rec(struct cache_tree *root_cache,
|
||||
+ u64 objectid)
|
||||
+{
|
||||
+ struct cache_extent *cache;
|
||||
+ struct root_record *rec = NULL;
|
||||
+ int ret;
|
||||
+
|
||||
+ cache = find_cache_extent(root_cache, objectid, 1);
|
||||
+ if (cache) {
|
||||
+ rec = container_of(cache, struct root_record, cache);
|
||||
+ } else {
|
||||
+ rec = calloc(1, sizeof(*rec));
|
||||
+ rec->objectid = objectid;
|
||||
+ INIT_LIST_HEAD(&rec->backrefs);
|
||||
+ rec->cache.start = objectid;
|
||||
+ rec->cache.size = 1;
|
||||
+
|
||||
+ ret = insert_existing_cache_extent(root_cache, &rec->cache);
|
||||
+ BUG_ON(ret);
|
||||
+ }
|
||||
+ return rec;
|
||||
+}
|
||||
+
|
||||
+static struct root_backref *get_root_backref(struct root_record *rec,
|
||||
+ u64 ref_root, u64 dir, u64 index,
|
||||
+ const char *name, int namelen)
|
||||
+{
|
||||
+ struct root_backref *backref;
|
||||
+
|
||||
+ list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
+ if (backref->ref_root != ref_root || backref->dir != dir ||
|
||||
+ backref->namelen != namelen)
|
||||
+ continue;
|
||||
+ if (memcmp(name, backref->name, namelen))
|
||||
+ continue;
|
||||
+ return backref;
|
||||
+ }
|
||||
+
|
||||
+ backref = malloc(sizeof(*backref) + namelen + 1);
|
||||
+ memset(backref, 0, sizeof(*backref));
|
||||
+ backref->ref_root = ref_root;
|
||||
+ backref->dir = dir;
|
||||
+ backref->index = index;
|
||||
+ backref->namelen = namelen;
|
||||
+ memcpy(backref->name, name, namelen);
|
||||
+ backref->name[namelen] = '\0';
|
||||
+ list_add_tail(&backref->list, &rec->backrefs);
|
||||
+ return backref;
|
||||
+}
|
||||
+
|
||||
+static void free_root_recs(struct cache_tree *root_cache)
|
||||
+{
|
||||
+ struct cache_extent *cache;
|
||||
+ struct root_record *rec;
|
||||
+ struct root_backref *backref;
|
||||
+
|
||||
+ while (1) {
|
||||
+ cache = find_first_cache_extent(root_cache, 0);
|
||||
+ if (!cache)
|
||||
+ break;
|
||||
+ rec = container_of(cache, struct root_record, cache);
|
||||
+ remove_cache_extent(root_cache, &rec->cache);
|
||||
+
|
||||
+ while (!list_empty(&rec->backrefs)) {
|
||||
+ backref = list_entry(rec->backrefs.next,
|
||||
+ struct root_backref, list);
|
||||
+ list_del(&backref->list);
|
||||
+ free(backref);
|
||||
+ }
|
||||
+ kfree(rec);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int add_root_backref(struct cache_tree *root_cache,
|
||||
+ u64 root_id, u64 ref_root, u64 dir, u64 index,
|
||||
+ const char *name, int namelen,
|
||||
+ int item_type, int errors)
|
||||
+{
|
||||
+ struct root_record *rec;
|
||||
+ struct root_backref *backref;
|
||||
+
|
||||
+ rec = get_root_rec(root_cache, root_id);
|
||||
+ backref = get_root_backref(rec, ref_root, dir, index, name, namelen);
|
||||
+
|
||||
+ backref->errors |= errors;
|
||||
+
|
||||
+ if (item_type != BTRFS_DIR_ITEM_KEY) {
|
||||
+ if (backref->found_dir_index || backref->found_back_ref ||
|
||||
+ backref->found_forward_ref) {
|
||||
+ if (backref->index != index)
|
||||
+ backref->errors |= REF_ERR_INDEX_UNMATCH;
|
||||
+ } else {
|
||||
+ backref->index = index;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (item_type == BTRFS_DIR_ITEM_KEY) {
|
||||
+ backref->found_dir_item = 1;
|
||||
+ backref->reachable = 1;
|
||||
+ rec->found_ref++;
|
||||
+ } else if (item_type == BTRFS_DIR_INDEX_KEY) {
|
||||
+ backref->found_dir_index = 1;
|
||||
+ } else if (item_type == BTRFS_ROOT_REF_KEY) {
|
||||
+ if (backref->found_forward_ref)
|
||||
+ backref->errors |= REF_ERR_DUP_ROOT_REF;
|
||||
+ backref->found_forward_ref = 1;
|
||||
+ } else if (item_type == BTRFS_ROOT_BACKREF_KEY) {
|
||||
+ if (backref->found_back_ref)
|
||||
+ backref->errors |= REF_ERR_DUP_ROOT_BACKREF;
|
||||
+ backref->found_back_ref = 1;
|
||||
+ } else {
|
||||
+ BUG_ON(1);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int merge_root_recs(struct btrfs_root *root,
|
||||
+ struct cache_tree *src_cache,
|
||||
+ struct cache_tree *dst_cache)
|
||||
+{
|
||||
+ struct cache_extent *cache;
|
||||
+ struct ptr_node *node;
|
||||
+ struct inode_record *rec;
|
||||
+ struct inode_backref *backref;
|
||||
+
|
||||
+ if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
|
||||
+ free_inode_recs(src_cache);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ while (1) {
|
||||
+ cache = find_first_cache_extent(src_cache, 0);
|
||||
+ if (!cache)
|
||||
+ break;
|
||||
+ node = container_of(cache, struct ptr_node, cache);
|
||||
+ rec = node->data;
|
||||
+ remove_cache_extent(src_cache, &node->cache);
|
||||
+ free(node);
|
||||
+
|
||||
+ list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
+ BUG_ON(backref->found_inode_ref);
|
||||
+ if (backref->found_dir_item)
|
||||
+ add_root_backref(dst_cache, rec->ino,
|
||||
+ root->root_key.objectid, backref->dir,
|
||||
+ backref->index, backref->name,
|
||||
+ backref->namelen, BTRFS_DIR_ITEM_KEY,
|
||||
+ backref->errors);
|
||||
+ if (backref->found_dir_index)
|
||||
+ add_root_backref(dst_cache, rec->ino,
|
||||
+ root->root_key.objectid, backref->dir,
|
||||
+ backref->index, backref->name,
|
||||
+ backref->namelen, BTRFS_DIR_INDEX_KEY,
|
||||
+ backref->errors);
|
||||
+ }
|
||||
+ free_inode_rec(rec);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int check_root_refs(struct btrfs_root *root,
|
||||
+ struct cache_tree *root_cache)
|
||||
+{
|
||||
+ struct root_record *rec;
|
||||
+ struct root_record *ref_root;
|
||||
+ struct root_backref *backref;
|
||||
+ struct cache_extent *cache;
|
||||
+ int loop = 1;
|
||||
+ int ret;
|
||||
+ int error;
|
||||
+ int errors = 0;
|
||||
+
|
||||
+ rec = get_root_rec(root_cache, BTRFS_FS_TREE_OBJECTID);
|
||||
+ rec->found_ref = 1;
|
||||
+
|
||||
+ /* fixme: this can not detect circular references */
|
||||
+ while (loop) {
|
||||
+ loop = 0;
|
||||
+ cache = find_first_cache_extent(root_cache, 0);
|
||||
+ while (1) {
|
||||
+ if (!cache)
|
||||
+ break;
|
||||
+ rec = container_of(cache, struct root_record, cache);
|
||||
+ cache = next_cache_extent(cache);
|
||||
+
|
||||
+ if (rec->found_ref == 0)
|
||||
+ continue;
|
||||
+
|
||||
+ list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
+ if (!backref->reachable)
|
||||
+ continue;
|
||||
+
|
||||
+ ref_root = get_root_rec(root_cache,
|
||||
+ backref->ref_root);
|
||||
+ if (ref_root->found_ref > 0)
|
||||
+ continue;
|
||||
+
|
||||
+ backref->reachable = 0;
|
||||
+ rec->found_ref--;
|
||||
+ if (rec->found_ref == 0)
|
||||
+ loop = 1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ cache = find_first_cache_extent(root_cache, 0);
|
||||
+ while (1) {
|
||||
+ if (!cache)
|
||||
+ break;
|
||||
+ rec = container_of(cache, struct root_record, cache);
|
||||
+ cache = next_cache_extent(cache);
|
||||
+
|
||||
+ if (rec->found_ref == 0 &&
|
||||
+ rec->objectid >= BTRFS_FIRST_FREE_OBJECTID &&
|
||||
+ rec->objectid <= BTRFS_LAST_FREE_OBJECTID) {
|
||||
+ ret = check_orphan_item(root->fs_info->tree_root,
|
||||
+ rec->objectid);
|
||||
+ if (ret == 0)
|
||||
+ continue;
|
||||
+ errors++;
|
||||
+ fprintf(stderr, "fs tree %llu not referenced\n",
|
||||
+ (unsigned long long)rec->objectid);
|
||||
+ }
|
||||
+
|
||||
+ error = 0;
|
||||
+ if (rec->found_ref > 0 && !rec->found_root_item)
|
||||
+ error = 1;
|
||||
+ list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
+ if (!backref->found_dir_item)
|
||||
+ backref->errors |= REF_ERR_NO_DIR_ITEM;
|
||||
+ if (!backref->found_dir_index)
|
||||
+ backref->errors |= REF_ERR_NO_DIR_INDEX;
|
||||
+ if (!backref->found_back_ref)
|
||||
+ backref->errors |= REF_ERR_NO_ROOT_BACKREF;
|
||||
+ if (!backref->found_forward_ref)
|
||||
+ backref->errors |= REF_ERR_NO_ROOT_REF;
|
||||
+ if (backref->reachable && backref->errors)
|
||||
+ error = 1;
|
||||
+ }
|
||||
+ if (!error)
|
||||
+ continue;
|
||||
+
|
||||
+ errors++;
|
||||
+ fprintf(stderr, "fs tree %llu refs %u %s\n",
|
||||
+ (unsigned long long)rec->objectid, rec->found_ref,
|
||||
+ rec->found_root_item ? "" : "not found");
|
||||
+
|
||||
+ list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
+ if (!backref->reachable)
|
||||
+ continue;
|
||||
+ if (!backref->errors && rec->found_root_item)
|
||||
+ continue;
|
||||
+ fprintf(stderr, "\tunresolved ref root %llu dir %llu"
|
||||
+ " index %llu namelen %u name %s error %x\n",
|
||||
+ (unsigned long long)backref->ref_root,
|
||||
+ (unsigned long long)backref->dir,
|
||||
+ (unsigned long long)backref->index,
|
||||
+ backref->namelen, backref->name,
|
||||
+ backref->errors);
|
||||
+ }
|
||||
+ }
|
||||
+ return errors > 0 ? 1 : 0;
|
||||
+}
|
||||
+
|
||||
+static int process_root_ref(struct extent_buffer *eb, int slot,
|
||||
+ struct btrfs_key *key,
|
||||
+ struct cache_tree *root_cache)
|
||||
+{
|
||||
+ u64 dirid;
|
||||
+ u64 index;
|
||||
+ u32 len;
|
||||
+ u32 name_len;
|
||||
+ struct btrfs_root_ref *ref;
|
||||
+ char namebuf[BTRFS_NAME_LEN];
|
||||
+ int error;
|
||||
+
|
||||
+ ref = btrfs_item_ptr(eb, slot, struct btrfs_root_ref);
|
||||
+
|
||||
+ dirid = btrfs_root_ref_dirid(eb, ref);
|
||||
+ index = btrfs_root_ref_sequence(eb, ref);
|
||||
+ name_len = btrfs_root_ref_name_len(eb, ref);
|
||||
+
|
||||
+ if (name_len <= BTRFS_NAME_LEN) {
|
||||
+ len = name_len;
|
||||
+ error = 0;
|
||||
+ } else {
|
||||
+ len = BTRFS_NAME_LEN;
|
||||
+ error = REF_ERR_NAME_TOO_LONG;
|
||||
+ }
|
||||
+ read_extent_buffer(eb, namebuf, (unsigned long)(ref + 1), len);
|
||||
+
|
||||
+ if (key->type == BTRFS_ROOT_REF_KEY) {
|
||||
+ add_root_backref(root_cache, key->offset, key->objectid, dirid,
|
||||
+ index, namebuf, len, key->type, error);
|
||||
+ } else {
|
||||
+ add_root_backref(root_cache, key->objectid, key->offset, dirid,
|
||||
+ index, namebuf, len, key->type, error);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int check_fs_root(struct btrfs_root *root,
|
||||
+ struct cache_tree *root_cache,
|
||||
struct walk_control *wc)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -1219,10 +1573,18 @@ static int check_fs_root(struct btrfs_root *root,
|
||||
int level;
|
||||
struct btrfs_path path;
|
||||
struct shared_node root_node;
|
||||
+ struct root_record *rec;
|
||||
struct btrfs_root_item *root_item = &root->root_item;
|
||||
|
||||
+ if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) {
|
||||
+ rec = get_root_rec(root_cache, root->root_key.objectid);
|
||||
+ if (btrfs_root_refs(root_item) > 0)
|
||||
+ rec->found_root_item = 1;
|
||||
+ }
|
||||
+
|
||||
btrfs_init_path(&path);
|
||||
memset(&root_node, 0, sizeof(root_node));
|
||||
+ cache_tree_init(&root_node.root_cache);
|
||||
cache_tree_init(&root_node.inode_cache);
|
||||
|
||||
level = btrfs_header_level(root->node);
|
||||
@@ -1266,6 +1628,8 @@ static int check_fs_root(struct btrfs_root *root,
|
||||
}
|
||||
btrfs_release_path(root, &path);
|
||||
|
||||
+ merge_root_recs(root, &root_node.root_cache, root_cache);
|
||||
+
|
||||
if (root_node.current) {
|
||||
root_node.current->checked = 1;
|
||||
maybe_free_inode_rec(&root_node.inode_cache,
|
||||
@@ -1280,13 +1644,15 @@ static int fs_root_objectid(u64 objectid)
|
||||
{
|
||||
if (objectid == BTRFS_FS_TREE_OBJECTID ||
|
||||
objectid == BTRFS_TREE_RELOC_OBJECTID ||
|
||||
+ objectid == BTRFS_DATA_RELOC_TREE_OBJECTID ||
|
||||
(objectid >= BTRFS_FIRST_FREE_OBJECTID &&
|
||||
- objectid < BTRFS_LAST_FREE_OBJECTID))
|
||||
+ objectid <= BTRFS_LAST_FREE_OBJECTID))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int check_fs_roots(struct btrfs_root *root)
|
||||
+static int check_fs_roots(struct btrfs_root *root,
|
||||
+ struct cache_tree *root_cache)
|
||||
{
|
||||
struct btrfs_path path;
|
||||
struct btrfs_key key;
|
||||
@@ -1319,10 +1685,14 @@ static int check_fs_roots(struct btrfs_root *root)
|
||||
fs_root_objectid(key.objectid)) {
|
||||
tmp_root = btrfs_read_fs_root_no_cache(root->fs_info,
|
||||
&key);
|
||||
- ret = check_fs_root(tmp_root, &wc);
|
||||
+ ret = check_fs_root(tmp_root, root_cache, &wc);
|
||||
if (ret)
|
||||
err = 1;
|
||||
btrfs_free_fs_root(root->fs_info, tmp_root);
|
||||
+ } else if (key.type == BTRFS_ROOT_REF_KEY ||
|
||||
+ key.type == BTRFS_ROOT_BACKREF_KEY) {
|
||||
+ process_root_ref(leaf, path.slots[0], &key,
|
||||
+ root_cache);
|
||||
}
|
||||
path.slots[0]++;
|
||||
}
|
||||
@@ -1895,7 +2265,6 @@ static int add_data_backref(struct cache_tree *extent_cache, u64 bytenr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-
|
||||
static int add_pending(struct cache_tree *pending,
|
||||
struct cache_tree *seen, u64 bytenr, u32 size)
|
||||
{
|
||||
@@ -2443,6 +2812,7 @@ static void print_usage(void)
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
+ struct cache_tree root_cache;
|
||||
struct btrfs_root *root;
|
||||
int ret;
|
||||
|
||||
@@ -2450,6 +2820,7 @@ int main(int ac, char **av)
|
||||
print_usage();
|
||||
|
||||
radix_tree_init();
|
||||
+ cache_tree_init(&root_cache);
|
||||
root = open_ctree(av[1], 0, 0);
|
||||
|
||||
if (root == NULL)
|
||||
@@ -2458,10 +2829,15 @@ int main(int ac, char **av)
|
||||
ret = check_extents(root);
|
||||
if (ret)
|
||||
goto out;
|
||||
- ret = check_fs_roots(root);
|
||||
+ ret = check_fs_roots(root, &root_cache);
|
||||
+ if (ret)
|
||||
+ goto out;
|
||||
|
||||
+ ret = check_root_refs(root, &root_cache);
|
||||
out:
|
||||
+ free_root_recs(&root_cache);
|
||||
close_ctree(root);
|
||||
+
|
||||
if (found_old_backref) {
|
||||
/*
|
||||
* there was a disk format change when mixed
|
||||
diff --git a/btrfsctl.c b/btrfsctl.c
|
||||
index b323818..66c4e89 100644
|
||||
--- a/btrfsctl.c
|
||||
+++ b/btrfsctl.c
|
||||
@@ -46,7 +46,7 @@ static inline int ioctl(int fd, int define, void *arg) { return 0; }
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf("usage: btrfsctl [ -d file|dir] [ -s snap_name subvol|tree ]\n");
|
||||
- printf(" [-r size] [-A device] [-a] [-c]\n");
|
||||
+ printf(" [-r size] [-A device] [-a] [-c] [-D dir .]\n");
|
||||
printf("\t-d filename: defragments one file\n");
|
||||
printf("\t-d directory: defragments the entire Btree\n");
|
||||
printf("\t-s snap_name dir: creates a new snapshot of dir\n");
|
||||
@@ -55,6 +55,7 @@ static void print_usage(void)
|
||||
printf("\t-A device: scans the device file for a Btrfs filesystem\n");
|
||||
printf("\t-a: scans all devices for Btrfs filesystems\n");
|
||||
printf("\t-c: forces a single FS sync\n");
|
||||
+ printf("\t-D: delete snapshot\n");
|
||||
printf("%s\n", BTRFS_BUILD_VERSION);
|
||||
exit(1);
|
||||
}
|
||||
@@ -158,6 +159,18 @@ int main(int ac, char **av)
|
||||
print_usage();
|
||||
}
|
||||
command = BTRFS_IOC_DEFRAG;
|
||||
+ } else if (strcmp(av[i], "-D") == 0) {
|
||||
+ if (i >= ac - 1) {
|
||||
+ fprintf(stderr, "-D requires an arg\n");
|
||||
+ print_usage();
|
||||
+ }
|
||||
+ command = BTRFS_IOC_SNAP_DESTROY;
|
||||
+ name = av[i + 1];
|
||||
+ len = strlen(name);
|
||||
+ if (len == 0 || len >= BTRFS_VOL_NAME_MAX) {
|
||||
+ fprintf(stderr, "-D size too long\n");
|
||||
+ exit(1);
|
||||
+ }
|
||||
} else if (strcmp(av[i], "-A") == 0) {
|
||||
if (i >= ac - 1) {
|
||||
fprintf(stderr, "-A requires an arg\n");
|
||||
diff --git a/convert.c b/convert.c
|
||||
index d2c9efa..d037c98 100644
|
||||
--- a/convert.c
|
||||
+++ b/convert.c
|
||||
@@ -370,7 +370,6 @@ static int record_file_extent(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_extent_item *ei;
|
||||
u32 blocksize = root->sectorsize;
|
||||
u64 nbytes;
|
||||
- u64 bytes_used;
|
||||
|
||||
if (disk_bytenr == 0) {
|
||||
ret = btrfs_insert_file_extent(trans, root, objectid,
|
||||
@@ -432,9 +431,6 @@ static int record_file_extent(struct btrfs_trans_handle *trans,
|
||||
nbytes = btrfs_stack_inode_nbytes(inode) + num_bytes;
|
||||
btrfs_set_stack_inode_nbytes(inode, nbytes);
|
||||
|
||||
- bytes_used = btrfs_root_used(&root->root_item);
|
||||
- btrfs_set_root_used(&root->root_item, bytes_used + num_bytes);
|
||||
-
|
||||
btrfs_release_path(root, &path);
|
||||
|
||||
ins_key.objectid = disk_bytenr;
|
||||
@@ -454,9 +450,6 @@ static int record_file_extent(struct btrfs_trans_handle *trans,
|
||||
|
||||
btrfs_mark_buffer_dirty(leaf);
|
||||
|
||||
- bytes_used = btrfs_super_bytes_used(&info->super_copy);
|
||||
- btrfs_set_super_bytes_used(&info->super_copy, bytes_used +
|
||||
- num_bytes);
|
||||
ret = btrfs_update_block_group(trans, root, disk_bytenr,
|
||||
num_bytes, 1, 0);
|
||||
if (ret)
|
||||
diff --git a/ioctl.h b/ioctl.h
|
||||
index a084f33..4410ac0 100644
|
||||
--- a/ioctl.h
|
||||
+++ b/ioctl.h
|
||||
@@ -56,4 +56,7 @@ struct btrfs_ioctl_vol_args {
|
||||
/* 13 is for CLONE_RANGE */
|
||||
#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \
|
||||
struct btrfs_ioctl_vol_args)
|
||||
+
|
||||
+#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \
|
||||
+ struct btrfs_ioctl_vol_args)
|
||||
#endif
|
247
btrfs-progs-valgrind.patch
Normal file
247
btrfs-progs-valgrind.patch
Normal file
@ -0,0 +1,247 @@
|
||||
Hello,
|
||||
|
||||
Started running valgrind against btrfsck since e2fsck seemed to have a myriad of
|
||||
problems. btrfsck was actually not in too bad shape, only like 5 or 6 normal
|
||||
errors and maybe 5 leaks. The big leak is the "seen" extent cache that we don't
|
||||
seem to do anything with. Since I'm not sure what Yan is up to I just made it
|
||||
so we free that cache before we return in case he wants it for something. With
|
||||
these changes btrfsck doesn't spit out any errors while running valgrind and has
|
||||
no leaks. This should also help any of the other utilities that use the generic
|
||||
stuff. Thanks,
|
||||
|
||||
Signed-off-by: Josef Bacik <jbacik@redhat.com>
|
||||
---
|
||||
btrfsck.c | 2 ++
|
||||
disk-io.c | 29 ++++++++++++++++++-----------
|
||||
extent-cache.c | 11 +++++++++++
|
||||
extent-cache.h | 1 +
|
||||
extent-tree.c | 10 ++++++++++
|
||||
extent_io.c | 1 +
|
||||
volumes.c | 16 +++++++++++++++-
|
||||
volumes.h | 1 +
|
||||
8 files changed, 59 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/btrfsck.c b/btrfsck.c
|
||||
index 40c90f8..9dd777f 100644
|
||||
--- a/btrfsck.c
|
||||
+++ b/btrfsck.c
|
||||
@@ -2431,6 +2431,8 @@ static int check_extents(struct btrfs_root *root)
|
||||
break;
|
||||
}
|
||||
ret = check_extent_refs(root, &extent_cache);
|
||||
+ free_cache_tree(&seen);
|
||||
+ free(bits);
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/disk-io.c b/disk-io.c
|
||||
index addebe1..4d4e902 100644
|
||||
--- a/disk-io.c
|
||||
+++ b/disk-io.c
|
||||
@@ -425,8 +425,10 @@ static int find_and_setup_log_root(struct btrfs_root *tree_root,
|
||||
u64 blocknr = btrfs_super_log_root(disk_super);
|
||||
struct btrfs_root *log_root = malloc(sizeof(struct btrfs_root));
|
||||
|
||||
- if (blocknr == 0)
|
||||
+ if (blocknr == 0) {
|
||||
+ free(log_root);
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
blocksize = btrfs_level_size(tree_root,
|
||||
btrfs_super_log_root_level(disk_super));
|
||||
@@ -605,7 +607,7 @@ struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr,
|
||||
struct btrfs_root *chunk_root = malloc(sizeof(struct btrfs_root));
|
||||
struct btrfs_root *dev_root = malloc(sizeof(struct btrfs_root));
|
||||
struct btrfs_root *csum_root = malloc(sizeof(struct btrfs_root));
|
||||
- struct btrfs_fs_info *fs_info = malloc(sizeof(*fs_info));
|
||||
+ struct btrfs_fs_info *fs_info = malloc(sizeof(struct btrfs_fs_info));
|
||||
int ret;
|
||||
struct btrfs_super_block *disk_super;
|
||||
struct btrfs_fs_devices *fs_devices = NULL;
|
||||
@@ -628,7 +630,7 @@ struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr,
|
||||
BUG_ON(ret);
|
||||
}
|
||||
|
||||
- memset(fs_info, 0, sizeof(*fs_info));
|
||||
+ memset(fs_info, 0, sizeof(struct btrfs_fs_info));
|
||||
fs_info->tree_root = tree_root;
|
||||
fs_info->extent_root = extent_root;
|
||||
fs_info->chunk_root = chunk_root;
|
||||
@@ -928,15 +930,19 @@ static int close_all_devices(struct btrfs_fs_info *fs_info)
|
||||
{
|
||||
struct list_head *list;
|
||||
struct list_head *next;
|
||||
+ struct list_head *tmp;
|
||||
struct btrfs_device *device;
|
||||
|
||||
- return 0;
|
||||
-
|
||||
list = &fs_info->fs_devices->devices;
|
||||
- list_for_each(next, list) {
|
||||
+ list_for_each_safe(next, tmp, list) {
|
||||
device = list_entry(next, struct btrfs_device, dev_list);
|
||||
close(device->fd);
|
||||
+ list_del(&device->dev_list);
|
||||
+ free(device->name);
|
||||
+ free(device->label);
|
||||
+ free(device);
|
||||
}
|
||||
+ free(fs_info->fs_devices);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -970,25 +976,26 @@ int close_ctree(struct btrfs_root *root)
|
||||
if (fs_info->csum_root->node)
|
||||
free_extent_buffer(fs_info->csum_root->node);
|
||||
|
||||
- if (root->fs_info->log_root_tree) {
|
||||
- if (root->fs_info->log_root_tree->node)
|
||||
- free_extent_buffer(root->fs_info->log_root_tree->node);
|
||||
- free(root->fs_info->log_root_tree);
|
||||
+ if (fs_info->log_root_tree) {
|
||||
+ if (fs_info->log_root_tree->node)
|
||||
+ free_extent_buffer(fs_info->log_root_tree->node);
|
||||
}
|
||||
|
||||
- close_all_devices(root->fs_info);
|
||||
+ close_all_devices(fs_info);
|
||||
extent_io_tree_cleanup(&fs_info->extent_cache);
|
||||
extent_io_tree_cleanup(&fs_info->free_space_cache);
|
||||
extent_io_tree_cleanup(&fs_info->block_group_cache);
|
||||
extent_io_tree_cleanup(&fs_info->pinned_extents);
|
||||
extent_io_tree_cleanup(&fs_info->pending_del);
|
||||
extent_io_tree_cleanup(&fs_info->extent_ins);
|
||||
+ btrfs_mapping_tree_free(&fs_info->mapping_tree);
|
||||
|
||||
free(fs_info->tree_root);
|
||||
free(fs_info->extent_root);
|
||||
free(fs_info->chunk_root);
|
||||
free(fs_info->dev_root);
|
||||
free(fs_info->csum_root);
|
||||
+ free(fs_info->log_root_tree);
|
||||
free(fs_info);
|
||||
|
||||
return 0;
|
||||
diff --git a/extent-cache.c b/extent-cache.c
|
||||
index b871e18..b424975 100644
|
||||
--- a/extent-cache.c
|
||||
+++ b/extent-cache.c
|
||||
@@ -170,3 +170,14 @@ void remove_cache_extent(struct cache_tree *tree,
|
||||
rb_erase(&pe->rb_node, &tree->root);
|
||||
}
|
||||
|
||||
+void free_cache_tree(struct cache_tree *tree)
|
||||
+{
|
||||
+ struct rb_node *node;
|
||||
+ struct cache_extent *cache;
|
||||
+
|
||||
+ while ((node = rb_last(&tree->root)) != NULL) {
|
||||
+ cache = rb_entry(node, struct cache_extent, rb_node);
|
||||
+ remove_cache_extent(tree, cache);
|
||||
+ free(cache);
|
||||
+ }
|
||||
+}
|
||||
diff --git a/extent-cache.h b/extent-cache.h
|
||||
index 7f2f2a6..1696bc2 100644
|
||||
--- a/extent-cache.h
|
||||
+++ b/extent-cache.h
|
||||
@@ -43,6 +43,7 @@ struct cache_extent *find_cache_extent(struct cache_tree *tree,
|
||||
int insert_cache_extent(struct cache_tree *tree, u64 start, u64 size);
|
||||
int insert_existing_cache_extent(struct cache_tree *tree,
|
||||
struct cache_extent *pe);
|
||||
+void free_cache_tree(struct cache_tree *tree);
|
||||
|
||||
static inline int cache_tree_empty(struct cache_tree *tree)
|
||||
{
|
||||
diff --git a/extent-tree.c b/extent-tree.c
|
||||
index b2f9bb2..e1d7ffd 100644
|
||||
--- a/extent-tree.c
|
||||
+++ b/extent-tree.c
|
||||
@@ -2985,6 +2985,7 @@ out:
|
||||
|
||||
int btrfs_free_block_groups(struct btrfs_fs_info *info)
|
||||
{
|
||||
+ struct btrfs_space_info *space_info;
|
||||
u64 start;
|
||||
u64 end;
|
||||
u64 ptr;
|
||||
@@ -3008,6 +3009,15 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
|
||||
clear_extent_dirty(&info->free_space_cache, start,
|
||||
end, GFP_NOFS);
|
||||
}
|
||||
+
|
||||
+ while (!list_empty(&info->space_info)) {
|
||||
+ space_info = list_entry(info->space_info.next,
|
||||
+ struct btrfs_space_info,
|
||||
+ list);
|
||||
+ list_del(&space_info->list);
|
||||
+ kfree(space_info);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/extent_io.c b/extent_io.c
|
||||
index 069c199..71e6826 100644
|
||||
--- a/extent_io.c
|
||||
+++ b/extent_io.c
|
||||
@@ -572,6 +572,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
|
||||
BUG();
|
||||
return NULL;
|
||||
}
|
||||
+ memset(eb, 0, sizeof(struct extent_buffer) + blocksize);
|
||||
|
||||
eb->start = bytenr;
|
||||
eb->len = blocksize;
|
||||
diff --git a/volumes.c b/volumes.c
|
||||
index 7671855..eee66a7 100644
|
||||
--- a/volumes.c
|
||||
+++ b/volumes.c
|
||||
@@ -862,6 +862,20 @@ void btrfs_mapping_init(struct btrfs_mapping_tree *tree)
|
||||
cache_tree_init(&tree->cache_tree);
|
||||
}
|
||||
|
||||
+void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree)
|
||||
+{
|
||||
+ struct cache_extent *cache;
|
||||
+ struct rb_node *node;
|
||||
+ struct map_lookup *map;
|
||||
+
|
||||
+ while ((node = rb_last(&tree->cache_tree.root)) != NULL) {
|
||||
+ cache = rb_entry(node, struct cache_extent, rb_node);
|
||||
+ map = container_of(cache, struct map_lookup, ce);
|
||||
+ remove_cache_extent(&tree->cache_tree, cache);
|
||||
+ free(map);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int btrfs_num_copies(struct btrfs_mapping_tree *map_tree, u64 logical, u64 len)
|
||||
{
|
||||
struct cache_extent *ce;
|
||||
@@ -1340,7 +1354,7 @@ int btrfs_read_sys_array(struct btrfs_root *root)
|
||||
if (!sb)
|
||||
return -ENOMEM;
|
||||
btrfs_set_buffer_uptodate(sb);
|
||||
- write_extent_buffer(sb, super_copy, 0, BTRFS_SUPER_INFO_SIZE);
|
||||
+ write_extent_buffer(sb, super_copy, 0, sizeof(*super_copy));
|
||||
array_size = btrfs_super_sys_array_size(super_copy);
|
||||
|
||||
/*
|
||||
diff --git a/volumes.h b/volumes.h
|
||||
index bb78751..e466b31 100644
|
||||
--- a/volumes.h
|
||||
+++ b/volumes.h
|
||||
@@ -130,4 +130,5 @@ int btrfs_add_system_chunk(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_root *root, struct btrfs_key *key,
|
||||
struct btrfs_chunk *chunk, int item_size);
|
||||
int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset);
|
||||
+void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree);
|
||||
#endif
|
||||
--
|
||||
1.5.4.3
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
663
btrfs-progs.spec
663
btrfs-progs.spec
@ -1,638 +1,69 @@
|
||||
# Local definition of version_no_tilde when it doesn't exist
|
||||
%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
|
||||
|
||||
Name: btrfs-progs
|
||||
Version: 6.2.2
|
||||
Release: 1%{?dist}
|
||||
Version: 0.19
|
||||
Release: 9%{?dist}
|
||||
Summary: Userspace programs for btrfs
|
||||
|
||||
License: GPL-2.0-only
|
||||
URL: https://btrfs.wiki.kernel.org/index.php/Main_Page
|
||||
Source0: https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{name}-v%{version_no_tilde}.tar.xz
|
||||
Source1: https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{name}-v%{version_no_tilde}.tar.sign
|
||||
Source2: gpgkey-F2B41200C54EFB30380C1756C565D5F9D76D583B.gpg
|
||||
Group: System Environment/Base
|
||||
License: GPLv2
|
||||
URL: http://btrfs.wiki.kernel.org/index.php/Main_Page
|
||||
Source0: http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/%{name}-%{version}.tar.bz2
|
||||
Patch0: btrfs-progs-fix-labels.patch
|
||||
Patch1: btrfs-progs-build-everything.patch
|
||||
Patch2: btrfs-progs-valgrind.patch
|
||||
Patch3: btrfs-progs-upstream.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
# Upstreamable changes
|
||||
## From: https://lore.kernel.org/linux-btrfs/20230322221714.2702819-1-neal@gompa.dev/T/#t
|
||||
Patch0101: 0001-btrfs-progs-mkfs-Enforce-4k-sectorsize-by-default.patch
|
||||
## Fedora specific doc change stacked on top
|
||||
Patch0102: 0002-btrfs-progs-mkfs-doc-Drop-version-change-for-4k-sect.patch
|
||||
BuildRequires: e2fsprogs-devel, libuuid-devel, zlib-devel, libacl-devel
|
||||
|
||||
|
||||
BuildRequires: gnupg2
|
||||
BuildRequires: gcc, autoconf, automake, make
|
||||
BuildRequires: git-core
|
||||
BuildRequires: e2fsprogs-devel
|
||||
BuildRequires: libacl-devel, lzo-devel
|
||||
BuildRequires: pkgconfig(blkid)
|
||||
BuildRequires: pkgconfig(uuid)
|
||||
BuildRequires: pkgconfig(zlib)
|
||||
BuildRequires: pkgconfig(libgcrypt) >= 1.8.0
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(libzstd) >= 1.0.0
|
||||
BuildRequires: python3-sphinx
|
||||
BuildRequires: systemd
|
||||
BuildRequires: python3-devel >= 3.4
|
||||
BuildRequires: python3-setuptools
|
||||
%define _root_sbindir /sbin
|
||||
|
||||
%description
|
||||
The btrfs-progs package provides all the userspace programs needed to create,
|
||||
The btrfs-progs package provides all the userpsace programs needed to create,
|
||||
check, modify and correct any inconsistencies in the btrfs filesystem.
|
||||
|
||||
%package -n libbtrfs
|
||||
Summary: btrfs filesystem-specific runtime libraries
|
||||
License: GPL-2.0-only
|
||||
# Upstream deprecated this library
|
||||
Provides: deprecated()
|
||||
# This was not properly split out before
|
||||
Conflicts: %{name} < 4.20.2
|
||||
|
||||
%description -n libbtrfs
|
||||
libbtrfs contains the main library used by btrfs
|
||||
filesystem-specific programs.
|
||||
|
||||
%package -n libbtrfsutil
|
||||
Summary: btrfs filesystem-specific runtime utility libraries
|
||||
License: LGPL-2.1-or-later
|
||||
# This was not properly split out before
|
||||
Conflicts: %{name}-devel < 4.20.2
|
||||
|
||||
%description -n libbtrfsutil
|
||||
libbtrfsutil contains an alternative utility library used by btrfs
|
||||
filesystem-specific programs.
|
||||
|
||||
%package devel
|
||||
Summary: btrfs filesystem-specific libraries and headers
|
||||
# libbtrfsutil is LGPLv2+
|
||||
License: GPL-2.0-only and LGPL-2.1-or-later
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: libbtrfs%{?_isa} = %{version}-%{release}
|
||||
Requires: libbtrfsutil%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
btrfs-progs-devel contains the libraries and header files needed to
|
||||
develop btrfs filesystem-specific programs.
|
||||
|
||||
It includes development files for two libraries:
|
||||
- libbtrfs (GPLv2)
|
||||
- libbtrfsutil (LGPLv2+)
|
||||
|
||||
You should install btrfs-progs-devel if you want to develop
|
||||
btrfs filesystem-specific programs.
|
||||
|
||||
%package -n python3-btrfsutil
|
||||
Summary: Python 3 bindings for libbtrfsutil
|
||||
License: LGPL-2.1-or-later
|
||||
Requires: libbtrfsutil%{?_isa} = %{version}-%{release}
|
||||
%{?python_provide:%python_provide python3-btrfsutil}
|
||||
|
||||
%description -n python3-btrfsutil
|
||||
python3-btrfsutil contains Python 3 bindings to the libbtrfsutil library,
|
||||
which can be used for btrfs filesystem-specific programs in Python.
|
||||
|
||||
You should install python3-btrfsutil if you want to use or develop
|
||||
btrfs filesystem-specific programs in Python.
|
||||
|
||||
%prep
|
||||
xzcat '%{SOURCE0}' | %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data=-
|
||||
%autosetup -n %{name}-v%{version_no_tilde} -S git_am
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
|
||||
%build
|
||||
./autogen.sh
|
||||
%configure CFLAGS="%{optflags} -fno-strict-aliasing" --with-crypto=libgcrypt --disable-python
|
||||
%make_build
|
||||
|
||||
pushd libbtrfsutil/python
|
||||
%py3_build
|
||||
popd
|
||||
make CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}
|
||||
make CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags} convert
|
||||
|
||||
%install
|
||||
%make_install mandir=%{_mandir} bindir=%{_sbindir} libdir=%{_libdir} incdir=%{_includedir}
|
||||
install -Dpm0644 btrfs-completion %{buildroot}%{_datadir}/bash-completion/completions/btrfs
|
||||
# Nuke the static lib
|
||||
rm -v %{buildroot}%{_libdir}/*.a
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
make mandir=%{_mandir} bindir=%{_root_sbindir} install DESTDIR=$RPM_BUILD_ROOT
|
||||
|
||||
pushd libbtrfsutil/python
|
||||
%py3_install
|
||||
popd
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%license COPYING
|
||||
%{_sbindir}/btrfsck
|
||||
%{_sbindir}/fsck.btrfs
|
||||
%{_sbindir}/mkfs.btrfs
|
||||
%{_sbindir}/btrfs-image
|
||||
%{_sbindir}/btrfs-convert
|
||||
%{_sbindir}/btrfs-select-super
|
||||
%{_sbindir}/btrfstune
|
||||
%{_sbindir}/btrfs
|
||||
%{_sbindir}/btrfs-map-logical
|
||||
%{_sbindir}/btrfs-find-root
|
||||
%{_mandir}/man5/*
|
||||
%{_mandir}/man8/*
|
||||
%{_udevrulesdir}/64-btrfs-dm.rules
|
||||
%{_udevrulesdir}/64-btrfs-zoned.rules
|
||||
%{_datadir}/bash-completion/completions/btrfs
|
||||
|
||||
%files -n libbtrfs
|
||||
%license COPYING
|
||||
%{_libdir}/libbtrfs.so.0*
|
||||
|
||||
%files -n libbtrfsutil
|
||||
%license libbtrfsutil/COPYING
|
||||
%{_libdir}/libbtrfsutil.so.1*
|
||||
|
||||
%files devel
|
||||
%{_includedir}/*
|
||||
%{_libdir}/libbtrfs.so
|
||||
%{_libdir}/libbtrfsutil.so
|
||||
%{_libdir}/pkgconfig/libbtrfsutil.pc
|
||||
|
||||
%files -n python3-btrfsutil
|
||||
%license libbtrfsutil/COPYING
|
||||
%{python3_sitearch}/btrfsutil.*.so
|
||||
%{python3_sitearch}/btrfsutil-*.egg-info/
|
||||
%defattr(-,root,root,-)
|
||||
%doc COPYING INSTALL
|
||||
%{_root_sbindir}/btrfsctl
|
||||
%{_root_sbindir}/btrfsck
|
||||
%{_root_sbindir}/mkfs.btrfs
|
||||
%{_root_sbindir}/btrfs-debug-tree
|
||||
%{_root_sbindir}/btrfs-image
|
||||
%{_root_sbindir}/btrfs-show
|
||||
%{_root_sbindir}/btrfs-vol
|
||||
%{_root_sbindir}/btrfs-convert
|
||||
%{_root_sbindir}/btrfstune
|
||||
%{_mandir}/man8/btrfs-image.8.gz
|
||||
%{_mandir}/man8/btrfs-show.8.gz
|
||||
%{_mandir}/man8/btrfsck.8.gz
|
||||
%{_mandir}/man8/btrfsctl.8.gz
|
||||
%{_mandir}/man8/mkfs.btrfs.8.gz
|
||||
|
||||
%changelog
|
||||
* Sun Mar 26 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.2.2-1
|
||||
- Update to 6.2.2
|
||||
* Mon Oct 19 2009 Josef Bacik <josef@toxicpanda.com> 0.19-9
|
||||
- release bump because I messed up the tagging
|
||||
|
||||
* Wed Mar 22 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.2.1-2
|
||||
- Add patch to force default sectorsize to 4k
|
||||
|
||||
* Mon Mar 06 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.2.1-1
|
||||
- Update to 6.2.1
|
||||
|
||||
* Wed Jan 25 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.1.3-1
|
||||
- Update to 6.1.3
|
||||
- Switch to SPDX license identifiers
|
||||
|
||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 6.1.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Thu Jan 05 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.1.2-1
|
||||
- Update to 6.1.2
|
||||
|
||||
* Tue Jan 03 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.1.1-1
|
||||
- Update to 6.1.1
|
||||
|
||||
* Fri Dec 30 2022 Neal Gompa <ngompa@fedoraproject.org> - 6.1-2
|
||||
- Add fix to show UUID with "btrfs subvolume list -u"
|
||||
|
||||
* Fri Dec 23 2022 Neal Gompa <ngompa@fedoraproject.org> - 6.1-1
|
||||
- Update to 6.1
|
||||
- Use libgcrypt for cryptographic hash functions
|
||||
|
||||
* Fri Nov 25 2022 Neal Gompa <ngompa@fedoraproject.org> - 6.0.2-1
|
||||
- Update to 6.0.2
|
||||
|
||||
* Fri Nov 04 2022 Igor Raits <ignatenkobrain@fedoraproject.org> - 6.0.1-1
|
||||
- Update to 6.0.1
|
||||
|
||||
* Thu Oct 13 2022 Neal Gompa <ngompa@fedoraproject.org> - 6.0-1
|
||||
- Update to 6.0
|
||||
|
||||
* Thu Oct 13 2022 Neal Gompa <ngompa@fedoraproject.org> - 5.19.1-1
|
||||
- Update to 5.19.1
|
||||
|
||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.18-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 5.18-2
|
||||
- Rebuilt for Python 3.11
|
||||
|
||||
* Wed May 25 2022 Neal Gompa <ngompa@fedoraproject.org> - 5.18-1
|
||||
- Update to 5.18
|
||||
|
||||
* Wed Feb 16 2022 Neal Gompa <ngompa@fedoraproject.org> - 5.16.2-1
|
||||
- Update to 5.16.2
|
||||
|
||||
* Sat Feb 05 2022 Igor Raits <igor.raits@gmail.com> - 5.16.1-1
|
||||
- Update to 5.16.1
|
||||
|
||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.16-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Mon Jan 17 2022 Neal Gompa <ngompa@fedoraproject.org> - 5.16-1
|
||||
- Update to 5.16
|
||||
|
||||
* Mon Nov 22 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.15.1-1
|
||||
- Update to 5.15.1
|
||||
|
||||
* Fri Nov 05 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.15-1
|
||||
- Update to 5.15
|
||||
|
||||
* Sat Oct 30 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.14.91-1
|
||||
- Update to 5.14.91 (5.15~rc1)
|
||||
|
||||
* Sat Oct 09 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.14.2-1
|
||||
- Update to 5.14.2
|
||||
|
||||
* Mon Sep 20 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.14.1-1
|
||||
- Update to 5.14.1
|
||||
|
||||
* Fri Sep 10 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.14-2
|
||||
- Mark libbtrfs as deprecated, per upstream release notes
|
||||
|
||||
* Fri Sep 10 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.14-1
|
||||
- Update to 5.14
|
||||
|
||||
* Fri Jul 30 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.13.1-1
|
||||
- Update to 5.13.1
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.13-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Tue Jul 13 2021 Neal Gompa <ngompa@fedoraproject.org> - 5.13-1
|
||||
- Update to 5.13
|
||||
|
||||
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 5.12.1-2
|
||||
- Rebuilt for Python 3.10
|
||||
|
||||
* Thu May 13 2021 Neal Gompa <ngompa13@gmail.com> - 5.12.1-1
|
||||
- Update to 5.12.1
|
||||
|
||||
* Mon May 10 2021 Neal Gompa <ngompa13@gmail.com> - 5.12-1
|
||||
- Update to 5.12
|
||||
|
||||
* Sun Mar 28 2021 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.11.1-1
|
||||
- Update to 5.11.1
|
||||
|
||||
* Fri Mar 05 2021 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.11-1
|
||||
- Update to 5.11
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.10-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Jan 19 2021 Neal Gompa <ngompa13@gmail.com> - 5.10-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Jan 15 2021 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.10~rc1-1
|
||||
- Update to 5.10-rc1
|
||||
|
||||
* Fri Oct 23 2020 Neal Gompa <ngompa13@gmail.com> - 5.9-1
|
||||
- New upstream release
|
||||
- Build Python bindings
|
||||
- Drop patches incorporated into this release
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.7-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Fri Jul 24 2020 Neal Gompa <ngompa13@gmail.com> - 5.7-4
|
||||
- Backport fix for converting 64-bit ext4 filesystems (#1851674)
|
||||
|
||||
* Tue Jul 21 2020 Neal Gompa <ngompa13@gmail.com> - 5.7-3
|
||||
- Backport fix to not use raid0 by default for mkfs multi-disk (#1855174)
|
||||
|
||||
* Wed Jul 08 2020 Carl George <carl@george.computer> - 5.7-2
|
||||
- Include bash completion
|
||||
|
||||
* Thu Jul 02 2020 Neal Gompa <ngompa13@gmail.com> - 5.7-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Jun 30 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.7~rc1-1
|
||||
- Update to 5.7-rc1
|
||||
|
||||
* Mon Jun 15 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.6.1-2
|
||||
- Rebuild
|
||||
|
||||
* Mon Jun 08 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 5.6.1-1
|
||||
- Update to 5.6.1
|
||||
|
||||
* Sun Apr 05 2020 Neal Gompa <ngompa13@gmail.com> - 5.6-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.4-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Fri Dec 06 2019 Neal Gompa <ngompa13@gmail.com> - 5.4-1
|
||||
- New upstream release
|
||||
|
||||
* Sat Aug 24 2019 Neal Gompa <ngompa13@gmail.com> - 5.2.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Thu May 30 2019 Neal Gompa <ngompa13@gmail.com> - 5.1-1
|
||||
- New upstream release
|
||||
|
||||
* Sun Mar 10 2019 Neal Gompa <ngompa13@gmail.com> - 4.20.2-1
|
||||
- New upstream release
|
||||
- Properly split out libraries into libs subpackages
|
||||
- Slightly modernize the spec
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.19.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Wed Dec 05 2018 Eric Sandeen <sandeen@redhat.com> 4.19.-1
|
||||
- New usptream release
|
||||
|
||||
* Mon Aug 06 2018 Eric Sandeen <sandeen@redhat.com> 4.17.1-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Jul 23 2018 Eric Sandeen <sandeen@redhat.com> 4.17-1
|
||||
- New upstream release
|
||||
- Removes deprecated btrfs-debug-tree, btrfs-zero-log
|
||||
|
||||
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.16-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 4.16-3
|
||||
- Rebuilt for Python 3.7
|
||||
|
||||
* Sun Apr 08 2018 Eric Sandeen <sandeen@redhat.com> 4.16-2
|
||||
- Fix up header install paths in devel package (#1564881)
|
||||
|
||||
* Fri Apr 06 2018 Eric Sandeen <sandeen@redhat.com> 4.16-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Feb 26 2018 Eric Sandeen <sandeen@redhat.com> 4.15.1-2
|
||||
- BuildRequires: gcc
|
||||
|
||||
* Fri Feb 16 2018 Eric Sandeen <sandeen@redhat.com> 4.15.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.14.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Fri Jan 05 2018 Eric Sandeen <sandeen@redhat.com> 4.14.1-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Oct 17 2017 Eric Sandeen <sandeen@redhat.com> 4.13.3-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Oct 06 2017 Eric Sandeen <sandeen@redhat.com> 4.13.2-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Sep 26 2017 Eric Sandeen <sandeen@redhat.com> 4.13.1-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Sep 08 2017 Eric Sandeen <sandeen@redhat.com> 4.13-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Aug 28 2017 Eric Sandeen <sandeen@redhat.com> 4.12.1-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Jul 31 2017 Eric Sandeen <sandeen@redhat.com> 4.12-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Jul 31 2017 Igor Gnatenko <ignatenko@redhat.com> - 4.11.1-3
|
||||
- Add missing BuildRequires: systemd
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.11.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Mon Jul 03 2017 Eric Sandeen <sandeen@redhat.com> 4.11.1-1
|
||||
- New upstream release
|
||||
|
||||
* Thu May 18 2017 Eric Sandeen <sandeen@redhat.com> 4.11-1
|
||||
- New upstream release
|
||||
|
||||
* Wed May 03 2017 Eric Sandeen <sandeen@redhat.com> 4.10.2-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Mar 17 2017 Eric Sandeen <sandeen@redhat.com> 4.10.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Mar 8 2017 Eric Sandeen <sandeen@redhat.com> 4.10-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.9.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Fri Jan 27 2017 Eric Sandeen <sandeen@redhat.com> 4.9.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Jan 25 2017 Eric Sandeen <sandeen@redhat.com> 4.9-2
|
||||
- Remove unapplied patches
|
||||
|
||||
* Fri Dec 23 2016 Eric Sandeen <sandeen@redhat.com> 4.9-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Nov 30 2016 Eric Sandeen <sandeen@redhat.com> 4.8.5-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Nov 25 2016 Eric Sandeen <sandeen@redhat.com> 4.8.4-1
|
||||
- New upstream release
|
||||
- btrfs-show-super removed (deprecated upstream)
|
||||
|
||||
* Sat Nov 12 2016 Eric Sandeen <sandeen@redhat.com> 4.8.3-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Oct 28 2016 Eric Sandeen <sandeen@redhat.com> 4.8.2-2
|
||||
- Remove ioctl patch, different fix upstream
|
||||
|
||||
* Thu Oct 13 2016 Eric Sandeen <sandeen@redhat.com> 4.8.1-2
|
||||
- Fix build of apps including ioctl.h (bz#1384413)
|
||||
|
||||
* Wed Oct 12 2016 Eric Sandeen <sandeen@redhat.com> 4.8.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Oct 12 2016 Eric Sandeen <sandeen@redhat.com> 4.8-1
|
||||
- New upstream release (FTBFS on 32-bit)
|
||||
|
||||
* Wed Sep 21 2016 Eric Sandeen <sandeen@redhat.com> 4.7.3-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Sep 05 2016 Eric Sandeen <sandeen@redhat.com> 4.7.2-1
|
||||
- New upstream release
|
||||
|
||||
* Sat Aug 27 2016 Eric Sandeen <sandeen@redhat.com> 4.7.1-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Aug 01 2016 Eric Sandeen <sandeen@redhat.com> 4.7-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Jun 24 2016 Eric Sandeen <sandeen@redhat.com> 4.6.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Jun 15 2016 Eric Sandeen <sandeen@redhat.com> 4.6-1
|
||||
- New upstream release
|
||||
|
||||
* Fri May 13 2016 Eric Sandeen <sandeen@redhat.com> 4.5.3-1
|
||||
- New upstream release
|
||||
|
||||
* Mon May 02 2016 Eric Sandeen <sandeen@redhat.com> 4.5.2-1
|
||||
- New upstream release
|
||||
|
||||
* Thu Mar 31 2016 Eric Sandeen <sandeen@redhat.com> 4.5.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Mar 30 2016 Eric Sandeen <sandeen@redhat.com> 4.5-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Feb 26 2016 Eric Sandeen <sandeen@redhat.com> 4.4.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 4.4-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Mon Jan 25 2016 Eric Sandeen <sandeen@redhat.com> 4.4-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Nov 18 2015 Eric Sandeen <sandeen@redhat.com> 4.3.1-1
|
||||
- New upstream release
|
||||
|
||||
* Thu Oct 08 2015 Eric Sandeen <sandeen@redhat.com> 4.2.2-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Sep 22 2015 Eric Sandeen <sandeen@redhat.com> 4.2.1-1
|
||||
- New upstream release
|
||||
|
||||
* Thu Sep 03 2015 Eric Sandeen <sandeen@redhat.com> 4.2-1
|
||||
- New upstream release
|
||||
|
||||
* Thu Aug 06 2015 Eric Sandeen <sandeen@redhat.com> 4.1.2-1
|
||||
- New upstream release
|
||||
- Fix to reject unknown mkfs options (#1246468)
|
||||
|
||||
* Mon Jun 22 2015 Eric Sandeen <sandeen@redhat.com> 4.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.0.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Wed May 20 2015 Eric Sandeen <sandeen@redhat.com> 4.0.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Apr 29 2015 Eric Sandeen <sandeen@redhat.com> 4.0-1
|
||||
- New upstream release
|
||||
|
||||
* Thu Mar 26 2015 Eric Sandeen <sandeen@redhat.com> 3.19.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Mar 11 2015 Eric Sandeen <sandeen@redhat.com> 3.19-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Jan 27 2015 Eric Sandeen <sandeen@redhat.com> 3.18.2-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Jan 12 2015 Eric Sandeen <sandeen@redhat.com> 3.18.1-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Jan 02 2015 Eric Sandeen <sandeen@redhat.com> 3.18-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Dec 05 2014 Eric Sandeen <sandeen@redhat.com> 3.17.3-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Nov 21 2014 Eric Sandeen <sandeen@redhat.com> 3.17.2-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Oct 20 2014 Eric Sandeen <sandeen@redhat.com> 3.17-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Oct 03 2014 Eric Sandeen <sandeen@redhat.com> 3.16.2-1
|
||||
- New upstream release
|
||||
- Update upstream source location
|
||||
|
||||
* Wed Aug 27 2014 Eric Sandeen <sandeen@redhat.com> 3.16-1
|
||||
- New upstream release
|
||||
|
||||
* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.14.2-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Mon Jun 16 2014 Eric Sandeen <sandeen@redhat.com> 3.14.2-3
|
||||
- Support specification of UUID at mkfs time (#1094857)
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.14.2-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Fri May 30 2014 Eric Sandeen <sandeen@redhat.com> 3.14.2-1
|
||||
- New upstream release
|
||||
|
||||
* Tue Apr 22 2014 Eric Sandeen <sandeen@redhat.com> 3.14.1-1
|
||||
- New upstream release
|
||||
|
||||
* Wed Apr 16 2014 Eric Sandeen <sandeen@redhat.com> 3.14-1
|
||||
- New upstream release
|
||||
|
||||
* Mon Jan 20 2014 Eric Sandeen <sandeen@redhat.com> 3.12-2
|
||||
- Add proper Source0 URL, switch to .xz
|
||||
|
||||
* Mon Nov 25 2013 Eric Sandeen <sandeen@redhat.com> 3.12-1
|
||||
- It's a new upstream release!
|
||||
|
||||
* Thu Nov 14 2013 Eric Sandeen <sandeen@redhat.com> 0.20.rc1.20131114git9f0c53f-1
|
||||
- New upstream snapshot
|
||||
|
||||
* Tue Sep 17 2013 Eric Sandeen <sandeen@redhat.com> 0.20.rc1.20130917git194aa4a-1
|
||||
- New upstream snapshot
|
||||
- Deprecated btrfsctl, btrfs-show, and btrfs-vol; still available in btrfs cmd
|
||||
|
||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.20.rc1.20130501git7854c8b-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Mon May 13 2013 Richard W.M. Jones <rjones@redhat.com> 0.20.rc1.20130501git7854c8b-3
|
||||
- Add accepted upstream patch to fix SONAME libbtrfs.so -> libbtrfs.so.0
|
||||
|
||||
* Thu May 02 2013 Eric Sandeen <sandeen@redhat.com> 0.20.rc1.20130501git7854c8b-2
|
||||
- Fix subpackage brokenness
|
||||
|
||||
* Wed May 01 2013 Eric Sandeen <sandeen@redhat.com> 0.20.rc1.20130501git7854c8b-1
|
||||
- New upstream snapshot
|
||||
- btrfs-progs-devel subpackage
|
||||
|
||||
* Fri Mar 08 2013 Eric Sandeen <sandeen@redhat.com> 0.20.rc1.20130308git704a08c-1
|
||||
- New upstream snapshot
|
||||
- btrfs-restore is now a command in the btrfs utility
|
||||
|
||||
* Wed Feb 13 2013 Richard W.M. Jones <rjones@redhat.com> 0.20.rc1.20121017git91d9eec-3
|
||||
- Include upstream patch to clear caches as a partial fix for RHBZ#863978.
|
||||
|
||||
* Thu Nov 1 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-2
|
||||
- fix a bug when mkfs'ing a file (rhbz# 871778)
|
||||
|
||||
* Wed Oct 17 2012 Josef Bacik <josef@toxicpanda.com> 0.20.rc1.20121017git91d9eec-1
|
||||
- update to latest btrfs-progs
|
||||
|
||||
* Wed Oct 10 2012 Richard W.M. Jones <rjones@redhat.com> 0.19.20120817git043a639-2
|
||||
- Add upstream patch to correct uninitialized fsid variable
|
||||
(possible fix for RHBZ#863978).
|
||||
|
||||
* Fri Aug 17 2012 Josef Bacik <josef@toxicpanda.com> 0.19.20120817git043a639-1
|
||||
- update to latest btrfs-progs
|
||||
|
||||
* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.19-20
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Wed Apr 25 2012 Josef Bacik <josef@toxicpanda.com> 0.19-19
|
||||
- make btrfs filesystem show <uuid> actually work (rhbz# 816293)
|
||||
|
||||
* Wed Apr 11 2012 Josef Bacik <josef@toxicpanda.com> 0.19-18
|
||||
- updated to latest btrfs-progs
|
||||
|
||||
* Thu Jan 12 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.19-17
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Fri Aug 05 2011 Josef Bacik <josef@toxicpanda.com> 0.19-16
|
||||
- fix build-everything patch to actually build everything
|
||||
|
||||
* Fri Aug 05 2011 Josef Bacik <josef@toxicpanda.com> 0.19-15
|
||||
- actually build btrfs-zero-log
|
||||
|
||||
* Thu Aug 04 2011 Josef Bacik <josef@toxicpanda.com> 0.19-14
|
||||
- bring btrfs-progs uptodate with upstream
|
||||
|
||||
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.19-13
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Fri Aug 20 2010 Adam Tkac <atkac redhat com> 0.19-12
|
||||
- rebuild to ensure F14 has bigger NVR than F13
|
||||
|
||||
* Wed Mar 24 2010 Josef Bacik <josef@toxicpanda.com> 0.19-11
|
||||
- bring btrfs-progs uptodate with upstream, add btrfs command and other
|
||||
features.
|
||||
|
||||
* Thu Mar 11 2010 Josef Bacik <josef@toxicpanda.com> 0.19-10
|
||||
- fix dso linking issue and bring btrfs-progs uptodate with upstream
|
||||
|
||||
* Tue Feb 2 2010 Josef Bacik <josef@toxicpanda.com> 0.19-9
|
||||
- fix btrfsck so it builds on newer glibcs
|
||||
|
||||
* Tue Feb 2 2010 Josef Bacik <josef@toxicpanda.com> 0.19-8
|
||||
- fix btrfsctl to return 0 on success and 1 on failure
|
||||
* Mon Oct 19 2009 Josef Bacik <josef@toxicpanda.com> 0.19-8
|
||||
- bring btrfs-progs uptodate with upstream, adds destroy ioctl and fixes
|
||||
converter
|
||||
|
||||
* Tue Aug 25 2009 Josef Bacik <josef@toxicpanda.com> 0.19-7
|
||||
- add btrfs-progs-valgrind.patch to fix memory leaks and segfaults
|
||||
@ -682,7 +113,7 @@ popd
|
||||
* Sat Jan 10 2009 Marek Mahut <mmahut@fedoraproject.org> 0.16-1
|
||||
- Upstream release 0.16
|
||||
|
||||
* Wed Jun 25 2008 Josef Bacik <josef@toxicpanda.com> 0.15-4
|
||||
* Mon Jun 25 2008 Josef Bacik <josef@toxicpanda.com> 0.15-4
|
||||
-use fedoras normal CFLAGS
|
||||
|
||||
* Mon Jun 23 2008 Josef Bacik <josef@toxicpanda.com> 0.15-3
|
||||
|
Binary file not shown.
3
sources
3
sources
@ -1,2 +1 @@
|
||||
SHA512 (btrfs-progs-v6.2.2.tar.sign) = cd05827dfd66de7eefb0dc9534baacffe7b115fa1f3b2c0d0e7bb280ff47ed9c6308684db2284f65750fb883bbcc2fecb36c09b597f11b07e29d8864b032af33
|
||||
SHA512 (btrfs-progs-v6.2.2.tar.xz) = 967e1c1a6b956a4e11a794aad090d1cf370fd98e4186525ccfbbbc9ae3f2bb66ace1d684730f93c558403b7ac1c991aec3d04d07548b19ee1516352a069431db
|
||||
5854728d080cc76f21a83bdc99b6ddaa btrfs-progs-0.19.tar.bz2
|
||||
|
Loading…
Reference in New Issue
Block a user