On 2020/3/18 5:09, Jeff Layton wrote:
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@xxxxxxxxx>
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.
There is one div64_s64(), which should be we need here.