tree:
https://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git
xfs-async-inode-reclaim
head: a6b06a056446a604d909fd24f24c78f08f5be671
commit: 689797bdef2cbd9e93b6d435127da6f513d9d3cb [29/30] xfs: factor xfs_iflush_done
config: m68k-randconfig-r005-20200526 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 689797bdef2cbd9e93b6d435127da6f513d9d3cb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
> fs/xfs/xfs_inode_item.c:670:1: warning: no previous prototype for
'xfs_iflush_ail_updates' [-Wmissing-prototypes]
670 |
xfs_iflush_ail_updates(
| ^~~~~~~~~~~~~~~~~~~~~~
> fs/xfs/xfs_inode_item.c:702:1: warning: no previous prototype for
'xfs_iflush_finish' [-Wmissing-prototypes]
702 | xfs_iflush_finish(
| ^~~~~~~~~~~~~~~~~
vim +/xfs_iflush_ail_updates +670 fs/xfs/xfs_inode_item.c
662
663
664 /*
665 * We only want to pull the item from the AIL if it is actually there
666 * and its location in the log has not changed since we started the
667 * flush. Thus, we only bother if the inode's lsn has not changed.
668 */
669 void
670 xfs_iflush_ail_updates(
671 struct xfs_ail *ailp,
672 struct list_head *list)
673 {
674 struct xfs_log_item *lip;
675 xfs_lsn_t tail_lsn = 0;
676
677 /* this is an opencoded batch version of xfs_trans_ail_delete */
678 spin_lock(&ailp->ail_lock);
679 list_for_each_entry(lip, list, li_bio_list) {
680 struct xfs_inode_log_item *iip = INODE_ITEM(lip);
681 xfs_lsn_t lsn;
682
683 if (iip->ili_flush_lsn != lip->li_lsn) {
684 xfs_clear_li_failed(lip);
685 continue;
686 }
687
688 lsn = xfs_ail_delete_one(ailp, lip);
689 if (!tail_lsn && lsn)
690 tail_lsn = lsn;
691 }
692 xfs_ail_update_finish(ailp, tail_lsn);
693 }
694
695 /*
696 * Walk the list of inodes that have completed their IOs. If they are clean
697 * remove them from the list and dissociate them from the buffer. Buffers that
698 * are still dirty remain linked to the buffer and on the list. Caller must
699 * handle them appropriately.
700 */
701 void
702 xfs_iflush_finish(
703 struct xfs_buf *bp,
704 struct list_head *list)
705 {
706 struct xfs_log_item *lip, *n;
707
708 list_for_each_entry_safe(lip, n, list, li_bio_list) {
709 struct xfs_inode_log_item *iip = INODE_ITEM(lip);
710 bool drop_buffer = false;
711
712 spin_lock(&iip->ili_lock);
713 iip->ili_last_fields = 0;
714 iip->ili_flush_lsn = 0;
715
716 /*
717 * Remove the reference to the cluster buffer if the inode is
718 * clean in memory and drop the buffer reference once we've
719 * dropped the locks we hold.
720 */
721 ASSERT(iip->ili_item.li_buf == bp);
722 if (!iip->ili_fields) {
723 iip->ili_item.li_buf = NULL;
724 list_del_init(&lip->li_bio_list);
725 drop_buffer = true;
726 }
727 spin_unlock(&iip->ili_lock);
728 xfs_ifunlock(iip->ili_inode);
729 if (drop_buffer)
730 xfs_buf_rele(bp);
731 }
732 }
733
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org