tree: https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git feature/dax head: fe9932d5af4ceade2736e4a3a8c245e05331c392 commit: 3439077550d3f6366feeb4f09da20162e3a4c86c [3/9] f2fs: support migrate page in dax device config: riscv-randconfig-r015-20210808 (attached as .config) compiler: riscv64-linux-gcc (GCC) 10.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 # https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git/commit/?id=3439077550d3f6366feeb4f09da20162e3a4c86c git remote add chao-linux https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git git fetch --no-tags chao-linux feature/dax git checkout 3439077550d3f6366feeb4f09da20162e3a4c86c # save the attached .config to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross O=build_dir ARCH=riscv SHELL=/bin/bash fs/f2fs/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): fs/f2fs/gc.c: In function 'gc_data_segment': >> fs/f2fs/gc.c:1629:9: error: void value not ignored as it ought to be 1629 | err = dax_move_data_page(inode, start_bidx, | ^ vim +1629 fs/f2fs/gc.c 1491 1492 /* 1493 * This function tries to get parent node of victim data block, and identifies 1494 * data block validity. If the block is valid, copy that with cold status and 1495 * modify parent node. 1496 * If the parent node is not valid or the data block address is different, 1497 * the victim data block is ignored. 1498 */ 1499 static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, 1500 struct gc_inode_list *gc_list, unsigned int segno, int gc_type, 1501 bool force_migrate) 1502 { 1503 struct super_block *sb = sbi->sb; 1504 struct f2fs_summary *entry; 1505 block_t start_addr; 1506 int off; 1507 int phase = 0; 1508 int submitted = 0; 1509 unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno); 1510 1511 start_addr = START_BLOCK(sbi, segno); 1512 1513 next_step: 1514 entry = sum; 1515 1516 for (off = 0; off < usable_blks_in_seg; off++, entry++) { 1517 struct page *data_page; 1518 struct inode *inode; 1519 struct node_info dni; /* dnode info for the data */ 1520 unsigned int ofs_in_node, nofs; 1521 block_t start_bidx; 1522 nid_t nid = le32_to_cpu(entry->nid); 1523 1524 /* 1525 * stop BG_GC if there is not enough free sections. 1526 * Or, stop GC if the segment becomes fully valid caused by 1527 * race condition along with SSR block allocation. 1528 */ 1529 if ((gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) || 1530 (!force_migrate && get_valid_blocks(sbi, segno, true) == 1531 BLKS_PER_SEC(sbi))) 1532 return submitted; 1533 1534 if (check_valid_map(sbi, segno, off) == 0) 1535 continue; 1536 1537 if (phase == 0) { 1538 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), 1, 1539 META_NAT, true); 1540 continue; 1541 } 1542 1543 if (phase == 1) { 1544 f2fs_ra_node_page(sbi, nid); 1545 continue; 1546 } 1547 1548 /* Get an inode by ino with checking validity */ 1549 if (!is_alive(sbi, entry, &dni, start_addr + off, &nofs)) 1550 continue; 1551 1552 if (phase == 2) { 1553 f2fs_ra_node_page(sbi, dni.ino); 1554 continue; 1555 } 1556 1557 ofs_in_node = le16_to_cpu(entry->ofs_in_node); 1558 1559 if (phase == 3) { 1560 inode = f2fs_iget(sb, dni.ino); 1561 if (IS_ERR(inode) || is_bad_inode(inode)) 1562 continue; 1563 1564 if (IS_DAX(inode)) { 1565 add_gc_inode(gc_list, inode); 1566 continue; 1567 } 1568 1569 if (!down_write_trylock( 1570 &F2FS_I(inode)->i_gc_rwsem[WRITE])) { 1571 iput(inode); 1572 sbi->skipped_gc_rwsem++; 1573 continue; 1574 } 1575 1576 start_bidx = f2fs_start_bidx_of_node(nofs, inode) + 1577 ofs_in_node; 1578 1579 if (f2fs_post_read_required(inode)) { 1580 int err = ra_data_block(inode, start_bidx); 1581 1582 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); 1583 if (err) { 1584 iput(inode); 1585 continue; 1586 } 1587 add_gc_inode(gc_list, inode); 1588 continue; 1589 } 1590 1591 data_page = f2fs_get_read_data_page(inode, 1592 start_bidx, REQ_RAHEAD, true); 1593 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); 1594 if (IS_ERR(data_page)) { 1595 iput(inode); 1596 continue; 1597 } 1598 1599 f2fs_put_page(data_page, 0); 1600 add_gc_inode(gc_list, inode); 1601 continue; 1602 } 1603 1604 /* phase 4 */ 1605 inode = find_gc_inode(gc_list, dni.ino); 1606 if (inode) { 1607 struct f2fs_inode_info *fi = F2FS_I(inode); 1608 bool locked = false; 1609 int err; 1610 1611 if (S_ISREG(inode->i_mode)) { 1612 if (!down_write_trylock(&fi->i_gc_rwsem[READ])) 1613 continue; 1614 if (!down_write_trylock( 1615 &fi->i_gc_rwsem[WRITE])) { 1616 sbi->skipped_gc_rwsem++; 1617 up_write(&fi->i_gc_rwsem[READ]); 1618 continue; 1619 } 1620 locked = true; 1621 1622 /* wait for all inflight aio data */ 1623 inode_dio_wait(inode); 1624 } 1625 1626 start_bidx = f2fs_start_bidx_of_node(nofs, inode) 1627 + ofs_in_node; 1628 if (IS_DAX(inode)) > 1629 err = dax_move_data_page(inode, start_bidx, 1630 gc_type, segno, off); 1631 else if (f2fs_post_read_required(inode)) 1632 err = move_data_block(inode, start_bidx, 1633 gc_type, segno, off); 1634 else 1635 err = move_data_page(inode, start_bidx, gc_type, 1636 segno, off); 1637 1638 if (!err && (gc_type == FG_GC || 1639 f2fs_post_read_required(inode))) 1640 submitted++; 1641 1642 if (locked) { 1643 up_write(&fi->i_gc_rwsem[WRITE]); 1644 up_write(&fi->i_gc_rwsem[READ]); 1645 } 1646 1647 stat_inc_data_blk_count(sbi, 1, gc_type); 1648 } 1649 } 1650 1651 if (++phase < 5) 1652 goto next_step; 1653 1654 return submitted; 1655 } 1656 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org