Message ID | 1636341011-6494-1-git-send-email-wubo40@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fs: direct-io: use DIV_ROUND_UP helper macro for calculations | expand |
On Mon, 2021-11-08 at 11:10 +0800, Wu Bo wrote: > Replace open coded divisor calculations with the DIV_ROUND_UP kernel > macro for better readability. A cocci file to convert these would be: $ cat dru.cocci @@ expression e1; expression e2; @@ - (e1 + e2 - 1) / e1 + DIV_ROUND_UP(e2, e1) @@ expression e1; expression e2; @@ - (e1 + e2 - 1) / e2 + DIV_ROUND_UP(e1, e2) $ If you are interested, there are definitely a few more opportunities to use this DIV_ROUND_UP macro in the kernel: $ git grep -P -n '\(\s*([\w\.\>\[\]\-]+)\s*\+\s*([\w\.\>\[\]\-]+)\s*-\s*1\s*\)\s*/\s*(?:\1|\2)\b' arch/alpha/boot/tools/objstrip.c:260: mem_size = ((mem_size + pad - 1) / pad) * pad; arch/arm/mach-omap1/clock.c:371: div = (p_rate + rate - 1) / rate; arch/powerpc/kvm/book3s_hv_rm_mmu.c:109: npages = (psize + PAGE_SIZE - 1) / PAGE_SIZE; arch/powerpc/platforms/powermac/nvram.c:600: nvram_mult = (s1 + NVRAM_SIZE - 1) / NVRAM_SIZE; arch/powerpc/platforms/powernv/pci-ioda-tce.c:311: entries_shift = (entries_shift + levels - 1) / levels; arch/powerpc/platforms/powernv/pci-ioda.c:1854: entries_shift = (entries_shift + levels - 1) / levels; arch/powerpc/xmon/xmon.c:1957: nflush = (nflush + L1_CACHE_BYTES - 1) / L1_CACHE_BYTES; arch/sh/boot/romimage/mmcif-sh7724.c:71: (no_bytes + SH_MMCIF_BBS - 1) / SH_MMCIF_BBS, arch/um/os-Linux/process.c:250: vec = calloc(1, (len + UM_KERN_PAGE_SIZE - 1) / UM_KERN_PAGE_SIZE); arch/um/os-Linux/process.c:264: for (i = 0; i < ((len + UM_KERN_PAGE_SIZE - 1) / UM_KERN_PAGE_SIZE); i++) { arch/x86/boot/genimage.sh:129: t=$((t + ((s+cluster-1)/cluster)*cluster)) block/blk-mq.h:364: depth = max((bt->sb.depth + users - 1) / users, 4U); crypto/jitterentropy.c:344: for (i = 0; ((DATA_SIZE_BITS + bits - 1) / bits) > i; i++) { crypto/tcrypt.c:117: int np = (buflen + PAGE_SIZE - 1)/PAGE_SIZE; drivers/block/null_blk/main.c:1468: index = raw_smp_processor_id() / ((nr_cpu_ids + nullb->nr_queues - 1) / nullb->nr_queues); drivers/block/xen-blkback/common.h:67: ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) drivers/char/agp/generic.c:248: scratch_pages = (page_count + ENTRIES_PER_PAGE - 1) / ENTRIES_PER_PAGE; drivers/char/agp/generic.c:1165: pages = (page_count + ENTRIES_PER_PAGE - 1) / ENTRIES_PER_PAGE; drivers/crypto/caam/desc_constr.h:118: u32 pdb_len = (pdb_bytes + CAAM_CMD_SZ - 1) / CAAM_CMD_SZ; drivers/crypto/caam/desc_constr.h:132: u32 pdb_len = (pdb_bytes + CAAM_CMD_SZ - 1) / CAAM_CMD_SZ; drivers/crypto/caam/desc_constr.h:170: (len + CAAM_CMD_SZ - 1) / CAAM_CMD_SZ); drivers/dma/ppc4xx/adma.c:797: slot_cnt = *slots_per_op = (src_cnt + XOR_MAX_OPS - 1)/XOR_MAX_OPS; drivers/dma/ppc4xx/adma.c:881: return (addr_count + XOR_MAX_OPS - 1) / XOR_MAX_OPS; drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c:534: (write_size + payload_size - 1) / payload_size; drivers/gpu/drm/amd/display/dc/core/dc_link_ddc.c:537: (read_size + payload_size - 1) / payload_size; drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c:80: unsigned int det_size_segments = (det_buffer_size_in_kbyte + DCN31_CRB_SEGMENT_SIZE_KB - 1) / DCN31_CRB_SEGMENT_SIZE_KB; drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c:114: unsigned int compbuf_size_segments = (compbuf_size_kb + DCN31_CRB_SEGMENT_SIZE_KB - 1) / DCN31_CRB_SEGMENT_SIZE_KB; drivers/gpu/drm/amd/display/dc/dml/dcn20/display_mode_vba_20.c:355: l = (ax + wx - 1) / wx; drivers/gpu/drm/amd/display/dc/dml/dcn20/display_mode_vba_20v2.c:379: l = (ax + wx - 1) / wx; drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c:550: l = (ax + wx - 1) / wx; drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c:795: L = (ax + wx - 1) / wx; drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c:845: L = (ax + wx - 1) / wx; drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c:79: return (val + factor - 1) / factor * factor; drivers/gpu/drm/drm_scatter.c:103: pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE; drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c:124: high_pl = (max_vco_f + target_vco_f - 1) / target_vco_f; drivers/gpu/drm/radeon/r100.c:2123: hblocks = (h + block_height - 1) / block_height; drivers/gpu/drm/radeon/r100.c:2124: wblocks = (w + block_width - 1) / block_width; drivers/gpu/drm/radeon/rv6xx_dpm.c:422: return (unscaled_count + count_per_unit - 1) / count_per_unit; drivers/gpu/drm/radeon/trinity_dpm.c:847: val = (p + tp - 1) / tp; drivers/gpu/drm/radeon/trinity_dpm.c:991: ni = (p + tp - 1) / tp; drivers/gpu/drm/savage/savage_bci.c:396: (n + SAVAGE_DMA_PAGE_SIZE - 1) / SAVAGE_DMA_PAGE_SIZE; drivers/infiniband/hw/bnxt_re/qplib_fp.c:1814: pkt_num = (data_len + qp->mtu - 1) / qp->mtu; drivers/infiniband/hw/bnxt_re/qplib_fp.c:1836: pkt_num = (data_len + qp->mtu - 1) / qp->mtu; drivers/infiniband/hw/bnxt_re/qplib_fp.c:1855: pkt_num = (data_len + qp->mtu - 1) / qp->mtu; drivers/infiniband/hw/hns/hns_roce_hem.c:1137: total += (r->count + step - 1) / step; drivers/infiniband/hw/mthca/mthca_allocator.c:231: npages = (size + PAGE_SIZE - 1) / PAGE_SIZE; drivers/infiniband/hw/mthca/mthca_allocator.c:296: for (i = 0; i < (size + PAGE_SIZE - 1) / PAGE_SIZE; ++i) drivers/infiniband/hw/qib/qib_iba7322.c:1323: u32 regcnt = (piobcnt + BITS_PER_LONG - 1) / BITS_PER_LONG; drivers/infiniband/sw/rdmavt/mr.c:100: m = (count + RVT_SEGSZ - 1) / RVT_SEGSZ; drivers/infiniband/sw/rdmavt/mr.c:244: m = (count + RVT_SEGSZ - 1) / RVT_SEGSZ; drivers/infiniband/sw/rxe/rxe_mr.c:128: num_map = (num_buf + RXE_BUF_PER_MAP - 1) / RXE_BUF_PER_MAP; drivers/md/dm-integrity.c:1792: s = sector - ((r + ic->tag_size - 1) / ic->tag_size); drivers/md/raid1-10.c:4:#define RESYNC_PAGES ((RESYNC_BLOCK_SIZE + PAGE_SIZE-1) / PAGE_SIZE) drivers/md/raid5.c:499: nr_pages = (disks + cnt - 1) / cnt; drivers/media/common/cx2341x.c:431: params->video_gop_size = b * ((gop + b - 1) / b); drivers/media/common/cx2341x.c:440: params->video_gop_size = b * ((gop + b - 1) / b); drivers/media/common/cx2341x.c:1332: gop = b * ((gop + b - 1) / b); drivers/media/common/saa7146/saa7146_core.c:166: int pages = (length+PAGE_SIZE-1)/PAGE_SIZE; drivers/media/i2c/ccs/ccs-core.c:1426: * w = (x + a - 1) / a drivers/media/pci/ivtv/ivtv-irq.c:197: bytes_needed = s->buf_size * ((bytes_needed + s->buf_size - 1) / s->buf_size); drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c:772: width_lcu_num = (width + lcu_size - 1) / lcu_size; drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c:773: height_lcu_num = (height + lcu_size - 1) / lcu_size; drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c:980: ((width + SYSTEM_LAL_TILE10 - 1) / SYSTEM_LAL_TILE10) * drivers/media/test-drivers/vivid/vivid-radio-rx.c:205: freq = spacing * ((freq + spacing - 1) / spacing) - spacing; drivers/media/test-drivers/vivid/vivid-radio-rx.c:209: freq = spacing * ((high + spacing - 1) / spacing) - spacing; drivers/memory/mvebu-devbus.c:101: *ticks = (time_ps + devbus->tick_ps - 1) / devbus->tick_ps; drivers/memory/omap-gpmc.c:347: return (time_ps + tick_ps - 1) / tick_ps; drivers/memory/omap-gpmc.c:1488: temp = (temp + div - 1) / div; drivers/mtd/tests/stresstest.c:104: len = ((len + pgsize - 1) / pgsize) * pgsize; drivers/net/arcnet/rfc1201.c:495: out->numsegs = (out->dataleft + maxsegsize - 1) / maxsegsize; drivers/net/dsa/sja1105/sja1105_ptp.h:21: * is in fact precisely the floor value of "(a + b - 1) / b", which is drivers/net/ethernet/atheros/atl1e/atl1e_main.c:1787: seg_num = (buf_len + MAX_TX_BUF_LEN - 1) / MAX_TX_BUF_LEN; drivers/net/ethernet/hisilicon/hns/hns_enet.c:252: buf_num = (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE; drivers/net/ethernet/hisilicon/hns/hns_enet.c:258: buf_num += (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE; drivers/net/ethernet/hisilicon/hns/hns_enet.c:262: buf_num = (skb->len + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE; drivers/net/ethernet/hisilicon/hns/hns_enet.c:288: frag_buf_num = (size + BD_MAX_SEND_SIZE - 1) / BD_MAX_SEND_SIZE; drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c:1296: (num_sqbs + hw->stack_pg_ptrs - 1) / hw->stack_pg_ptrs; drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c:1354: (num_ptrs + hw->stack_pg_ptrs - 1) / hw->stack_pg_ptrs; drivers/net/vmxnet3/vmxnet3_drv.c:2916: adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE; drivers/net/vmxnet3/vmxnet3_drv.c:2925: ring0_size = (ring0_size + sz - 1) / sz * sz; drivers/net/vmxnet3/vmxnet3_drv.c:2929: ring1_size = (ring1_size + sz - 1) / sz * sz; drivers/net/vmxnet3/vmxnet3_ethtool.c:648: new_rx_ring_size = (param->rx_pending + sz - 1) / sz * sz; drivers/net/wireless/ath/ath9k/xmit.c:1079: nsymbols = (nbits + nsymbits - 1) / nsymbits; drivers/net/wireless/broadcom/b43/phy_lp.c:2562: if ((tmp4 + tmp3 - 1) / tmp3 > 60) { drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.c:671: dur = (mac_len + rate - 1) / rate; drivers/net/wireless/intel/ipw2x00/ipw2200.c:3234: nr = (chunk_len + CB_MAX_LENGTH - 1) / CB_MAX_LENGTH; drivers/net/wireless/marvell/mwifiex/sdio.c:2307: buf_block_len = (pkt_len + blk_size - 1) / blk_size; drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c:4206: val8 = ((30000 + NAV_UPPER_UNIT - 1) / NAV_UPPER_UNIT); drivers/net/wireless/realtek/rtlwifi/wifi.h:2902: (__value) : (((__value + __aligment - 1) / __aligment) * __aligment)) drivers/net/wireless/ti/wl12xx/main.c:1291: return (align_len + blk_size - 1) / blk_size + spare_blks; drivers/net/wireless/ti/wl18xx/main.c:1069: return (len + blk_size - 1) / blk_size + spare_blks; drivers/pinctrl/bcm/pinctrl-iproc-gpio.c:836: chip->num_banks = (ngpios + NGPIOS_PER_BANK - 1) / NGPIOS_PER_BANK; drivers/ps3/ps3av.c:191: timeout = (timeout + POLLING_INTERVAL - 1) / POLLING_INTERVAL; drivers/scsi/aic94xx/aic94xx_hwi.c:378: seq->num_escbs = (edbs+ASD_EDBS_PER_SCB-1)/ASD_EDBS_PER_SCB; drivers/scsi/aic94xx/aic94xx_seq.c:212: int pages = (size + LSEQ_CODEPAGE_SIZE - 1) / LSEQ_CODEPAGE_SIZE; drivers/scsi/aic94xx/aic94xx_seq.c:276: const int pages = (size + MAX_DMA_OVLY_COUNT - 1) / MAX_DMA_OVLY_COUNT; drivers/scsi/be2iscsi/be_main.h:149: ((x < PAGE_SIZE) ? 1 : ((x + PAGE_SIZE - 1) / PAGE_SIZE)) drivers/scsi/bnx2fc/bnx2fc_hwi.c:649: num_rq = (frame_len + BNX2FC_RQ_BUF_SZ - 1) / BNX2FC_RQ_BUF_SZ; drivers/scsi/cxgbi/libcxgbi.c:2089: num_pdu = (count + max_pdu_len - 1) / max_pdu_len; drivers/scsi/lpfc/lpfc_init.c:8272: longs = (LPFC_SLI4_FCF_TBL_INDX_MAX + BITS_PER_LONG - 1)/BITS_PER_LONG; drivers/scsi/lpfc/lpfc_sli.c:7162: longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG; drivers/scsi/lpfc/lpfc_sli.c:7190: longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG; drivers/scsi/lpfc/lpfc_sli.c:7217: longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG; drivers/scsi/lpfc/lpfc_sli.c:7246: longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG; drivers/scsi/ncr53c8xx.c:3779: else np->minsync = (period + 40 - 1) / 40; drivers/scsi/sym53c8xx_2/sym_hipd.c:734: else np->minsync = (period + 40 - 1) / 40; drivers/spi/spi-coldfire-qspi.c:134: return clamp((MCFQSPI_BUSCLK + speed_hz - 1) / speed_hz, 2u, 255u); drivers/spi/spi-omap2-mcspi.c:915: div = (OMAP2_MCSPI_MAX_FREQ + speed_hz - 1) / speed_hz; drivers/staging/r8188eu/include/basic_types.h:121: (__value) : (((__value + __aligment - 1) / __aligment) * __aligment)) drivers/staging/rtl8723bs/include/basic_types.h:191:#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment)) drivers/target/iscsi/cxgbit/cxgbit_target.c:409: num_pdu = (data_length + mrdsl - 1) / mrdsl; drivers/usb/dwc2/hcd_ddma.c:85: (qh->host_interval + 8 - 1) / 8 : qh->host_interval; drivers/usb/dwc2/hcd_ddma.c:284: inc = (8 + qh->host_interval - 1) / qh->host_interval; drivers/usb/host/oxu210hp-hcd.c:922: n_blocks = (len + BUFFER_SIZE - 1) / BUFFER_SIZE; drivers/video/fbdev/matrox/matroxfb_g450.c:308: r->regs[0x09] = (outd->burst + pixclock - 1) / pixclock; /* burst length */ drivers/video/fbdev/omap/hwa742.c:633: return (ps + bus_tick - 1) / bus_tick * bus_tick; drivers/video/fbdev/omap/lcdc.c:443: *pck_div = (lck + pck - 1) / pck; drivers/video/fbdev/omap/sossi.c:115: return (clk_period + ps - 1) / clk_period; fs/afs/dir.c:313: nr_pages = (i_size + PAGE_SIZE - 1) / PAGE_SIZE; fs/cachefiles/io.c:325: if (cachefiles_has_space(cache, 0, (subreq->len + PAGE_SIZE - 1) / PAGE_SIZE) == 0) fs/cifs/smbdirect.c:2058: nvecs = (buflen+max_iov_size-1)/max_iov_size; fs/cifs/smbdirect.c:2111: nvecs = (buflen + max_iov_size - 1) / max_iov_size; fs/direct-io.c:197: sdio->tail = (ret + PAGE_SIZE - 1) / PAGE_SIZE; fs/ext4/fast_commit.c:1166: fc_bufs_before = (sbi->s_fc_bytes + bsize - 1) / bsize; fs/ext4/fast_commit.c:1173: nblks = (sbi->s_fc_bytes + bsize - 1) / bsize - fc_bufs_before; fs/nfs/nfs4renewd.c:124: __func__, (timeout + HZ - 1) / HZ); fs/ocfs2/cluster/heartbeat.c:1689: reg->hr_num_pages = (reg->hr_blocks + spp - 1) / spp; fs/xfs/libxfs/xfs_attr_remote.c:56: return (attrlen + buflen - 1) / buflen; fs/xfs/libxfs/xfs_bmap.c:87: maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs; fs/xfs/libxfs/xfs_bmap.c:92: maxblocks = (maxblocks + minnoderecs - 1) / minnoderecs; fs/xfs/libxfs/xfs_symlink_remote.c:32: return (pathlen + buflen - 1) / buflen; fs/xfs/xfs_log_cil.c:470: split_res = (len + iclog_space - 1) / iclog_space; include/linux/mpi.h:53: return mpi_alloc((nbits + BITS_PER_MPI_LIMB - 1) / BITS_PER_MPI_LIMB); include/linux/sunrpc/svc.h:182:#define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \ kernel/debug/kdb/kdb_main.c:1718: z = (z + num - 1) / num; kernel/rcu/rcu.h:305: levelspread[i] = (cprv + ccur - 1) / ccur; kernel/rcu/rcutorture.c:2258: sd4 = (sd + fwd_progress_div - 1) / fwd_progress_div; kernel/time/posix-cpu-timers.c:159: tp->tv_nsec = ((NSEC_PER_SEC + HZ - 1) / HZ); kernel/watch_queue.c:261: bmsize = (nr_notes + BITS_PER_LONG - 1) / BITS_PER_LONG; lib/mpi/ec.c:197:#define LIMB_SIZE_25519 ((256+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB) lib/mpi/ec.c:303:#define LIMB_SIZE_448 ((448+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB) lib/mpi/mpicoder.c:143: nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; lib/zlib_deflate/deflate.c:259: s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); net/ipv4/tcp_input.c:1053: tp->reordering = min_t(u32, (metric + mss - 1) / mss, net/sunrpc/auth_gss/gss_krb5_crypto.c:670: nblocks = (nbytes + blocksize - 1) / blocksize; net/sunrpc/auth_gss/gss_krb5_crypto.c:753: nblocks = (subbuf.len + blocksize - 1) / blocksize; sound/isa/sb/emu8000_pcm.c:239: (1000000 + HZ - 1) / HZ, UINT_MAX); sound/soc/sh/rcar/core.c:1579: (io->converted_rate + k_up - 1) / k_up; sound/soc/sh/rcar/core.c:1581: (io->converted_rate + k_up - 1) / k_up; sound/soc/ti/davinci-mcasp.c:872: max_active_serializers = (channels + slots - 1) / slots; sound/soc/ti/davinci-mcasp.c:1017: active_serializers = (channels + total_slots - 1) / total_slots; tools/bpf/bpftool/gen.c:184: align_off = (off + align - 1) / align * align; tools/io_uring/io_uring-bench.c:140: return (DEPTH + s->nr_files - 1) / s->nr_files; tools/lib/bpf/linker.c:1115: dst_align_sz = (dst->sec_sz + dst_align - 1) / dst_align * dst_align; tools/lib/subcmd/help.c:119: rows = (cmds->cnt + cols - 1) / cols; tools/testing/selftests/bpf/prog_tests/core_reloc.c:804: return (sz + page_size - 1) / page_size * page_size; tools/testing/selftests/bpf/prog_tests/mmap.c:13: return (sz + page_size - 1) / page_size * page_size; tools/testing/selftests/net/forwarding/sch_red.sh:202: local pkts=$(((diff + PKTSZ - 1) / PKTSZ)) tools/vm/page-types.c:943: size, (size + page_size - 1) / page_size);
On Sun, Nov 07, 2021 at 07:17:07PM -0800, Joe Perches wrote: > If you are interested, there are definitely a few more opportunities > to use this DIV_ROUND_UP macro in the kernel: > > $ git grep -P -n '\(\s*([\w\.\>\[\]\-]+)\s*\+\s*([\w\.\>\[\]\-]+)\s*-\s*1\s*\)\s*/\s*(?:\1|\2)\b' > arch/alpha/boot/tools/objstrip.c:260: mem_size = ((mem_size + pad - 1) / pad) * pad; Might want to exclude 'tools' ... > tools/bpf/bpftool/gen.c:184: align_off = (off + align - 1) / align * align; > tools/io_uring/io_uring-bench.c:140: return (DEPTH + s->nr_files - 1) / s->nr_files; > tools/lib/bpf/linker.c:1115: dst_align_sz = (dst->sec_sz + dst_align - 1) / dst_align * dst_align; > tools/lib/subcmd/help.c:119: rows = (cmds->cnt + cols - 1) / cols; > tools/testing/selftests/bpf/prog_tests/core_reloc.c:804: return (sz + page_size - 1) / page_size * page_size; > tools/testing/selftests/bpf/prog_tests/mmap.c:13: return (sz + page_size - 1) / page_size * page_size; > tools/testing/selftests/net/forwarding/sch_red.sh:202: local pkts=$(((diff + PKTSZ - 1) / PKTSZ)) > tools/vm/page-types.c:943: size, (size + page_size - 1) / page_size); ... because most of these files won't have access to that macro. Definitely compile-test before sending a patch.
On Mon, 2021-11-08 at 03:52 +0000, Matthew Wilcox wrote: > On Sun, Nov 07, 2021 at 07:17:07PM -0800, Joe Perches wrote: > > If you are interested, there are definitely a few more opportunities > > to use this DIV_ROUND_UP macro in the kernel: > > > > $ git grep -P -n '\(\s*([\w\.\>\[\]\-]+)\s*\+\s*([\w\.\>\[\]\-]+)\s*-\s*1\s*\)\s*/\s*(?:\1|\2)\b' > > arch/alpha/boot/tools/objstrip.c:260: mem_size = ((mem_size + pad - 1) / pad) * pad; > > Might want to exclude 'tools' ... > > > tools/bpf/bpftool/gen.c:184: align_off = (off + align - 1) / align * align; > > tools/io_uring/io_uring-bench.c:140: return (DEPTH + s->nr_files - 1) / s->nr_files; > > tools/lib/bpf/linker.c:1115: dst_align_sz = (dst->sec_sz + dst_align - 1) / dst_align * dst_align; > > tools/lib/subcmd/help.c:119: rows = (cmds->cnt + cols - 1) / cols; > > tools/testing/selftests/bpf/prog_tests/core_reloc.c:804: return (sz + page_size - 1) / page_size * page_size; > > tools/testing/selftests/bpf/prog_tests/mmap.c:13: return (sz + page_size - 1) / page_size * page_size; > > tools/testing/selftests/net/forwarding/sch_red.sh:202: local pkts=$(((diff + PKTSZ - 1) / PKTSZ)) > > tools/vm/page-types.c:943: size, (size + page_size - 1) / page_size); > > ... because most of these files won't have access to that macro. > Definitely compile-test before sending a patch. Always. btw: tools/include/linux/kernel.h:#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
diff --git a/fs/direct-io.c b/fs/direct-io.c index 6544435..e5869c2 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -194,7 +194,7 @@ static inline int dio_refill_pages(struct dio *dio, struct dio_submit *sdio) iov_iter_advance(sdio->iter, ret); ret += sdio->from; sdio->head = 0; - sdio->tail = (ret + PAGE_SIZE - 1) / PAGE_SIZE; + sdio->tail = DIV_ROUND_UP(ret, PAGE_SIZE); sdio->to = ((ret - 1) & (PAGE_SIZE - 1)) + 1; return 0; }
Replace open coded divisor calculations with the DIV_ROUND_UP kernel macro for better readability. Signed-off-by: Wu Bo <wubo40@huawei.com> --- fs/direct-io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)