Subject: Re: linux-next: build failure after merge of the final tree (ext4 tree related)

From: Tao Ma <[email-masked]>
Date: Tue, 04 Dec 2012 21:10:44 +0800

Hi Stephen,
	Thanks for the report.

	the corresponding fix is already sent to Ted in the patch named "ext4:
Fix inline data build warning found by kernel build testing.", but it
seems that Ted hasn't pushed it into ext4dev yet.

Thanks
Tao
On 12/04/2012 02:13 PM, Stephen Rothwell wrote:
> Hi all,
> 
> After merging the final tree, today's linux-next build (powerpc
> allyesconfig) failed like this:
> 
> fs/ocfs2/built-in.o: In function `.walk_page_buffers':
> (.text+0x2c104): multiple definition of `.walk_page_buffers'
> fs/ext4/built-in.o:(.text+0x10c1c): first defined here
> fs/ocfs2/built-in.o: In function `walk_page_buffers':
> (.opd+0x1020): multiple definition of `walk_page_buffers'
> fs/ext4/built-in.o:(.opd+0xa68): first defined here
> 
> Caused by commit c99dcc3889f5 ("ext4: add normal write support for inline
> data") from the ext4 tree.  Who would have thought that a generic name
> like that would clash? ;-(
> 
> Grep is your friend ...
> 
> I have added this patch for today (ocfs2 might like to apply something
> similar):
> 
> From: Stephen Rothwell <[email-masked]>
> Date: Tue, 4 Dec 2012 17:06:30 +1100
> Subject: [PATCH] ext4: use a less generic version of the name walk_page_buffers
> 
> Signed-off-by: Stephen Rothwell <[email-masked]>
> ---
>  fs/ext4/ext4.h   |    2 +-
>  fs/ext4/inline.c |    2 +-
>  fs/ext4/inode.c  |   20 ++++++++++----------
>  3 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 9e30958..b1a169a 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -2057,7 +2057,7 @@ int ext4_get_block(struct inode *inode, sector_t iblock,
>  				struct buffer_head *bh_result, int create);
>  int ext4_da_get_block_prep(struct inode *inode, sector_t iblock,
>  			   struct buffer_head *bh, int create);
> -int walk_page_buffers(handle_t *handle,
> +int ext4_walk_page_buffers(handle_t *handle,
>  			     struct buffer_head *head,
>  			     unsigned from,
>  			     unsigned to,
> diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
> index 811457e..1fe0cc4 100644
> --- a/fs/ext4/inline.c
> +++ b/fs/ext4/inline.c
> @@ -583,7 +583,7 @@ retry:
>  		ret = __block_write_begin(page, from, to, ext4_get_block);
>  
>  	if (!ret && ext4_should_journal_data(inode)) {
> -		ret = walk_page_buffers(handle, page_buffers(page),
> +		ret = ext4_walk_page_buffers(handle, page_buffers(page),
>  				from, to, NULL, do_journal_get_write_access);
>  	}
>  
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index f92bd69..1a190e0 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -770,7 +770,7 @@ struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode,
>  	return NULL;
>  }
>  
> -int walk_page_buffers(handle_t *handle,
> +int ext4_walk_page_buffers(handle_t *handle,
>  			     struct buffer_head *head,
>  			     unsigned from,
>  			     unsigned to,
> @@ -911,7 +911,7 @@ retry:
>  		ret = __block_write_begin(page, pos, len, ext4_get_block);
>  
>  	if (!ret && ext4_should_journal_data(inode)) {
> -		ret = walk_page_buffers(handle, page_buffers(page),
> +		ret = ext4_walk_page_buffers(handle, page_buffers(page),
>  				from, to, NULL, do_journal_get_write_access);
>  	}
>  
> @@ -1133,7 +1133,7 @@ static int ext4_journalled_write_end(struct file *file,
>  			page_zero_new_buffers(page, from+copied, to);
>  		}
>  
> -		ret = walk_page_buffers(handle, page_buffers(page), from,
> +		ret = ext4_walk_page_buffers(handle, page_buffers(page), from,
>  					to, &partial, write_end_fn);
>  		if (!partial)
>  			SetPageUptodate(page);
> @@ -1942,7 +1942,7 @@ static int __ext4_journalled_writepage(struct page *page,
>  	} else {
>  		page_bufs = page_buffers(page);
>  		BUG_ON(!page_bufs);
> -		walk_page_buffers(handle, page_bufs, 0, len, NULL, bget_one);
> +		ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL, bget_one);
>  	}
>  	/* As soon as we unlock the page, it can go away, but we have
>  	 * references to buffers so we are safe */
> @@ -1962,10 +1962,10 @@ static int __ext4_journalled_writepage(struct page *page,
>  		err = ext4_handle_dirty_metadata(handle, inode, inode_bh);
>  
>  	} else {
> -		ret = walk_page_buffers(handle, page_bufs, 0, len, NULL,
> +		ret = ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL,
>  					do_journal_get_write_access);
>  
> -		err = walk_page_buffers(handle, page_bufs, 0, len, NULL,
> +		err = ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL,
>  					write_end_fn);
>  	}
>  
> @@ -1977,7 +1977,7 @@ static int __ext4_journalled_writepage(struct page *page,
>  		ret = err;
>  
>  	if (!ext4_has_inline_data(inode))
> -		walk_page_buffers(handle, page_bufs, 0, len, NULL, bput_one);
> +		ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL, bput_one);
>  	ext4_set_inode_state(inode, EXT4_STATE_JDATA);
>  out:
>  	brelse(inode_bh);
> @@ -2057,7 +2057,7 @@ static int ext4_writepage(struct page *page,
>  		commit_write = 1;
>  	}
>  	page_bufs = page_buffers(page);
> -	if (walk_page_buffers(NULL, page_bufs, 0, len, NULL,
> +	if (ext4_walk_page_buffers(NULL, page_bufs, 0, len, NULL,
>  			      ext4_bh_delay_or_unwritten)) {
>  		/*
>  		 * We don't want to do block allocation, so redirty
> @@ -4888,7 +4888,7 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
>  	 * journal_start/journal_stop which can block and take a long time
>  	 */
>  	if (page_has_buffers(page)) {
> -		if (!walk_page_buffers(NULL, page_buffers(page), 0, len, NULL,
> +		if (!ext4_walk_page_buffers(NULL, page_buffers(page), 0, len, NULL,
>  					ext4_bh_unmapped)) {
>  			/* Wait so that we don't change page under IO */
>  			wait_on_page_writeback(page);
> @@ -4910,7 +4910,7 @@ retry_alloc:
>  	}
>  	ret = __block_page_mkwrite(vma, vmf, get_block);
>  	if (!ret && ext4_should_journal_data(inode)) {
> -		if (walk_page_buffers(handle, page_buffers(page), 0,
> +		if (ext4_walk_page_buffers(handle, page_buffers(page), 0,
>  			  PAGE_CACHE_SIZE, NULL, do_journal_get_write_access)) {
>  			unlock_page(page);
>  			ret = VM_FAULT_SIGBUS;
>