On Wed, 2020-03-18 at 04:35 +0800, kbuild test robot wrote:
> tree:
https://github.com/ceph/ceph-client.git testing
> head: 3188fc411f0c286ac4dc4ea146ddc4bf4f348b39
> commit: dc1961a859fe49cad7a26001bd3e9a53f234bf59 [49/53] ceph: add global read
latency metric support
> config: i386-randconfig-e002-20200317 (attached as .config)
> compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
> reproduce:
> git checkout dc1961a859fe49cad7a26001bd3e9a53f234bf59
> # save the attached .config to linux build tree
> make ARCH=i386
>
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <lkp(a)intel.com>
>
> All errors (new ones prefixed by >>):
>
> ld: fs/ceph/debugfs.o: in function `metric_show':
>>> fs/ceph/debugfs.c:140: undefined reference to `__divdi3'
> vim +140 fs/ceph/debugfs.c
>
> 126
> 127 static int metric_show(struct seq_file *s, void *p)
> 128 {
> 129 struct ceph_fs_client *fsc = s->private;
> 130 struct ceph_mds_client *mdsc = fsc->mdsc;
> 131 int i, nr_caps = 0;
> 132 s64 total, sum, avg = 0;
> 133
> 134 seq_printf(s, "item total sum_lat(us)
avg_lat(us)\n");
> 135 seq_printf(s,
"-----------------------------------------------------\n");
> 136
> 137 total = percpu_counter_sum(&mdsc->metric.total_reads);
> 138 sum = percpu_counter_sum(&mdsc->metric.read_latency_sum);
> 139 sum = jiffies_to_usecs(sum);
> > 140 avg = total ? sum / total : 0;
Thanks kbuild bot!
Old 32-bit arches can't do division on long long (64-bit) values. The
right fix for this is probably to use do_div(sum, total), instead of
trying to do this with normal integer division.