[Cluster-devel] [gfs2:page_mkwrite-off-by-one 4/7] fs/ext4/inode.c:5939: undefined reference to `page_mkwrite_check_truncate'

kbuild test robot lkp at intel.com
Sat Feb 15 00:53:40 UTC 2020


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git page_mkwrite-off-by-one
head:   63e24dff38ac137273e65ebc7929bcaa4bdcd6fe
commit: 7bac4387870c94f9108bbefbf8a26b3bef455524 [4/7] ext4: Switch to page_mkwrite_check_truncate in ext4_page_mkwrite
config: microblaze-randconfig-a001-20200215 (attached as .config)
compiler: microblaze-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 7bac4387870c94f9108bbefbf8a26b3bef455524
        # save the attached .config to linux build tree
        GCC_VERSION=7.5.0 make.cross ARCH=microblaze 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

   fs/buffer.o: In function `block_page_mkwrite':
   fs/buffer.c:2505: undefined reference to `page_mkwrite_check_truncate'
   fs/iomap/buffered-io.o: In function `iomap_page_mkwrite':
   fs/iomap/buffered-io.c:1084: undefined reference to `page_mkwrite_check_truncate'
   fs/ext4/inode.o: In function `ext4_page_mkwrite':
>> fs/ext4/inode.c:5939: undefined reference to `page_mkwrite_check_truncate'
   drivers/md/bcache/bset.o: In function `bch_btree_iter_next':
   drivers/md/bcache/bset.c:1155: undefined reference to `_GLOBAL_OFFSET_TABLE_'
   Segmentation fault

vim +5939 fs/ext4/inode.c

  5900	
  5901	vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)
  5902	{
  5903		struct vm_area_struct *vma = vmf->vma;
  5904		struct page *page = vmf->page;
  5905		unsigned long len;
  5906		int err;
  5907		vm_fault_t ret;
  5908		struct file *file = vma->vm_file;
  5909		struct inode *inode = file_inode(file);
  5910		handle_t *handle;
  5911		get_block_t *get_block;
  5912		int retries = 0;
  5913	
  5914		if (unlikely(IS_IMMUTABLE(inode)))
  5915			return VM_FAULT_SIGBUS;
  5916	
  5917		sb_start_pagefault(inode->i_sb);
  5918		file_update_time(vma->vm_file);
  5919	
  5920		down_read(&EXT4_I(inode)->i_mmap_sem);
  5921	
  5922		err = ext4_convert_inline_data(inode);
  5923		if (err)
  5924			goto out_ret;
  5925	
  5926		/* Delalloc case is easy... */
  5927		if (test_opt(inode->i_sb, DELALLOC) &&
  5928		    !ext4_should_journal_data(inode) &&
  5929		    !ext4_nonda_switch(inode->i_sb)) {
  5930			do {
  5931				err = block_page_mkwrite(vma, vmf,
  5932							   ext4_da_get_block_prep);
  5933			} while (err == -ENOSPC &&
  5934			       ext4_should_retry_alloc(inode->i_sb, &retries));
  5935			goto out_ret;
  5936		}
  5937	
  5938		lock_page(page);
> 5939		err = page_mkwrite_check_truncate(page, inode);
  5940		if (err < 0) {
  5941			unlock_page(page);
  5942			goto out_ret;
  5943		}
  5944		len = err;
  5945	
  5946		/*
  5947		 * Return if we have all the buffers mapped. This avoids the need to do
  5948		 * journal_start/journal_stop which can block and take a long time
  5949		 */
  5950		if (page_has_buffers(page)) {
  5951			if (!ext4_walk_page_buffers(NULL, page_buffers(page),
  5952						    0, len, NULL,
  5953						    ext4_bh_unmapped)) {
  5954				/* Wait so that we don't change page under IO */
  5955				wait_for_stable_page(page);
  5956				ret = VM_FAULT_LOCKED;
  5957				goto out;
  5958			}
  5959		}
  5960		unlock_page(page);
  5961		/* OK, we need to fill the hole... */
  5962		if (ext4_should_dioread_nolock(inode))
  5963			get_block = ext4_get_block_unwritten;
  5964		else
  5965			get_block = ext4_get_block;
  5966	retry_alloc:
  5967		handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
  5968					    ext4_writepage_trans_blocks(inode));
  5969		if (IS_ERR(handle)) {
  5970			ret = VM_FAULT_SIGBUS;
  5971			goto out;
  5972		}
  5973		err = block_page_mkwrite(vma, vmf, get_block);
  5974		if (!err && ext4_should_journal_data(inode)) {
  5975			if (ext4_walk_page_buffers(handle, page_buffers(page), 0,
  5976				  PAGE_SIZE, NULL, do_journal_get_write_access)) {
  5977				unlock_page(page);
  5978				ret = VM_FAULT_SIGBUS;
  5979				ext4_journal_stop(handle);
  5980				goto out;
  5981			}
  5982			ext4_set_inode_state(inode, EXT4_STATE_JDATA);
  5983		}
  5984		ext4_journal_stop(handle);
  5985		if (err == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
  5986			goto retry_alloc;
  5987	out_ret:
  5988		ret = block_page_mkwrite_return(err);
  5989	out:
  5990		up_read(&EXT4_I(inode)->i_mmap_sem);
  5991		sb_end_pagefault(inode->i_sb);
  5992		return ret;
  5993	}
  5994	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29868 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20200215/a582f85e/attachment.gz>


More information about the Cluster-devel mailing list