<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/btrfs/Makefile, branch linux-3.12.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.12.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.12.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2013-09-01T12:15:52Z</updated>
<entry>
<title>Btrfs: introduce a tree for items that map UUIDs to something</title>
<updated>2013-09-01T12:15:52Z</updated>
<author>
<name>Stefan Behrens</name>
</author>
<published>2013-08-15T15:11:17Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=07b30a49dac4f60a6c4b0b3938bd6f45affb9455'/>
<id>urn:sha1:07b30a49dac4f60a6c4b0b3938bd6f45affb9455</id>
<content type='text'>
Mapping UUIDs to subvolume IDs is an operation with a high effort
today. Today, the algorithm even has quadratic effort (based on the
number of existing subvolumes), which means, that it takes minutes
to send/receive a single subvolume if 10,000 subvolumes exist. But
even linear effort would be too much since it is a waste. And these
data structures to allow mapping UUIDs to subvolume IDs are created
every time a btrfs send/receive instance is started.

It is much more efficient to maintain a searchable persistent data
structure in the filesystem, one that is updated whenever a
subvolume/snapshot is created and deleted, and when the received
subvolume UUID is set by the btrfs-receive tool.

Therefore kernel code is added with this commit that is able to
maintain data structures in the filesystem that allow to quickly
search for a given UUID and to retrieve data that is assigned to
this UUID, like which subvolume ID is related to this UUID.

This commit adds a new tree to hold UUID-to-data mapping items. The
key of the items is the full UUID plus the key type BTRFS_UUID_KEY.
Multiple data blocks can be stored for a given UUID, a type/length/
value scheme is used.

Now follows the lengthy justification, why a new tree was added
instead of using the existing root tree:

The first approach was to not create another tree that holds UUID
items. Instead, the items should just go into the top root tree.
Unfortunately this confused the algorithm to assign the objectid
of subvolumes and snapshots. The reason is that
btrfs_find_free_objectid() calls btrfs_find_highest_objectid() for
the first created subvol or snapshot after mounting a filesystem,
and this function simply searches for the largest used objectid in
the root tree keys to pick the next objectid to assign. Of course,
the UUID keys have always been the ones with the highest offset
value, and the next assigned subvol ID was wastefully huge.

To use any other existing tree did not look proper. To apply a
workaround such as setting the objectid to zero in the UUID item
key and to implement collision handling would either add
limitations (in case of a btrfs_extend_item() approach to handle
the collisions) or a lot of complexity and source code (in case a
key would be looked up that is free of collisions). Adding new code
that introduces limitations is not good, and adding code that is
complex and lengthy for no good reason is also not good. That's the
justification why a completely new tree was introduced.

Signed-off-by: Stefan Behrens &lt;sbehrens@giantdisaster.de&gt;
Signed-off-by: Josef Bacik &lt;jbacik@fusionio.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: separate out tests into their own directory</title>
<updated>2013-09-01T12:15:38Z</updated>
<author>
<name>Josef Bacik</name>
</author>
<published>2013-08-14T19:05:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dc11dd5d707a4157882f281c96055d6894d10c8c'/>
<id>urn:sha1:dc11dd5d707a4157882f281c96055d6894d10c8c</id>
<content type='text'>
The plan is to have a bunch of unit tests that run when btrfs is loaded when you
build with the appropriate config option.  My ultimate goal is to have a test
for every non-static function we have, but at first I'm going to focus on the
things that cause us the most problems.  To start out with this just adds a
tests/ directory and moves the existing free space cache tests into that
directory and sets up all of the infrastructure.  Thanks,

Signed-off-by: Josef Bacik &lt;jbacik@fusionio.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: RAID5 and RAID6</title>
<updated>2013-02-01T19:24:23Z</updated>
<author>
<name>David Woodhouse</name>
</author>
<published>2013-01-29T23:40:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=53b381b3abeb86f12787a6c40fee9b2f71edc23b'/>
<id>urn:sha1:53b381b3abeb86f12787a6c40fee9b2f71edc23b</id>
<content type='text'>
This builds on David Woodhouse's original Btrfs raid5/6 implementation.
The code has changed quite a bit, blame Chris Mason for any bugs.

Read/modify/write is done after the higher levels of the filesystem have
prepared a given bio.  This means the higher layers are not responsible
for building full stripes, and they don't need to query for the topology
of the extents that may get allocated during delayed allocation runs.
It also means different files can easily share the same stripe.

But, it does expose us to incorrect parity if we crash or lose power
while doing a read/modify/write cycle.  This will be addressed in a
later commit.

Scrub is unable to repair crc errors on raid5/6 chunks.

Discard does not work on raid5/6 (yet)

The stripe size is fixed at 64KiB per disk.  This will be tunable
in a later commit.

Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: add new sources for device replace code</title>
<updated>2012-12-12T22:15:41Z</updated>
<author>
<name>Stefan Behrens</name>
</author>
<published>2012-11-05T16:33:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e93c89c1aaaaaec3487c4c18dd02360371790722'/>
<id>urn:sha1:e93c89c1aaaaaec3487c4c18dd02360371790722</id>
<content type='text'>
This adds a new file to the sources together with the header file
and the changes to ioctl.h and ctree.h that are required by the
new C source file. Additionally, 4 new functions are added to
volume.c that deal with device creation and destruction.

Signed-off-by: Stefan Behrens &lt;sbehrens@giantdisaster.de&gt;
Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'send-v2' of git://github.com/ablock84/linux-btrfs into for-linus</title>
<updated>2012-07-25T23:19:10Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2012-07-25T23:17:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=113c1cb530e10bcada93d88ffaa6b521aae2d251'/>
<id>urn:sha1:113c1cb530e10bcada93d88ffaa6b521aae2d251</id>
<content type='text'>
This is the kernel portion of btrfs send/receive

Conflicts:
	fs/btrfs/Makefile
	fs/btrfs/backref.h
	fs/btrfs/ctree.c
	fs/btrfs/ioctl.c
	fs/btrfs/ioctl.h

Signed-off-by: Chris Mason &lt;chris.mason@fusionio.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: introduce BTRFS_IOC_SEND for btrfs send/receive</title>
<updated>2012-07-25T21:30:19Z</updated>
<author>
<name>Alexander Block</name>
</author>
<published>2012-07-25T21:19:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=31db9f7c23fbf7e95026143f79645de6507b583b'/>
<id>urn:sha1:31db9f7c23fbf7e95026143f79645de6507b583b</id>
<content type='text'>
This patch introduces the BTRFS_IOC_SEND ioctl that is
required for send. It allows btrfs-progs to implement
full and incremental sends. Patches for btrfs-progs will
follow.

Signed-off-by: Alexander Block &lt;ablock84@googlemail.com&gt;
Reviewed-by: David Sterba &lt;dave@jikos.cz&gt;
Reviewed-by: Arne Jansen &lt;sensille@gmx.net&gt;
Reviewed-by: Jan Schmidt &lt;list.btrfs@jan-o-sch.net&gt;
Reviewed-by: Alex Lyakas &lt;alex.bolshoy.btrfs@gmail.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: qgroup implementation and prototypes</title>
<updated>2012-07-12T08:54:21Z</updated>
<author>
<name>Arne Jansen</name>
</author>
<published>2012-06-28T16:03:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bed92eae26ccf280d1a2168b7509447b56675a27'/>
<id>urn:sha1:bed92eae26ccf280d1a2168b7509447b56675a27</id>
<content type='text'>
Signed-off-by: Arne Jansen &lt;sensille@gmx.net&gt;
Signed-off-by: Jan Schmidt &lt;list.btrfs@jan-o-sch.net&gt;
</content>
</entry>
<entry>
<title>Merge branch 'integrity-check-patch-v2' of git://btrfs.giantdisaster.de/git/btrfs into integration</title>
<updated>2012-01-16T20:27:58Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2012-01-16T20:27:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c126dea771be1b3c370c0ffc4a09e6a82d492a49'/>
<id>urn:sha1:c126dea771be1b3c370c0ffc4a09e6a82d492a49</id>
<content type='text'>
Conflicts:
	fs/btrfs/ctree.h
	fs/btrfs/super.c

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: generic data structure to build unique lists</title>
<updated>2011-12-22T15:22:24Z</updated>
<author>
<name>Arne Jansen</name>
</author>
<published>2011-09-13T10:29:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=da5c81356426c476112f2b59fe64bdb1b37f079d'/>
<id>urn:sha1:da5c81356426c476112f2b59fe64bdb1b37f079d</id>
<content type='text'>
ulist is a generic data structures to hold a collection of unique u64
values. The only operations it supports is adding to the list and
enumerating it.

It is possible to store an auxiliary value along with the key. The
implementation is preliminary and can probably be sped up significantly.

It is used by btrfs_find_all_roots() quota to translate recursions into
iterative loops.

Signed-off-by: Arne Jansen &lt;sensille@gmx.net&gt;
Signed-off-by: Jan Schmidt &lt;list.btrfs@jan-o-sch.net&gt;
</content>
</entry>
<entry>
<title>Btrfs: Makefile changes to optionally include btrfs integrity check</title>
<updated>2011-12-21T18:14:16Z</updated>
<author>
<name>Stefan Behrens</name>
</author>
<published>2011-11-01T16:06:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f11e4d7f533249ddfa110116200c5c3a509f9218'/>
<id>urn:sha1:f11e4d7f533249ddfa110116200c5c3a509f9218</id>
<content type='text'>
If the btrfs integrity check is enabled, the files required to
implement the checks are included in the build.

Signed-off-by: Stefan Behrens &lt;sbehrens@giantdisaster.de&gt;
</content>
</entry>
</feed>
