* [hch-xfs:xfs-zoned 79/80] fs/xfs/xfs_reflink.c:835: undefined reference to `xfs_zone_record_blocks'
@ 2024-01-26 7:42 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-01-26 7:42 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: oe-kbuild-all
tree: git://git.infradead.org/users/hch/xfs xfs-zoned
head: 9fc0addd2e44d48f96a00113084dfcab9b9df8f8
commit: 2fa0f6f5ec6e51a9507fe67dfe98cdd1b89958cd [79/80] xfs: add a "defrag" mode to xfs_zoned_end_cow
config: i386-randconfig-011-20240126 (https://download.01.org/0day-ci/archive/20240126/202401261517.cM7pDXKA-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240126/202401261517.cM7pDXKA-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202401261517.cM7pDXKA-lkp@intel.com/
All errors (new ones prefixed by >>):
ld: fs/xfs/xfs_reflink.o: in function `__xfs_reflink_end_cow_extent':
>> fs/xfs/xfs_reflink.c:835: undefined reference to `xfs_zone_record_blocks'
vim +835 fs/xfs/xfs_reflink.c
792
793 static int
794 __xfs_reflink_end_cow_extent(
795 struct xfs_trans *tp,
796 struct xfs_inode *ip,
797 struct xfs_bmbt_irec *cow,
798 xfs_fsblock_t *new_startblock,
799 xfs_fsblock_t old_startblock)
800 {
801 bool isrt = XFS_IS_REALTIME_INODE(ip);
802 struct xfs_bmbt_irec data, new;
803 int nmaps = 1;
804 int error;
805
806 error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK,
807 XFS_IEXT_REFLINK_END_COW_CNT);
808 if (error == -EFBIG)
809 error = xfs_iext_count_upgrade(tp, ip,
810 XFS_IEXT_REFLINK_END_COW_CNT);
811 if (error)
812 return error;
813
814 /* Grab the corresponding mapping in the data fork. */
815 error = xfs_bmapi_read(ip, cow->br_startoff, cow->br_blockcount, &data,
816 &nmaps, 0);
817 if (error)
818 return error;
819
820 /* We can only remap the smaller of the two extent sizes. */
821 data.br_blockcount = min(data.br_blockcount, cow->br_blockcount);
822 cow->br_blockcount = data.br_blockcount;
823
824 if (old_startblock != NULLFSBLOCK &&
825 data.br_startblock != old_startblock) {
826 /*
827 * A data write raced with our GC write.
828 *
829 * Keep the existing data, mark our newly written GC extent as
830 * reclaimable and move on to the next extent.
831 */
832 ASSERT(xfs_is_zoned_inode(ip));
833 ASSERT(*new_startblock == NULLFSBLOCK);
834 trace_xfs_reflink_cow_remap_skip(ip, cow);
> 835 return xfs_zone_record_blocks(tp, cow->br_startblock,
836 cow->br_blockcount, false);
837 }
838
839 trace_xfs_reflink_cow_remap_from(ip, cow);
840 trace_xfs_reflink_cow_remap_to(ip, &data);
841
842 if (xfs_bmap_is_real_extent(&data)) {
843 /*
844 * If the extent we're remapping into is backed by storage
845 * (written or not), unmap the extent and drop its refcount.
846 */
847 xfs_bmap_unmap_extent(tp, ip, XFS_DATA_FORK, &data);
848 if (xfs_is_reflink_inode(ip)) {
849 xfs_refcount_decrease_extent(tp, isrt, &data);
850 } else {
851 error = xfs_free_extent_later(tp, data.br_startblock,
852 data.br_blockcount, NULL,
853 XFS_AG_RESV_NONE,
854 XFS_FREE_EXTENT_REALTIME);
855 if (error)
856 return error;
857 }
858 xfs_reflink_update_quota(tp, ip, false, -data.br_blockcount);
859 } else if (data.br_startblock == DELAYSTARTBLOCK) {
860 int done;
861
862 /*
863 * If the extent we're remapping into is a delalloc reservation,
864 * we can use the regular bunmapi function to release the
865 * incore state. Dropping the delalloc reservation takes care
866 * of the quota reservation for us.
867 */
868 error = xfs_bunmapi(NULL, ip, data.br_startoff,
869 data.br_blockcount, 0, 1, &done);
870 if (error)
871 return error;
872 ASSERT(done);
873 }
874
875 new = *cow;
876 if (xfs_is_zoned_inode(ip)) {
877 if (*new_startblock != NULLFSBLOCK) {
878 ASSERT(isnullstartblock(new.br_startblock));
879 ASSERT(new.br_state == XFS_EXT_NORM);
880
881 new.br_startblock = *new_startblock;
882 *new_startblock += new.br_blockcount;
883 }
884
885 error = xfs_zone_record_blocks(tp, new.br_startblock,
886 new.br_blockcount, true);
887 if (error)
888 return error;
889 } else {
890 ASSERT(*new_startblock == NULLFSBLOCK);
891
892 /* Free the CoW orphan record. */
893 xfs_refcount_free_cow_extent(tp, isrt, cow->br_startblock,
894 cow->br_blockcount);
895 }
896
897 /* Map the new blocks into the data fork. */
898 xfs_bmap_map_extent(tp, ip, XFS_DATA_FORK, &new);
899
900 /* Charge this new data fork mapping to the on-disk quota. */
901 xfs_reflink_update_quota(tp, ip, true, cow->br_blockcount);
902 return 0;
903 }
904
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-26 7:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-26 7:42 [hch-xfs:xfs-zoned 79/80] fs/xfs/xfs_reflink.c:835: undefined reference to `xfs_zone_record_blocks' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.