Commit Graph

262 Commits

Author SHA1 Message Date
Chris Mason
734603d927 Use better chunk sizes for small and large filesystems 2008-04-18 10:31:42 -04:00
Chris Mason
588bb9dfff Add support for filesystem labels via mkfs.btrfs -L 2008-04-18 10:31:42 -04:00
Chris Mason
d25165e95c Use device uuids when scanning devices 2008-04-18 10:31:42 -04:00
Chris Mason
1f81c1b6fc Add raid10 support 2008-04-16 11:14:21 -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
7e7628ec4e Fix up the quick btree code test program 2008-04-15 11:32:17 -04:00
Chris Mason
9462e711a7 Fix a few casts for 32 bit compile 2008-04-11 12:18:46 -04:00
Chris Mason
d1b04c2112 Write all super blocks during commit 2008-04-10 16:22:00 -04:00
Chris Mason
fd2d0af0bf Retry metadata reads in the face of checksum failures 2008-04-09 16:28:12 -04:00
Chris Mason
1b74adf90b Change btrfs_map_block to return a structure with mappings for all stripes 2008-04-09 16:28:12 -04:00
Chris Mason
97864fa126 Don't allow written blocks from this transaction to be reallocated
When a block is freed, it can be immediately reused if it is from
the current transaction.  But, an extra check is required to make sure
the block had not been written yet.  If it were reused after being written,
the transid in the block header might match the transid of the
next time the block was allocated.

The parent node records the transaction ID of the block it is pointing to,
and this is used as part of validating the block on reads.  So, there
can only be one version of a block per transaction.
2008-04-04 15:40:00 -04:00
Chris Mason
4f9e7f0bae Use leafsize and nodesize == pagesize for now 2008-04-09 19:49:01 -04:00
Chris Mason
a37e1e7204 Recow all roots at the end of mkfs
The mkfs code bootstraps the filesystem on a single device.  Once
the raid block groups are setup, it needs to recow all of the blocks so
that each tree is properly allocated.
2008-04-04 15:42:17 -04:00
Chris Mason
a57a255e44 Add mkfs options for data and metadata mirroring modes
mkfs.btrfs --data {raid0,raid1,single}
mkfs.btrfs --metadata {raid0,raid1,single}

In single mode, no extra duplication or striping is done.
In raid0 mode, blocks are spread across all of the available devices
In raid1 mode, blocks are mirrored across two devices.

For metadata, if raid1 is used and there is only one device, the
metadata is duplicated on that single spindle.

The defaults are raid0 for data and raid1 for metadata
2008-04-03 16:35:48 -04:00
Chris Mason
c7be130df7 Add support for single single duplication of metadata 2008-04-03 16:35:48 -04:00
Chris Mason
a6de0bd778 Add mirroring support across multiple drives 2008-04-03 16:35:48 -04:00
Chris Mason
6a87b4c00a Use getopt_long and introduce long mkfs options. -s now means --sectorsize 2008-04-01 11:08:13 -04:00
Alex Chiang
857e9a2a63 btrfs-progs: Fix printf format casting errors
We get lots of warnings of the flavor:

utils.c:441: warning: format '%Lu' expects type 'long long unsigned int' but argument 2 has type 'u64'

And thanks to -Werror, the build fails. Clean up these printfs
by properly casting the arg to the format specified.

Signed-off-by: Alex Chiang <achiang@hp.com>
2008-04-01 10:52:22 -04:00
Alex Chiang
5b4fe4f80f btrfs-progs: Stop stomping on 'name' input parameter
In btrfs_name_hash, Local variable 'buf' is declared as

	__u32 buf[2];

but we then try to do this:

	buf[0] = 0x67452301;
	buf[1] = 0xefcdab89;
	buf[2] = 0x98badcfe;
	buf[3] = 0x10325476;

Oops. Fix buf to be the proper size.

Signed-off-by: Alex Chiang <achiang@hp.com>
2008-04-01 10:38:51 -04:00
Goldwyn Rodrigues
c2c5e3e7e5 check if partition is mounted before mkfs
This saves from the blunder of formatting a live mounted filesystem.
This can be extended to get the mount flags of the filesystem
mounted.

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@gmail.com>
2008-04-01 10:36:46 -04:00
Chris Mason
ad67cd73b7 Update struct btrfs_header flags, and use it to indicate buffers are written 2008-04-01 10:20:06 -04:00
Chris Mason
e9e3422f85 Implement raid0 when multiple devices are present
This defaults to striping across all devices
2008-03-25 16:50:20 -04:00
Chris Mason
0dcfa3b827 Walk all block devices looking for btrfs 2008-03-24 15:05:44 -04:00
Chris Mason
26afd0f31d ioctls to scan for btrfs filesystems 2008-03-24 15:04:49 -04:00
Chris Mason
1f3ba6a3f9 Btrfsck updates for multi-device filesystems 2008-03-24 15:04:37 -04:00
Chris Mason
d12d4c7203 Dynamic chunk allocation 2008-03-24 15:03:58 -04:00
Chris Mason
510be29677 Add support for multiple devices per filesystem 2008-03-24 15:03:18 -04:00
Chris Mason
00eb6ff656 Remove extent back refs in batches, and avoid duplicate searches 2008-03-04 13:07:22 -05:00
Chris Mason
f3f156de82 Add debugging for block group update failure 2008-02-04 10:10:13 -05:00
Yan
ece29db279 Call btrfs_cow_block while lowering tree level.
When freeing root block of a tree,  btrfs_free_extent' parameter
'ref_generation' is from root block itseft.  When freeing non-root
block,  'ref_generation' is from its parent. so when converting a
non-root block to root block, we must guarantee its generation is
equal to its parent's generation.
2008-02-01 14:58:07 -05:00
Chris Mason
d2255c7c2f Insert extent record and the first backref in a single balance 2008-03-04 11:35:36 -05:00
Chris Mason
45391b1a98 Copy correct tree when inserting into slot 0 2008-01-30 11:43:54 -05:00
Chris Mason
aa69dec31c Add inode item and backref in one insert, reducing cpu usage 2008-01-29 15:15:18 -05:00
Chris Mason
cbf87cad07 During deletes and truncate, remove many items at once from the tree 2008-01-29 15:11:36 -05:00
Chris Mason
bb7055ec21 Add some extra debugging around file data checksum failures 2008-03-04 11:23:32 -05:00
Chris Mason
84696d75db Tune readahead during defrag to avoid reading too much at once 2008-01-24 16:13:14 -05:00
Chris Mason
80791984f6 Rename the extent_map code to extent_io
This mirrors the changes in the kernel code.
2008-03-04 11:16:54 -05:00
Chris Mason
79599947bf Add debug-tree -e to print all allocated extents, and show-blocks to graph them 2008-03-03 19:55:16 -05:00
Chris Mason
6dfdeac7ec Added tag v0.13 for changeset 58b803dc9fae 2008-02-21 14:55:23 -05:00
David Miller
355351fc1d CRC32C big endian bugs...
The CRC32C implementation in the btrfs progs is different from the one
in the kernel, so obviously nothing can possibly work on big-endian.
2008-02-15 11:20:02 -05:00
David Miller
8871a0eaa9 Unaligned access fixes
The first problem is that these SETGET macros lose typing information,
and therefore can't see the 'packed' attribute and therefore take
unaligned access SIGBUS signals on sparc64 when trying to derefernce
the member.

The next problem is a similar issue in btrfs_name_hash().  This gets
passed things like &key.offset which is a member of a packed
structure, losing this packed'ness information btrfs_name_hash()
performs a potentially unaligned memory access, again resulting in a
SIGBUS.
2008-02-15 11:19:58 -05:00
Chris Mason
0c6513b1d1 mkfs: Zero 2MB at the start and end of the device
But, on sparc, don't zero the first 1k.
2008-02-15 11:19:26 -05:00
Chris Mason
d284c1d890 Added tag v0.12 for changeset 5e8f040cdf7c 2008-02-06 11:37:45 -05:00
Chris Mason
f64e047c7c Update magic 2008-02-04 10:11:12 -05:00
Chris Mason
633ddb9a90 Hash in the owner and offset for file extent backref keys 2008-02-01 14:55:03 -05:00
Yan
6f30791b51 Fix for test_range_bit
test_range_bit doesn't properly handle the case: there's a hole at the
end of the range and there's no other extent_state after the range.
2008-01-22 11:34:13 -05:00
Kyle McMartin
d751af515b Fix btrfsck args checking
btrfsck fails to check if it actually received a dev argument though, so if you
don't pass a device, we get a nice segfault.
2008-01-22 11:32:09 -05:00
Jan Engelhardt
fd4bca3dfe btrfs-progs: build with -D_FORTIFY_SOURCE=2
Add -D_FORTIFY_SOURCE=2 to the makeflags. It has been very helpful
in finding problems.

Signed-off-by: Jan Engelhardt <jengelh@computergmbh.de>

---
 Makefile |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
2008-01-22 11:32:07 -05:00
Jan Engelhardt
4408248634 btrfs-progs: fix a buffer overflow during mkfs
Using strncpy avoids a 1 byte overflow into the next field
of the struct.  The overflow is harmless, but does
trip automated tools.

Signed-off-by: Jan Engelhardt <jengelh@computergmbh.de>

---
 utils.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
2008-01-22 11:32:06 -05:00
Yan
7c28445381 Fix for btrfs_find_free_objectid
btrfs_find_free_objectid may return a used objectid due to arithmetic
underflow. This bug may happen when parameter 'root' is tree root,  so
it may cause serious problems when creating snapshot or sub-volume.
2008-01-22 11:32:05 -05:00