Where should I grab the source from? The main repo that you have
listed on your main wiki page
(https://btrfs.wiki.kernel.org/articles/b/t/r/Btrfs_source_repositories.html)
is down: 
git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git

Has this patch been pushed to a repository where I can grab it?

On Tue, Feb 28, 2012 at 8:50 PM, Chris Mason <chris.ma...@oracle.com> wrote:
> On Tue, Feb 28, 2012 at 05:41:45PM -0800, Gurudas Pai wrote:
>>
>>
>> ># btrfs-debug-tree /dev/sdh
>> couldn't open because of unsupported option features (8).
>> btrfs-debug-tree: disk-io.c:679: open_ctree_fd: Assertion `!(1)' failed
>>
>>
>>
>>
>> See if following patch helps.
>
> This patch may just fix things (if we're really lucky).  If not, yes we
> can help figure out where the problem is and get past it.
>
> -chris
>
>>
>> Author: Chris Mason<chris.ma...@oracle.com>
>> Date:   Wed Feb 22 12:36:24 2012 -0500
>>
>>     Btrfs: clear the extent uptodate bits during parent transid failures
>>
>>     If btrfs reads a block and finds a parent transid mismatch, it clears
>>     the uptodate flags on the extent buffer, and the pages inside it.  But
>>     we only clear the uptodate bits in the state tree if the block straddles
>>     more than one page.
>>
>>     This is from an old optimization from to reduce contention on the extent
>>     state tree.  But it is buggy because the code that retries a read from
>>     a different copy of the block is going to find the uptodate state bits
>>     set and skip the IO.
>>
>>     The end result of the bug is that we'll never actually read the good
>>     copy (if there is one).
>>
>>     The fix here is to always clear the uptodate state bits, which is safe
>>     because this code is only called when the parent transid fails.
>>
>>     Signed-off-by: Chris Mason<chris.ma...@oracle.com>
>>
>> diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
>> index 1e8d5e5..a4dc892 100644
>> --- a/fs/btrfs/extent_io.c
>> +++ b/fs/btrfs/extent_io.c
>> @@ -3852,10 +3852,9 @@ int clear_extent_buffer_uptodate(struct 
>> extent_io_tree *tree,
>>       num_pages = num_extent_pages(eb->start, eb->len);
>>       clear_bit(EXTENT_BUFFER_UPTODATE,&eb->bflags);
>>
>> -     if (eb_straddles_pages(eb)) {
>> -             clear_extent_uptodate(tree, eb->start, eb->start + eb->len - 1,
>> -                                   cached_state, GFP_NOFS);
>> -     }
>> +     clear_extent_uptodate(tree, eb->start, eb->start + eb->len - 1,
>> +                           cached_state, GFP_NOFS);
>> +
>>       for (i = 0; i<  num_pages; i++) {
>>               page = extent_buffer_page(eb, i);
>>               if (page)
>> --
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>> the body of a message to majord...@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to