mbox series

[v3,00/63] Improve static type checking for request flags

Message ID 20220714180729.1065367-1-bvanassche@acm.org (mailing list archive)
Headers show
Series Improve static type checking for request flags | expand

Message

Bart Van Assche July 14, 2022, 6:06 p.m. UTC
Hi Jens,

A source of confusion in the block layer is that can be nontrivial to determine
which type of flags a u32 function argument accepts. This patch series clears
up that confusion for request flags by introducing a new __bitwise type, namely
blk_opf_t. Additionally, the type 'int' is change into 'enum req_op' where used
to hold a request operation.

Analysis of the sparse warnings introduced by this conversion resulted in one
bug fix ("blktrace: Trace remap operations correctly").

Although the number of patches in this series is significant, the risk of this
patch series is low since most patches involve changing one integer type (int
or u32) into another integer type of the same size (enum req_op or blk_opf_t).

Please consider this patch series for kernel v5.20.

Thanks,

Bart.

Changes compared to v2:
- Renamed 'op' arguments and variables into 'opf' in case these hold both a
  request operation and flags (BFQ, mq-deadline, Kyber and NVMe target code).
- Added more Reviewed-by tags.

Changes compared to v1:
- Combined request operation and flags into a single variable or argument.
- Changed the type of several enum req_op arguments into blk_opf_t for future
  extensibility.
- Removed the __force casts from tracing code.
- Added a few additional patches that convert additional block drivers.

Bart Van Assche (63):
  treewide: Rename enum req_opf into enum req_op
  block: Use enum req_op where appropriate
  block: Change the type of the last .rw_page() argument
  block: Change the type of req_op() and bio_op() into enum req_op
  block: Introduce the type blk_opf_t
  block: Use the new blk_opf_t type
  block/bfq: Use the new blk_opf_t type
  block/mq-deadline: Use the new blk_opf_t type
  block/kyber: Use the new blk_opf_t type
  blktrace: Trace remapped requests correctly
  blktrace: Use the new blk_opf_t type
  block/brd: Use the enum req_op type
  block/drbd: Use the enum req_op and blk_opf_t types
  block/drbd: Combine two drbd_submit_peer_request() arguments
  block/floppy: Fix a sparse warning
  block/rnbd: Use blk_opf_t where appropriate
  xen-blkback: Use the enum req_op and blk_opf_t types
  block/zram: Use enum req_op where appropriate
  nvdimm-btt: Use the enum req_op type
  um: Use enum req_op where appropriate
  dm/core: Reduce the size of struct dm_io_request
  dm/core: Rename kcopyd_job.rw into kcopyd.op
  dm/core: Combine request operation type and flags
  dm/ebs: Change 'int rw' into 'enum req_op op'
  dm/dm-flakey: Use the new blk_opf_t type
  dm/dm-integrity: Combine request operation and flags
  dm mirror log: Use the new blk_opf_t type
  dm-snap: Combine request operation type and flags
  dm/zone: Use the enum req_op type
  dm/dm-zoned: Use the enum req_op type
  md/core: Combine two sync_page_io() arguments
  md/bcache: Combine two uuid_io() arguments
  md/bcache: Combine two prio_io() arguments
  md/raid1: Use the new blk_opf_t type
  md/raid10: Use the new blk_opf_t type
  md/raid5: Use the enum req_op and blk_opf_t types
  nvme/host: Use the enum req_op and blk_opf_t types
  nvme/target: Use the new blk_opf_t type
  scsi/core: Improve static type checking
  scsi/core: Change the return type of scsi_noretry_cmd() into bool
  scsi/core: Use the new blk_opf_t type
  scsi/device_handlers: Use the new blk_opf_t type
  scsi/ufs: Rename a 'dir' argument into 'op'
  scsi/target: Use the new blk_opf_t type
  mm: Use the new blk_opf_t type
  fs/buffer: Use the new blk_opf_t type
  fs/buffer: Combine two submit_bh() and ll_rw_block() arguments
  fs/direct-io: Reduce the size of struct dio
  fs/mpage: Use the new blk_opf_t type
  fs/btrfs: Use the enum req_op and blk_opf_t types
  fs/ext4: Use the new blk_opf_t type
  fs/f2fs: Use the enum req_op and blk_opf_t types
  fs/gfs2: Use the enum req_op and blk_opf_t types
  fs/hfsplus: Use the enum req_op and blk_opf_t types
  fs/iomap: Use the new blk_opf_t type
  fs/jbd2: Fix the documentation of the jbd2_write_superblock() callers
  fs/nfs: Use enum req_op where appropriate
  fs/nilfs2: Use the enum req_op and blk_opf_t types
  fs/ntfs3: Use enum req_op where appropriate
  fs/ocfs2: Use the enum req_op and blk_opf_t types
  PM: Use the enum req_op and blk_opf_t types
  fs/xfs: Use the enum req_op and blk_opf_t types
  fs/zonefs: Use the enum req_op type for tracing request operations

 arch/um/drivers/ubd_kern.c                  |   4 +-
 block/bfq-cgroup.c                          |  26 ++---
 block/bfq-iosched.c                         |  16 +--
 block/bfq-iosched.h                         |   8 +-
 block/bio.c                                 |  10 +-
 block/blk-cgroup-rwstat.h                   |   8 +-
 block/blk-core.c                            |   8 +-
 block/blk-flush.c                           |   6 +-
 block/blk-merge.c                           |   8 +-
 block/blk-mq-debugfs.c                      |   6 +-
 block/blk-mq.c                              |  15 +--
 block/blk-mq.h                              |   6 +-
 block/blk-throttle.c                        |   7 +-
 block/blk-wbt.c                             |  18 +--
 block/blk-zoned.c                           |   7 +-
 block/blk.h                                 |   2 +-
 block/elevator.h                            |   2 +-
 block/fops.c                                |  12 +-
 block/kyber-iosched.c                       |   8 +-
 block/mq-deadline.c                         |   4 +-
 drivers/block/brd.c                         |   4 +-
 drivers/block/drbd/drbd_actlog.c            |   9 +-
 drivers/block/drbd/drbd_bitmap.c            |   2 +-
 drivers/block/drbd/drbd_int.h               |   5 +-
 drivers/block/drbd/drbd_receiver.c          |  24 ++--
 drivers/block/drbd/drbd_worker.c            |   2 +-
 drivers/block/floppy.c                      |   2 +-
 drivers/block/null_blk/main.c               |   9 +-
 drivers/block/null_blk/null_blk.h           |  12 +-
 drivers/block/null_blk/trace.h              |   2 +-
 drivers/block/null_blk/zoned.c              |   4 +-
 drivers/block/paride/pd.c                   |   2 +
 drivers/block/rnbd/rnbd-proto.h             |   7 +-
 drivers/block/xen-blkback/blkback.c         |   6 +-
 drivers/block/zram/zram_drv.c               |   4 +-
 drivers/md/bcache/super.c                   |  25 ++--
 drivers/md/dm-bufio.c                       |  26 ++---
 drivers/md/dm-ebs-target.c                  |  15 +--
 drivers/md/dm-flakey.c                      |   8 +-
 drivers/md/dm-integrity.c                   |  76 ++++++-------
 drivers/md/dm-io.c                          |  38 +++----
 drivers/md/dm-kcopyd.c                      |  26 ++---
 drivers/md/dm-log.c                         |   8 +-
 drivers/md/dm-raid.c                        |   2 +-
 drivers/md/dm-raid1.c                       |  12 +-
 drivers/md/dm-snap-persistent.c             |  25 ++--
 drivers/md/dm-writecache.c                  |  12 +-
 drivers/md/dm-zone.c                        |   2 +-
 drivers/md/dm-zoned-metadata.c              |   5 +-
 drivers/md/dm-zoned.h                       |   2 +-
 drivers/md/dm.c                             |  12 +-
 drivers/md/md-bitmap.c                      |   6 +-
 drivers/md/md.c                             |  10 +-
 drivers/md/md.h                             |   3 +-
 drivers/md/raid1.c                          |  12 +-
 drivers/md/raid10.c                         |  20 ++--
 drivers/md/raid5-cache.c                    |  12 +-
 drivers/md/raid5-ppl.c                      |  12 +-
 drivers/md/raid5.c                          |   3 +-
 drivers/nvdimm/btt.c                        |   4 +-
 drivers/nvdimm/pmem.c                       |   2 +-
 drivers/nvme/host/ioctl.c                   |   4 +-
 drivers/nvme/host/nvme.h                    |   2 +-
 drivers/nvme/target/io-cmd-bdev.c           |  17 +--
 drivers/nvme/target/zns.c                   |  10 +-
 drivers/scsi/device_handler/scsi_dh_alua.c  |   4 +-
 drivers/scsi/device_handler/scsi_dh_emc.c   |   2 +-
 drivers/scsi/device_handler/scsi_dh_hp_sw.c |   4 +-
 drivers/scsi/device_handler/scsi_dh_rdac.c  |   2 +-
 drivers/scsi/scsi_error.c                   |  16 +--
 drivers/scsi/scsi_lib.c                     |  12 +-
 drivers/scsi/scsi_priv.h                    |   2 +-
 drivers/scsi/sd_zbc.c                       |   2 +-
 drivers/target/target_core_iblock.c         |   4 +-
 drivers/ufs/core/ufshpb.c                   |   7 +-
 fs/btrfs/check-integrity.c                  |   4 +-
 fs/btrfs/compression.c                      |   6 +-
 fs/btrfs/compression.h                      |   2 +-
 fs/btrfs/extent_io.c                        |  18 +--
 fs/btrfs/inode.c                            |   4 +-
 fs/btrfs/raid56.c                           |   4 +-
 fs/buffer.c                                 |  56 ++++-----
 fs/direct-io.c                              |  40 ++++---
 fs/ext4/ext4.h                              |   8 +-
 fs/ext4/fast_commit.c                       |   4 +-
 fs/ext4/mmp.c                               |   2 +-
 fs/ext4/super.c                             |  20 ++--
 fs/f2fs/data.c                              |  11 +-
 fs/f2fs/f2fs.h                              |   6 +-
 fs/f2fs/node.c                              |   2 +-
 fs/f2fs/segment.c                           |   2 +-
 fs/gfs2/bmap.c                              |   5 +-
 fs/gfs2/dir.c                               |   5 +-
 fs/gfs2/log.c                               |   4 +-
 fs/gfs2/log.h                               |   2 +-
 fs/gfs2/lops.c                              |   4 +-
 fs/gfs2/lops.h                              |   2 +-
 fs/gfs2/meta_io.c                           |  18 ++-
 fs/gfs2/quota.c                             |   2 +-
 fs/hfsplus/hfsplus_fs.h                     |   2 +-
 fs/hfsplus/part_tbl.c                       |   5 +-
 fs/hfsplus/super.c                          |   4 +-
 fs/hfsplus/wrapper.c                        |  12 +-
 fs/iomap/direct-io.c                        |   8 +-
 fs/isofs/compress.c                         |   2 +-
 fs/jbd2/commit.c                            |   8 +-
 fs/jbd2/journal.c                           |  19 ++--
 fs/jbd2/recovery.c                          |   4 +-
 fs/mpage.c                                  |   6 +-
 fs/nfs/blocklayout/blocklayout.c            |  13 +--
 fs/nilfs2/btnode.c                          |   8 +-
 fs/nilfs2/btnode.h                          |   4 +-
 fs/nilfs2/btree.c                           |   6 +-
 fs/nilfs2/gcinode.c                         |   7 +-
 fs/nilfs2/mdt.c                             |  19 ++--
 fs/ntfs/aops.c                              |   6 +-
 fs/ntfs/compress.c                          |   2 +-
 fs/ntfs/file.c                              |   2 +-
 fs/ntfs/logfile.c                           |   2 +-
 fs/ntfs/mft.c                               |   4 +-
 fs/ntfs3/file.c                             |   2 +-
 fs/ntfs3/fsntfs.c                           |   2 +-
 fs/ntfs3/inode.c                            |   2 +-
 fs/ntfs3/ntfs_fs.h                          |   2 +-
 fs/ocfs2/aops.c                             |   2 +-
 fs/ocfs2/buffer_head_io.c                   |   8 +-
 fs/ocfs2/cluster/heartbeat.c                |  11 +-
 fs/ocfs2/super.c                            |   2 +-
 fs/reiserfs/inode.c                         |   4 +-
 fs/reiserfs/journal.c                       |  12 +-
 fs/reiserfs/stree.c                         |   4 +-
 fs/reiserfs/super.c                         |   2 +-
 fs/udf/dir.c                                |   2 +-
 fs/udf/directory.c                          |   2 +-
 fs/udf/inode.c                              |   2 +-
 fs/ufs/balloc.c                             |   2 +-
 fs/xfs/xfs_bio_io.c                         |   2 +-
 fs/xfs/xfs_buf.c                            |   4 +-
 fs/xfs/xfs_linux.h                          |   2 +-
 fs/xfs/xfs_log_recover.c                    |   2 +-
 fs/zonefs/super.c                           |   5 +-
 fs/zonefs/trace.h                           |   4 +-
 include/linux/bio.h                         |  10 +-
 include/linux/blk-mq.h                      |  12 +-
 include/linux/blk_types.h                   | 119 +++++++++++---------
 include/linux/blkdev.h                      |  12 +-
 include/linux/blktrace_api.h                |   3 +-
 include/linux/buffer_head.h                 |   9 +-
 include/linux/dm-io.h                       |   4 +-
 include/linux/jbd2.h                        |   2 +-
 include/linux/writeback.h                   |   4 +-
 include/scsi/scsi_cmnd.h                    |   4 +-
 include/scsi/scsi_device.h                  |   2 +-
 include/trace/events/f2fs.h                 |  22 ++--
 include/trace/events/jbd2.h                 |  12 +-
 include/trace/events/nilfs2.h               |   4 +-
 kernel/power/swap.c                         |  29 +++--
 kernel/trace/blktrace.c                     |  51 ++++-----
 158 files changed, 751 insertions(+), 743 deletions(-)

Comments

Jens Axboe July 14, 2022, 6:15 p.m. UTC | #1
On Thu, 14 Jul 2022 11:06:26 -0700, Bart Van Assche wrote:
> A source of confusion in the block layer is that can be nontrivial to determine
> which type of flags a u32 function argument accepts. This patch series clears
> up that confusion for request flags by introducing a new __bitwise type, namely
> blk_opf_t. Additionally, the type 'int' is change into 'enum req_op' where used
> to hold a request operation.
> 
> Analysis of the sparse warnings introduced by this conversion resulted in one
> bug fix ("blktrace: Trace remap operations correctly").
> 
> [...]

Applied, thanks!

[01/63] treewide: Rename enum req_opf into enum req_op
        commit: ff07a02e9e8e6489db841e0c48a5c78e7e78d572
[02/63] block: Use enum req_op where appropriate
        commit: 77e7ffd7ad3952909be6a9c599b7d164c8866fec
[03/63] block: Change the type of the last .rw_page() argument
        commit: 86947df3a9236481276e8baadde50a403b02b4d4
[04/63] block: Change the type of req_op() and bio_op() into enum req_op
        commit: 2d9b02be73ba8efba406b399a722b4e33614dd0e
[05/63] block: Introduce the type blk_opf_t
        commit: 342a72a334073f163da924b69c3d3fb4685eb33a
[06/63] block: Use the new blk_opf_t type
        commit: 16458cf3bd15e5624205df6e8a76b9a5363555f3
[07/63] block/bfq: Use the new blk_opf_t type
        commit: dc469ba2e790cb0a335e2650b701639752ff65cd
[08/63] block/mq-deadline: Use the new blk_opf_t type
        commit: f8359efe4742a39b4ece554ab9d7e5f03c4fff83
[09/63] block/kyber: Use the new blk_opf_t type
        commit: d625fecd8af84ac669075caf1941ff0d1995de56
[10/63] blktrace: Trace remapped requests correctly
        commit: 22c80aac882f712897b88b7ea8f5a74ea19019df
[11/63] blktrace: Use the new blk_opf_t type
        commit: 919dbca8670d0f7828dfbb2f9b434ac22dca8d2e
[12/63] block/brd: Use the enum req_op type
        commit: ba91fd01aad28b2290a00518c4cd6eb728b4f06f
[13/63] block/drbd: Use the enum req_op and blk_opf_t types
        commit: 9945172a7120790fb8832cfec9557773f69e9d74
[14/63] block/drbd: Combine two drbd_submit_peer_request() arguments
        commit: 86563de87447ad9458fda9d1862c5ba333c8ab2e
[15/63] block/floppy: Fix a sparse warning
        commit: 23f8ae7148cc32287364741e32b20f37730114aa
[16/63] block/rnbd: Use blk_opf_t where appropriate
        commit: 03df83ac9eb77f749bfd84c7d448cb2b90c1196c
[17/63] xen-blkback: Use the enum req_op and blk_opf_t types
        commit: 6c5412e268340e0d98eade4571658bacb4652176
[18/63] block/zram: Use enum req_op where appropriate
        commit: bc0421ea44b82d2108bcf79e020498c5ff0000af
[19/63] nvdimm-btt: Use the enum req_op type
        commit: ba229aa8f2494bb76aa3f0c80e8a6c0023c829d7
[20/63] um: Use enum req_op where appropriate
        commit: 7ee1de6e2712efabe8e6cab8db5238ed13643dc1
[21/63] dm/core: Reduce the size of struct dm_io_request
        commit: 581075e4f6475bb97c73ecccf68636a9453a31fd
[22/63] dm/core: Rename kcopyd_job.rw into kcopyd.op
        commit: 71f7113d20ae1083e66ce3301f387362184cdd96
[23/63] dm/core: Combine request operation type and flags
        commit: a3282b432f64e9b88632bd380c90157673dce75b
[24/63] dm/ebs: Change 'int rw' into 'enum req_op op'
        commit: 67a7b9a5b54fa3a1b9e4ab5b9808198680cba082
[25/63] dm/dm-flakey: Use the new blk_opf_t type
        commit: eff17e5161feda42c64b1402e86724649927bcde
[26/63] dm/dm-integrity: Combine request operation and flags
        commit: c9154a4cb8dc6a1bca4158174fedecf98de7580d
[27/63] dm mirror log: Use the new blk_opf_t type
        commit: c1389b33332ee09e8981a21a8abb812d93ca253f
[28/63] dm-snap: Combine request operation type and flags
        commit: 6b9901395702c34c3ef0fe63573fcf69192244ea
[29/63] dm/zone: Use the enum req_op type
        commit: 8a5a7ce8774ce9d2fb52df6ecb0d234cf76811d1
[30/63] dm/dm-zoned: Use the enum req_op type
        commit: 13a1f650b6ec935834977461b87585f6387257b4
[31/63] md/core: Combine two sync_page_io() arguments
        commit: 4ce4c73f662bdb0ae5bfb058bc7ec6f6829ca078
[32/63] md/bcache: Combine two uuid_io() arguments
        commit: 9a4fd6a22c64cd7e5555d252ef6c5f2c6dce8ec2
[33/63] md/bcache: Combine two prio_io() arguments
        commit: 552eee3b53f661b76e354ab2ba71e2a625cb9722
[34/63] md/raid1: Use the new blk_opf_t type
        commit: 3c5e514db58fdca10ff5e08a5d2e8a4b077300e4
[35/63] md/raid10: Use the new blk_opf_t type
        commit: cb1802ff82e1ebbbafd860e5a73c26607d72dcd9
[36/63] md/raid5: Use the enum req_op and blk_opf_t types
        commit: a9010741ce7c9533fa825cc49f0739d4d8ebda48
[37/63] nvme/host: Use the enum req_op and blk_opf_t types
        commit: f9ed86dc1dc87662145d0327845fde1c6f3db6cd
[38/63] nvme/target: Use the new blk_opf_t type
        commit: a288000f9fe381a21693832275491b9c802921c4
[39/63] scsi/core: Improve static type checking
        commit: ea957547e819a21bd49895c6162f78d542867d39
[40/63] scsi/core: Change the return type of scsi_noretry_cmd() into bool
        commit: 88b32c3cdf5fff7ed5bdaec7493428185cc65b6e
[41/63] scsi/core: Use the new blk_opf_t type
        commit: 2599cac57a9af4e7ce628e2ef41e92797cba4ae2
[42/63] scsi/device_handlers: Use the new blk_opf_t type
        commit: c15cbe9a84b05462195102bcead0213eb068c595
[43/63] scsi/ufs: Rename a 'dir' argument into 'op'
        commit: 0d8009f39d0adb5b0415190f71841a88f14d9790
[44/63] scsi/target: Use the new blk_opf_t type
        commit: 79fe9d7d9f6479d3fe85d39813ec452844fac99a
[45/63] mm: Use the new blk_opf_t type
        commit: f8e6e4bd9fd8c452565f3eaeb358e3cc08d880f4
[46/63] fs/buffer: Use the new blk_opf_t type
        commit: 3ae7286943ae6f6bfecfe0a3da9d1a4c64f5531f
[47/63] fs/buffer: Combine two submit_bh() and ll_rw_block() arguments
        commit: 1420c4a549bf28ffddbed827d61fb3d4d2132ddb
[48/63] fs/direct-io: Reduce the size of struct dio
        commit: c6293eacfc16fe3d85f468fc7ed91eb18f5861d3
[49/63] fs/mpage: Use the new blk_opf_t type
        commit: f84c94afcf823c6c78438c56c9414763beec50d9
[50/63] fs/btrfs: Use the enum req_op and blk_opf_t types
        commit: bf9486d6dd2351f6cfff9a8df87657a1248a918d
[51/63] fs/ext4: Use the new blk_opf_t type
        commit: 67c0f556302cfcdb5b5fb7933afa08cb1de75b36
[52/63] fs/f2fs: Use the enum req_op and blk_opf_t types
        commit: 7649c873c16a384d447f7dbf9b153e333159f914
[53/63] fs/gfs2: Use the enum req_op and blk_opf_t types
        commit: 67688c08b7e5e9f8f945b22fb460a31ed3feb880
[54/63] fs/hfsplus: Use the enum req_op and blk_opf_t types
        commit: c85f99929ea66c357199b6a3fe958745e1190f5a
[55/63] fs/iomap: Use the new blk_opf_t type
        commit: dbd4eb8148f694ae300fe9682b505acf53053f6e
[56/63] fs/jbd2: Fix the documentation of the jbd2_write_superblock() callers
        commit: 6669797b0dd41ced457760b6e1014fdda8ce19ce
[57/63] fs/nfs: Use enum req_op where appropriate
        commit: 5d12ce77e1e677590de13468fe1a497388de3a9e
[58/63] fs/nilfs2: Use the enum req_op and blk_opf_t types
        commit: ed4512590bd5839f8ea9eef1626b0f4db626b1d1
[59/63] fs/ntfs3: Use enum req_op where appropriate
        commit: ce6b5315883448fbecfaca43b95d3bf2ed1d008c
[60/63] fs/ocfs2: Use the enum req_op and blk_opf_t types
        commit: 61ba06c7069bfe1d2b66ab474ce0d6b4f5419d64
[61/63] PM: Use the enum req_op and blk_opf_t types
        commit: 568e34ed7339e357f73c8e1ae5cc4f4595805357
[62/63] fs/xfs: Use the enum req_op and blk_opf_t types
        commit: d03025aef8676e826b69f8e3ec9bb59a5ad0c31d
[63/63] fs/zonefs: Use the enum req_op type for tracing request operations
        commit: e46b5970496705127f9ae494c66e0242773097e8

Best regards,