Commit Graph

180 Commits

Author SHA1 Message Date
Alexander Block
84b9586a89 Btrfs-progs: update btrfs-progs for subvol uuid+times support
Update ctree.h and ioctl.h for the new uuid+times for subvolumes.

Signed-off-by: Alexander Block <ablock84@googlemail.com>
2012-07-26 14:51:17 -04:00
Alexander Block
499316aeda Btrfs-progs: print inode transid and dir item data field in debug-tree
Add printing of inode transid and dir item data field.

Signed-off-by: Alexander Block <ablock84@googlemail.com>
2012-07-26 14:51:16 -04:00
Ilya Dryomov
842a2fb01b Btrfs-progs: make print-tree.c aware of free space cache
This adds proper formatting for free space and inode cache items in
btrfs-debug-tree output.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
2012-03-13 18:36:56 +02:00
Chris Mason
f5c4c4f3b7 btrfsck: add code to rebuild extent records
This also includes a new --repair btrfsck option.  For now it can
only fix errors in the extent allocation tree.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
2012-02-07 10:58:32 -05:00
Ilya Dryomov
4f3a15d09a Btrfs-progs: add restriper headers
Add restriper headers and update print-tree.c

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
2012-02-03 21:02:29 +02:00
Chris Mason
24825392b3 Print the root generation in btrfs-debug-tree
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2011-10-25 09:51:11 -04:00
Anton Blanchard
fa81a569ac btrfs-progs: cast u64 to long long to avoid printf warnings
When building on ppc64 I hit a number of warnings in printf:

btrfs-map-logical.c:69: error: format ‘%Lu’ expects type ‘long long
unsigned int’, but argument 4 has type ‘u64’

Fix them.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Hugo Mills <hugo@carfax.org.uk>
2011-10-25 09:18:57 -04:00
Chris Ball
fcdc0929c6 Fix unused-but-set errors in gcc-4.6
gcc-4.6 (as shipped in Fedora) turns on -Wunused-but-set-variable by
default, which breaks the build when combined with -Wall, e.g.:

debug-tree.c: In function ‘print_extent_leaf’:
debug-tree.c:45:13: error: variable ‘last_len’ set but not used [-Werror=unused-but-set-variable]
debug-tree.c:44:13: error: variable ‘last’ set but not used [-Werror=unused-but-set-variable]
debug-tree.c:41:21: error: variable ‘item’ set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors

This patch fixes the errors by removing the unused variables.

Signed-off-by: Chris Ball <cjb@laptop.org>
Signed-off-by: Hugo Mills <hugo@carfax.org.uk>
2011-10-25 09:18:32 -04:00
Sage Weil
595cb1df15 only print FIRST_CHUNK_TREE for chunk items in debug-tree
Otherwise we print FIRST_CHUNK_TREE for any objectid 256, which e.g. for
the root tree is the first snap/subvol.

Signed-off-by: Sage Weil <sage@newdream.net>
2010-09-23 20:26:49 -04:00
Chris Mason
075587c96c Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
Chris Mason
95d3f20b51 Mixed back reference (FORWARD ROLLING FORMAT CHANGE)
This commit introduces a new kind of back reference for btrfs metadata.
Once a filesystem has been mounted with this commit, IT WILL NO LONGER
BE MOUNTABLE BY OLDER KERNELS.

The new back ref provides information about pointer's key, level and in which
tree the pointer lives. This information allow us to find the pointer by
searching the tree. The shortcoming of the new back ref is that it only works
for pointers in tree blocks referenced by their owner trees.

This is mostly a problem for snapshots, where resolving one of these fuzzy back
references would be O(number_of_snapshots) and quite slow.  The solution used
here is to use the fuzzy back references in the common case where a given tree
block is only referenced by one root, and use the full back references when
multiple roots have a reference
2009-06-08 13:30:36 -04:00
Luca Bruno
6fa19b04d9 Fix printf format casting errors
There are still some warnings of the form:

format '%llu' expects type 'long long unsigned int' but argument has type 'u64'

In conjunction with -Werror, this is causing some build failures.
Now they're properly casted, avoiding compiler warnings.

Signed-off-by: Luca Bruno <lucab@debian.org>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2009-06-03 12:15:40 -04:00
Shen Feng
61907d4e81 Update btrfs-debug-tree to output more readable strings.
output objectid in btrfs_disk_key with human readable strings.
Other updates are included for more readable output.

Thanks Fengguang's fix to this patch.

Signed-off-by: Shen Feng <shen@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2009-06-03 12:15:40 -04:00
Chris Mason
ed20f5fc90 Fix print-tree.c to skip blocks it can't read instead of aborting 2009-05-13 11:27:35 -04:00
Chris Mason
cc04d99e90 Add scan of the btrfs log tree to btrfs-debug-tree 2009-04-15 14:30:14 -04:00
Shen Feng
52b14673e6 debug-tree output tree/key type instead of id
This makes the tree name and key type output more readable.

Signed-off-by: Shen Feng <shen@cn.fujitsu.com>
2009-01-07 14:57:12 -05:00
Chris Mason
d79f499eae Btrfs: move data checksumming into a dedicated tree
Btrfs stores checksums for each data block.  Until now, they have
been stored in the subvolume trees, indexed by the inode that is
referencing the data block.  This means that when we read the inode,
we've probably read in at least some checksums as well.

But, this has a few problems:

* The checksums are indexed by logical offset in the file.  When
compression is on, this means we have to do the expensive checksumming
on the uncompressed data.  It would be faster if we could checksum
the compressed data instead.

* If we implement encryption, we'll be checksumming the plain text and
storing that on disk.  This is significantly less secure.

* For either compression or encryption, we have to get the plain text
back before we can verify the checksum as correct.  This makes the raid
layer balancing and extent moving much more expensive.

* It makes the front end caching code more complex, as we have touch
the subvolume and inodes as we cache extents.

* There is potentitally one copy of the checksum in each subvolume
referencing an extent.

The solution used here is to store the extent checksums in a dedicated
tree.  This allows us to index the checksums by phyiscal extent
start and length.  It means:

* The checksum is against the data stored on disk, after any compression
or encryption is done.

* The checksum is stored in a central location, and can be verified without
following back references, or reading inodes.

This makes compression significantly faster by reducing the amount of
data that needs to be checksummed.  It will also allow much faster
raid management code in general.

The checksums are indexed by a key with a fixed objectid (a magic value
in ctree.h) and offset set to the starting byte of the extent.  This
allows us to copy the checksum items into the fsync log tree directly (or
any other tree), without having to invent a second format for them.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
2008-12-08 17:00:31 -05:00
Yan Zheng
aa62e84c84 Btrfs image tool
This patch adds btrfs image tool. The image tool is
a debugging tool that creates/restores btrfs metadump
image.

Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
2008-11-20 09:52:48 -05:00
Chris Mason
2d9bc57b9a Add disk format requirements for subvol backward and forward refs 2008-11-18 10:34:08 -05:00
Yan Zheng
95470dfaf1 Add fallocate support v2
This patch updates btrfs-progs for fallocate support.
 
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
2008-10-31 12:48:02 -04:00
Chris Mason
c830821ddf Add disk format elements for compression
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2008-10-29 14:37:41 -04:00
Yan Zheng
5986faaf47 Remove offset field from struct btrfs_extent_ref
The offset field in struct btrfs_extent_ref records the position
inside file that file extent is referenced by. In the new back
reference system, tree leaves holding reference to file extent
are recorded explicitly. We can quickly scan these tree leaves, so the
offset field is not required.

This patch also makes the back reference system check the objectid
when extents are being deleted

Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
2008-10-09 11:55:30 -04:00
Zheng Yan
428b7fa630 Full back reference support
This patch makes the back reference system to explicit record the
location of parent node for all types of extents. The location of
parent node is placed into the offset field of backref key. Every
time a tree block is balanced, the back references for the affected
lower level extents are updated.
2008-09-23 12:29:10 -04:00
Josef Bacik
0045e0dd70 btrfs-progs: add orphan support to print-tree
This adds orphan support to print-tree so when debug_tree hits an orphan item it
will print out "orphan item" under it so you know what it is
2008-07-30 09:15:02 -04:00
Josef Bacik
059c20b384 btrfs-progs new dir index support 2008-07-24 12:13:32 -04:00
Chris Mason
9a9bdd6047 Pass down the expected generation number when reading tree blocks 2008-05-12 13:51:24 -04:00
Chris Mason
951fd7371c Add chunk uuids and update multi-device back references
Block headers now store the chunk tree uuid

Chunk items records the device uuid for each stripes

Device extent items record better back refs to the chunk tree

Block groups record better back refs to the chunk tree

The chunk tree format has also changed.  The objectid of BTRFS_CHUNK_ITEM_KEY
used to be the logical offset of the chunk.  Now it is a chunk tree id,
with the logical offset being stored in the offset field of the key.

This allows a single chunk tree to record multiple logical address spaces,
upping the number of bytes indexed by a chunk tree from 2^64 to
2^128.
2008-04-15 15:42:08 -04:00
Chris Mason
1f3ba6a3f9 Btrfsck updates for multi-device filesystems 2008-03-24 15:04:37 -04:00
Chris Mason
510be29677 Add support for multiple devices per filesystem 2008-03-24 15:03:18 -04:00
Chris Mason
ba1efed418 btrfs_print_node: don't use btrfs_item_key_to_cpu on nodes 2008-01-07 15:25:48 -05:00
Yan
7777e63b42 Update btrfs-progs to match kernel sources 2008-01-04 10:38:22 -05:00
Chris Mason
fba66bd865 Add back pointers from the inode to the directory that referenced it 2007-12-12 14:39:36 -05:00
Chris Mason
4122e65cb2 Add back pointers from extents to the file or btree referencing them 2007-12-11 09:21:42 -05:00
Chris Mason
73372dcf8f Add generation numbers to block pointers 2007-12-09 13:46:24 -05:00
Josef Bacik
e3815ddde6 xattr support for btrfs-progs 2007-11-16 11:46:07 -05:00
Chris Mason
38f79f9077 Switch to byte granular allocations 2007-10-15 16:25:14 -04:00
Chris Mason
f12d799856 Allow large blocks 2007-10-15 16:24:39 -04:00
Chris Mason
8454d619a7 extra stats for btrfsck, link count in print-tree.c 2007-09-14 09:19:19 -04:00
Chris Mason
0528b69c15 add defrag ioctl 2007-08-07 16:15:59 -04:00
Chris Mason
d9f1317c7d add GPLv2 2007-06-12 09:07:11 -04:00
Chris Mason
38ef945266 printf cleanups 2007-06-12 08:08:04 -04:00
Chris Mason
b53a236c3e remove device tree 2007-06-09 09:22:37 -04:00
Chris Mason
9b25940b9d data vs metadata flag for block groups 2007-05-30 10:21:32 -04:00
Chris Mason
007e5efb9b allocator improvements, inode block groups 2007-04-30 15:25:49 -04:00
Chris Mason
5856b7e124 start of block group code 2007-04-26 16:46:06 -04:00
Chris Mason
10d06538f1 get rid of the extent_item type field 2007-04-24 12:09:01 -04:00
Chris Mason
2f2264fc2d add owner and type fields to the extents aand block headers 2007-04-20 20:23:29 -04:00
Chris Mason
07eb5008f3 bring back the inode number directory index 2007-04-19 15:41:24 -04:00
Chris Mason
eb3bd5da66 inline file data in extents 2007-04-19 13:38:02 -04:00
Chris Mason
8c973943bb key flag reorg 2007-04-18 16:15:47 -04:00
Chris Mason
8d1d13c786 rework csum and extent item ordering 2007-04-17 15:40:34 -04:00
Chris Mason
23218726a2 early work to file_write in big extents 2007-04-16 09:23:09 -04:00
Chris Mason
3eaaf935e5 add some support for multiple devices to progs 2007-04-12 12:14:47 -04:00
Chris Mason
d23ea8706c early support for multiple devices 2007-04-11 13:57:55 -04:00
Chris Mason
e52d2e2fa1 drop owner and parentid 2007-04-10 12:36:58 -04:00
Chris Mason
1b4ca380ed drop the inode map tree 2007-04-10 12:13:29 -04:00
Chris Mason
8accdae27a start of support for subvolumes 2007-04-06 15:39:12 -04:00
Chris Mason
6542904d95 dir inode index 2007-04-04 21:23:26 -04:00
Chris Mason
4d11434c12 update print-tree for inline data 2007-04-04 13:27:22 -04:00
Chris Mason
4200896a53 add file extents to print_leaf 2007-03-26 16:01:00 -04:00
Chris Mason
132db51b1f generations on headers 2007-03-26 11:24:42 -04:00
Chris Mason
8a2c8123c5 create a root dir in mkfs 2007-03-21 11:13:29 -04:00
Chris Mason
ab61081c6c change dir-test to insert inode_items 2007-03-20 15:57:25 -04:00
Chris Mason
099f1ae6e4 Add inode map, and the start of file extent items 2007-03-20 14:38:32 -04:00
Chris Mason
80fabe2ee0 add a name_len to dir items, reorder key 2007-03-16 08:46:49 -04:00
Chris Mason
e89de2d271 directory testing code and dir item fixes 2007-03-15 15:18:43 -04:00
Chris Mason
da99898c78 Use a chunk of the key flags to record the item type.
Add (untested and simple) directory item code
Fix comp_keys to use the new key ordering
Add btrfs_insert_empty_item
2007-03-15 12:56:47 -04:00
Chris Mason
c8afca944b reorder key offset and flags 2007-03-14 14:26:53 -04:00
Chris Mason
7a0a809b4c variable block size support 2007-03-14 14:14:43 -04:00
Chris Mason
942050de0e add leaf data casting helper 2007-03-14 10:31:29 -04:00
Chris Mason
d9c9960f8d Change the super to point to a tree of trees to enable persistent snapshots 2007-03-13 16:47:54 -04:00
Chris Mason
aa60202f13 rename funcs and structs to btrfs 2007-03-13 10:46:10 -04:00
Chris Mason
3192451f58 node->blockptrs endian fixes 2007-03-13 09:28:32 -04:00
Chris Mason
f6a88938c6 struct item endian fixes 2007-03-12 20:12:07 -04:00
Chris Mason
8e17fab249 get/set for struct header fields 2007-03-12 12:01:18 -04:00
Chris Mason
79b90e3fdf Fixup reference counting on cows 2007-03-06 20:08:01 -05:00
Chris Mason
7fe73148eb more 32 bit cleanups 2007-02-26 14:26:58 -05:00
Chris Mason
ed0a072aca 32bit cleanups 2007-02-26 10:55:42 -05:00
Chris Mason
46db63cb16 u64 cleanups 2007-02-26 10:55:01 -05:00
Chris Mason
74556aa757 Break up ctree.c a little
Extent fixes
2007-02-24 06:24:44 -05:00