linux-next: manual merge of the folio tree with the btrfs tree

Stephen Rothwell posted 1 patch 3 years, 12 months ago
linux-next: manual merge of the folio tree with the btrfs tree
Posted by Stephen Rothwell 3 years, 12 months ago
Hi all,

Today's linux-next merge of the folio tree got a conflict in:

  fs/btrfs/send.c

between commit:

  d1a1a97304b4 ("btrfs: send: keep the current inode open while processing it")

from the btrfs tree and commit:

  2ebdd1df3166 ("mm/readahead: Convert page_cache_async_readahead to take a folio")

from the folio tree.

I fixed it up (I think - see below) and can carry the fix as
necessary. This is now fixed as far as linux-next is concerned, but any
non trivial conflicts should be mentioned to your upstream maintainer
when your tree is submitted for merging.  You may also want to consider
cooperating with the maintainer of the conflicting tree to minimise any
particularly complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc fs/btrfs/send.c
index 8e8e4ab59930,8985d115559d..000000000000
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@@ -4905,13 -4984,14 +4905,14 @@@ static int put_file_data(struct send_ct
  			}
  		}
  
 -		if (PageReadahead(page)) {
 -			page_cache_async_readahead(inode->i_mapping, &sctx->ra,
 -						NULL, page_folio(page), index,
 -						last_index + 1 - index);
 -		}
 +		if (PageReadahead(page))
 +			page_cache_async_readahead(sctx->cur_inode->i_mapping,
- 						   &sctx->ra, NULL, page, index,
++						   &sctx->ra, NULL,
++						   page_folio(page), index,
 +						   last_index + 1 - index);
  
  		if (!PageUptodate(page)) {
- 			btrfs_readpage(NULL, page);
+ 			btrfs_read_folio(NULL, page_folio(page));
  			lock_page(page);
  			if (!PageUptodate(page)) {
  				unlock_page(page);
Re: linux-next: manual merge of the folio tree with the btrfs tree
Posted by Filipe Manana 3 years, 12 months ago

On 10/05/22 09:39, Stephen Rothwell wrote:
> Hi all,
> 
> Today's linux-next merge of the folio tree got a conflict in:
> 
>   fs/btrfs/send.c
> 
> between commit:
> 
>   d1a1a97304b4 ("btrfs: send: keep the current inode open while processing it")
> 
> from the btrfs tree and commit:
> 
>   2ebdd1df3166 ("mm/readahead: Convert page_cache_async_readahead to take a folio")
> 
> from the folio tree.
> 
> I fixed it up (I think - see below) and can carry the fix as

Looks correct to me.
Thanks.

> necessary. This is now fixed as far as linux-next is concerned, but any
> non trivial conflicts should be mentioned to your upstream maintainer
> when your tree is submitted for merging.  You may also want to consider
> cooperating with the maintainer of the conflicting tree to minimise any
> particularly complex conflicts.
>
Re: linux-next: manual merge of the folio tree with the btrfs tree
Posted by Matthew Wilcox 3 years, 12 months ago
On Tue, May 10, 2022 at 10:43:07AM +0100, Filipe Manana wrote:
> On 10/05/22 09:39, Stephen Rothwell wrote:
> > Hi all,
> > 
> > Today's linux-next merge of the folio tree got a conflict in:
> > 
> >   fs/btrfs/send.c
> > 
> > between commit:
> > 
> >   d1a1a97304b4 ("btrfs: send: keep the current inode open while processing it")
> > 
> > from the btrfs tree and commit:
> > 
> >   2ebdd1df3166 ("mm/readahead: Convert page_cache_async_readahead to take a folio")
> > 
> > from the folio tree.
> > 
> > I fixed it up (I think - see below) and can carry the fix as
> 
> Looks correct to me.

Me too.  The patch this one enables is rather sad.  It's yet another
reminder that we suck at streaming workloads.  But until we fix that,
don't you want to use invalidate_inode_pages2_range() rather than
truncate_inode_pages_range()?  If your send conflicts with someone
else's write(), you'll erase their write to the page cache.
Re: linux-next: manual merge of the folio tree with the btrfs tree
Posted by Filipe Manana 3 years, 12 months ago

On 10/05/22 16:04, Matthew Wilcox wrote:
> On Tue, May 10, 2022 at 10:43:07AM +0100, Filipe Manana wrote:
>> On 10/05/22 09:39, Stephen Rothwell wrote:
>>> Hi all,
>>>
>>> Today's linux-next merge of the folio tree got a conflict in:
>>>
>>>   fs/btrfs/send.c
>>>
>>> between commit:
>>>
>>>   d1a1a97304b4 ("btrfs: send: keep the current inode open while processing it")
>>>
>>> from the btrfs tree and commit:
>>>
>>>   2ebdd1df3166 ("mm/readahead: Convert page_cache_async_readahead to take a folio")
>>>
>>> from the folio tree.
>>>
>>> I fixed it up (I think - see below) and can carry the fix as
>>
>> Looks correct to me.
> 
> Me too.  The patch this one enables is rather sad.  It's yet another
> reminder that we suck at streaming workloads.  But until we fix that,
> don't you want to use invalidate_inode_pages2_range() rather than
> truncate_inode_pages_range()?  If your send conflicts with someone
> else's write(), you'll erase their write to the page cache.

Send operates only on readonly trees, so it can't happen.
Thanks.

>