<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/btrfs/ctree.c, branch linux-3.2.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.2.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.2.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2011-11-15T14:53:28Z</updated>
<entry>
<title>Btrfs: fix tree corruption after multi-thread snapshots and inode_cache flush</title>
<updated>2011-11-15T14:53:28Z</updated>
<author>
<name>Liu Bo</name>
</author>
<published>2011-11-15T01:48:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f1ebcc74d5b2159f44c96b479b6eb8afc7829095'/>
<id>urn:sha1:f1ebcc74d5b2159f44c96b479b6eb8afc7829095</id>
<content type='text'>
The btrfs snapshotting code requires that once a root has been
snapshotted, we don't change it during a commit.

But there are two cases to lead to tree corruptions:

1) multi-thread snapshots can commit serveral snapshots in a transaction,
   and this may change the src root when processing the following pending
   snapshots, which lead to the former snapshots corruptions;

2) the free inode cache was changing the roots when it root the cache,
   which lead to corruptions.

This fixes things by making sure we force COW the block after we create a
snapshot during commiting a transaction, then any changes to the roots
will result in COW, and we get all the fs roots and snapshot roots to be
consistent.

Signed-off-by: Liu Bo &lt;liubo2009@cn.fujitsu.com&gt;
Signed-off-by: Miao Xie &lt;miaox@cn.fujitsu.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: fix array bound checking</title>
<updated>2011-10-20T16:10:41Z</updated>
<author>
<name>Li Zefan</name>
</author>
<published>2011-09-06T08:55:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a05a9bb18ae0abec0b513b5fde876c47905fa13e'/>
<id>urn:sha1:a05a9bb18ae0abec0b513b5fde876c47905fa13e</id>
<content type='text'>
Otherwise we can execced the array bound of path-&gt;slots[].

Signed-off-by: Li Zefan &lt;lizf@cn.fujitsu.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: remove lockdep magic from btrfs_next_leaf</title>
<updated>2011-07-27T16:46:47Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2011-07-26T20:01:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=31533fb263928c93a34cda41b66a6e83ade5c766'/>
<id>urn:sha1:31533fb263928c93a34cda41b66a6e83ade5c766</id>
<content type='text'>
Before the reader/writer locks, btrfs_next_leaf needed to keep
the path blocking to avoid making lockdep upset.

Now that btrfs_next_leaf only takes read locks, this isn't required.

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: switch the btrfs tree locks to reader/writer</title>
<updated>2011-07-27T16:46:46Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2011-07-16T19:23:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bd681513fa6f2ff29aa391f01e413a2d1c59fd77'/>
<id>urn:sha1:bd681513fa6f2ff29aa391f01e413a2d1c59fd77</id>
<content type='text'>
The btrfs metadata btree is the source of significant
lock contention, especially in the root node.   This
commit changes our locking to use a reader/writer
lock.

The lock is built on top of rw spinlocks, and it
extends the lock tracking to remember if we have a
read lock or a write lock when we go to blocking.  Atomics
count the number of blocking readers or writers at any
given time.

It removes all of the adaptive spinning from the old code
and uses only the spinning/blocking hints inside of btrfs
to decide when it should continue spinning.

In read heavy workloads this is dramatically faster.  In write
heavy workloads we're still faster because of less contention
on the root node lock.

We suffer slightly in dbench because we schedule more often
during write locks, but all other benchmarks so far are improved.

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: stop using highmem for extent_buffers</title>
<updated>2011-07-27T16:46:45Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2011-07-19T16:04:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a65917156e345946dbde3d7effd28124c6d6a8c2'/>
<id>urn:sha1:a65917156e345946dbde3d7effd28124c6d6a8c2</id>
<content type='text'>
The extent_buffers have a very complex interface where
we use HIGHMEM for metadata and try to cache a kmap mapping
to access the memory.

The next commit adds reader/writer locks, and concurrent use
of this kmap cache would make it even more complex.

This commit drops the ability to use HIGHMEM with extent buffers,
and rips out all of the related code.

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: don't map extent buffer if path-&gt;skip_locking is set</title>
<updated>2011-06-09T14:12:07Z</updated>
<author>
<name>Josef Bacik</name>
</author>
<published>2011-06-08T18:36:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=25b8b936ed44814a5ce6fc3b2a21401f33cd56f6'/>
<id>urn:sha1:25b8b936ed44814a5ce6fc3b2a21401f33cd56f6</id>
<content type='text'>
Arne's scrub stuff exposed a problem with mapping the extent buffer in
reada_for_search.  He searches the commit root with multiple threads and with
skip_locking set, so we can race and overwrite node-&gt;map_token since node isn't
locked.  So fix this so that we only map the extent buffer if we don't already
have a map_token and skip_locking isn't set.  Without this patch scrub would
panic almost immediately, with the patch it doesn't panic anymore.  Thanks,

Reported-by: Arne Jansen &lt;sensille@gmx.net&gt;
Signed-off-by: Josef Bacik &lt;josef@redhat.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-chris' of</title>
<updated>2011-05-28T11:00:39Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2011-05-28T11:00:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ff5714cca971848963b87d6b477c16ca8abbaa54'/>
<id>urn:sha1:ff5714cca971848963b87d6b477c16ca8abbaa54</id>
<content type='text'>
git://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-work into for-linus

Conflicts:
	fs/btrfs/disk-io.c
	fs/btrfs/extent-tree.c
	fs/btrfs/free-space-cache.c
	fs/btrfs/inode.c
	fs/btrfs/transaction.c

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'cleanups_and_fixes' into inode_numbers</title>
<updated>2011-05-23T18:37:47Z</updated>
<author>
<name>Chris Mason</name>
</author>
<published>2011-05-23T18:37:47Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d6c0cb379c5198487e4ac124728cbb2346d63b1f'/>
<id>urn:sha1:d6c0cb379c5198487e4ac124728cbb2346d63b1f</id>
<content type='text'>
Conflicts:
	fs/btrfs/tree-log.c
	fs/btrfs/volumes.c

Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: BUG_ON is deleted from the caller of btrfs_truncate_item &amp; btrfs_extend_item</title>
<updated>2011-05-23T17:24:39Z</updated>
<author>
<name>Tsutomu Itoh</name>
</author>
<published>2011-05-19T05:19:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1cd307990d6e2b4965620e339a92e0d7ae853e13'/>
<id>urn:sha1:1cd307990d6e2b4965620e339a92e0d7ae853e13</id>
<content type='text'>
Currently, btrfs_truncate_item and btrfs_extend_item returns only 0.
So, the check by BUG_ON in the caller is unnecessary.

Signed-off-by: Tsutomu Itoh &lt;t-itoh@jp.fujitsu.com&gt;
Signed-off-by: Chris Mason &lt;chris.mason@oracle.com&gt;
</content>
</entry>
<entry>
<title>Btrfs: don't always do readahead</title>
<updated>2011-05-23T17:03:14Z</updated>
<author>
<name>Josef Bacik</name>
</author>
<published>2011-05-13T14:32:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=026fd317828500524cdc7e5ff9e8e7923abb2868'/>
<id>urn:sha1:026fd317828500524cdc7e5ff9e8e7923abb2868</id>
<content type='text'>
Our readahead is sort of sloppy, and really isn't always needed.  For example if
ls is doing a stating ls (which is the default) it's going to stat in non-disk
order, so if say you have a directory with a stupid amount of files, readahead
is going to do nothing but waste time in the case of doing the stat.  Taking the
unconditional readahead out made my test go from 57 minutes to 36 minutes.  This
means that everywhere we do loop through the tree we want to make sure we do set
path-&gt;reada properly, so I went through and found all of the places where we
loop through the path and set reada to 1.  Thanks,

Signed-off-by: Josef Bacik &lt;josef@redhat.com&gt;
</content>
</entry>
</feed>
