Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'for-5.20/block-2022-07-29' of git://git.kernel.dk/linux-block

Pull block updates from Jens Axboe:

- Improve the type checking of request flags (Bart)

- Ensure queue mapping for a single queues always picks the right queue
(Bart)

- Sanitize the io priority handling (Jan)

- rq-qos race fix (Jinke)

- Reserved tags handling improvements (John)

- Separate memory alignment from file/disk offset aligment for O_DIRECT
(Keith)

- Add new ublk driver, userspace block driver using io_uring for
communication with the userspace backend (Ming)

- Use try_cmpxchg() to cleanup the code in various spots (Uros)

- Finally remove bdevname() (Christoph)

- Clean up the zoned device handling (Christoph)

- Clean up independent access range support (Christoph)

- Clean up and improve block sysfs handling (Christoph)

- Clean up and improve teardown of block devices.

This turns the usual two step process into something that is simpler
to implement and handle in block drivers (Christoph)

- Clean up chunk size handling (Christoph)

- Misc cleanups and fixes (Bart, Bo, Dan, GuoYong, Jason, Keith, Liu,
Ming, Sebastian, Yang, Ying)

* tag 'for-5.20/block-2022-07-29' of git://git.kernel.dk/linux-block: (178 commits)
ublk_drv: fix double shift bug
ublk_drv: make sure that correct flags(features) returned to userspace
ublk_drv: fix error handling of ublk_add_dev
ublk_drv: fix lockdep warning
block: remove __blk_get_queue
block: call blk_mq_exit_queue from disk_release for never added disks
blk-mq: fix error handling in __blk_mq_alloc_disk
ublk: defer disk allocation
ublk: rewrite ublk_ctrl_get_queue_affinity to not rely on hctx->cpumask
ublk: fold __ublk_create_dev into ublk_ctrl_add_dev
ublk: cleanup ublk_ctrl_uring_cmd
ublk: simplify ublk_ch_open and ublk_ch_release
ublk: remove the empty open and release block device operations
ublk: remove UBLK_IO_F_PREFLUSH
ublk: add a MAINTAINERS entry
block: don't allow the same type rq_qos add more than once
mmc: fix disk/queue leak in case of adding disk failure
ublk_drv: fix an IS_ERR() vs NULL check
ublk: remove UBLK_IO_F_INTEGRITY
ublk_drv: remove unneeded semicolon
...

+3640 -2163
+9
Documentation/ABI/stable/sysfs-block
··· 260 260 for discards, and don't read this file. 261 261 262 262 263 + What: /sys/block/<disk>/queue/dma_alignment 264 + Date: May 2022 265 + Contact: linux-block@vger.kernel.org 266 + Description: 267 + Reports the alignment that user space addresses must have to be 268 + used for raw block device access with O_DIRECT and other driver 269 + specific passthrough mechanisms. 270 + 271 + 263 272 What: /sys/block/<disk>/queue/fua 264 273 Date: May 2018 265 274 Contact: linux-block@vger.kernel.org
+1 -2
Documentation/scsi/scsi_eh.rst
··· 87 87 1.2.2 Completing a scmd w/ timeout 88 88 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 89 89 90 - The timeout handler is scsi_times_out(). When a timeout occurs, this 91 - function 90 + The timeout handler is scsi_timeout(). When a timeout occurs, this function 92 91 93 92 1. invokes optional hostt->eh_timed_out() callback. Return value can 94 93 be one of
+1 -1
Documentation/scsi/scsi_mid_low_api.rst
··· 731 731 * Notes: If 'no_async_abort' is defined this callback 732 732 * will be invoked from scsi_eh thread. No other commands 733 733 * will then be queued on current host during eh. 734 - * Otherwise it will be called whenever scsi_times_out() 734 + * Otherwise it will be called whenever scsi_timeout() 735 735 * is called due to a command timeout. 736 736 * 737 737 * Optionally defined in: LLD
+7
MAINTAINERS
··· 20539 20539 F: Documentation/filesystems/ubifs.rst 20540 20540 F: fs/ubifs/ 20541 20541 20542 + UBLK USERSPACE BLOCK DRIVER 20543 + M: Ming Lei <ming.lei@redhat.com> 20544 + L: linux-block@vger.kernel.org 20545 + S: Maintained 20546 + F: drivers/block/ublk_drv.c 20547 + F: include/uapi/linux/ublk_cmd.h 20548 + 20542 20549 UCLINUX (M68KNOMMU AND COLDFIRE) 20543 20550 M: Greg Ungerer <gerg@linux-m68k.org> 20544 20551 L: linux-m68k@lists.linux-m68k.org
+2 -2
arch/m68k/emu/nfblock.c
··· 138 138 return 0; 139 139 140 140 out_cleanup_disk: 141 - blk_cleanup_disk(dev->disk); 141 + put_disk(dev->disk); 142 142 free_dev: 143 143 kfree(dev); 144 144 out: ··· 180 180 list_for_each_entry_safe(dev, next, &nfhd_list, list) { 181 181 list_del(&dev->list); 182 182 del_gendisk(dev->disk); 183 - blk_cleanup_disk(dev->disk); 183 + put_disk(dev->disk); 184 184 kfree(dev); 185 185 } 186 186 unregister_blkdev(major_num, "nfhd");
+4 -4
arch/um/drivers/ubd_kern.c
··· 925 925 return 0; 926 926 927 927 out_cleanup_disk: 928 - blk_cleanup_disk(disk); 928 + put_disk(disk); 929 929 out_cleanup_tags: 930 930 blk_mq_free_tag_set(&ubd_dev->tag_set); 931 931 out: ··· 1032 1032 ubd_gendisk[n] = NULL; 1033 1033 if(disk != NULL){ 1034 1034 del_gendisk(disk); 1035 - blk_cleanup_disk(disk); 1035 + put_disk(disk); 1036 1036 } 1037 1037 1038 1038 err = 0; ··· 1262 1262 struct req_iterator iter; 1263 1263 int i = 0; 1264 1264 unsigned long byte_offset = io_req->offset; 1265 - int op = req_op(req); 1265 + enum req_op op = req_op(req); 1266 1266 1267 1267 if (op == REQ_OP_WRITE_ZEROES || op == REQ_OP_DISCARD) { 1268 1268 io_req->io_desc[0].buffer = NULL; ··· 1325 1325 int segs = 0; 1326 1326 struct io_thread_req *io_req; 1327 1327 int ret; 1328 - int op = req_op(req); 1328 + enum req_op op = req_op(req); 1329 1329 1330 1330 if (op == REQ_OP_FLUSH) 1331 1331 segs = 0;
+2 -2
arch/xtensa/platforms/iss/simdisk.c
··· 290 290 return 0; 291 291 292 292 out_cleanup_disk: 293 - blk_cleanup_disk(dev->gd); 293 + put_disk(dev->gd); 294 294 out: 295 295 return err; 296 296 } ··· 344 344 simdisk_detach(dev); 345 345 if (dev->gd) { 346 346 del_gendisk(dev->gd); 347 - blk_cleanup_disk(dev->gd); 347 + put_disk(dev->gd); 348 348 } 349 349 remove_proc_entry(tmp, procdir); 350 350 }
-1
block/Kconfig
··· 147 147 config BLK_CGROUP_IOCOST 148 148 bool "Enable support for cost model based cgroup IO controller" 149 149 depends on BLK_CGROUP 150 - select BLK_RQ_IO_DATA_LEN 151 150 select BLK_RQ_ALLOC_TIME 152 151 help 153 152 Enabling this option enables the .weight interface for cost
+4 -6
block/bdev.c
··· 54 54 while (inode->i_state & I_DIRTY) { 55 55 spin_unlock(&inode->i_lock); 56 56 ret = write_inode_now(inode, true); 57 - if (ret) { 58 - char name[BDEVNAME_SIZE]; 59 - pr_warn_ratelimited("VFS: Dirty inode writeback failed " 60 - "for block device %s (err=%d).\n", 61 - bdevname(bdev, name), ret); 62 - } 57 + if (ret) 58 + pr_warn_ratelimited( 59 + "VFS: Dirty inode writeback failed for block device %pg (err=%d).\n", 60 + bdev, ret); 63 61 spin_lock(&inode->i_lock); 64 62 } 65 63 spin_unlock(&inode->i_lock);
+17 -17
block/bfq-cgroup.c
··· 220 220 } 221 221 222 222 void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq, 223 - unsigned int op) 223 + blk_opf_t opf) 224 224 { 225 - blkg_rwstat_add(&bfqg->stats.queued, op, 1); 225 + blkg_rwstat_add(&bfqg->stats.queued, opf, 1); 226 226 bfqg_stats_end_empty_time(&bfqg->stats); 227 227 if (!(bfqq == ((struct bfq_data *)bfqg->bfqd)->in_service_queue)) 228 228 bfqg_stats_set_start_group_wait_time(bfqg, bfqq_group(bfqq)); 229 229 } 230 230 231 - void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op) 231 + void bfqg_stats_update_io_remove(struct bfq_group *bfqg, blk_opf_t opf) 232 232 { 233 - blkg_rwstat_add(&bfqg->stats.queued, op, -1); 233 + blkg_rwstat_add(&bfqg->stats.queued, opf, -1); 234 234 } 235 235 236 - void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op) 236 + void bfqg_stats_update_io_merged(struct bfq_group *bfqg, blk_opf_t opf) 237 237 { 238 - blkg_rwstat_add(&bfqg->stats.merged, op, 1); 238 + blkg_rwstat_add(&bfqg->stats.merged, opf, 1); 239 239 } 240 240 241 241 void bfqg_stats_update_completion(struct bfq_group *bfqg, u64 start_time_ns, 242 - u64 io_start_time_ns, unsigned int op) 242 + u64 io_start_time_ns, blk_opf_t opf) 243 243 { 244 244 struct bfqg_stats *stats = &bfqg->stats; 245 245 u64 now = ktime_get_ns(); 246 246 247 247 if (now > io_start_time_ns) 248 - blkg_rwstat_add(&stats->service_time, op, 248 + blkg_rwstat_add(&stats->service_time, opf, 249 249 now - io_start_time_ns); 250 250 if (io_start_time_ns > start_time_ns) 251 - blkg_rwstat_add(&stats->wait_time, op, 251 + blkg_rwstat_add(&stats->wait_time, opf, 252 252 io_start_time_ns - start_time_ns); 253 253 } 254 254 255 255 #else /* CONFIG_BFQ_CGROUP_DEBUG */ 256 256 257 257 void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq, 258 - unsigned int op) { } 259 - void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op) { } 260 - void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op) { } 258 + blk_opf_t opf) { } 259 + void bfqg_stats_update_io_remove(struct bfq_group *bfqg, blk_opf_t opf) { } 260 + void bfqg_stats_update_io_merged(struct bfq_group *bfqg, blk_opf_t opf) { } 261 261 void bfqg_stats_update_completion(struct bfq_group *bfqg, u64 start_time_ns, 262 - u64 io_start_time_ns, unsigned int op) { } 262 + u64 io_start_time_ns, blk_opf_t opf) { } 263 263 void bfqg_stats_update_dequeue(struct bfq_group *bfqg) { } 264 264 void bfqg_stats_set_start_empty_time(struct bfq_group *bfqg) { } 265 265 void bfqg_stats_update_idle_time(struct bfq_group *bfqg) { } ··· 706 706 } 707 707 708 708 /** 709 - * __bfq_bic_change_cgroup - move @bic to @cgroup. 709 + * __bfq_bic_change_cgroup - move @bic to @bfqg. 710 710 * @bfqd: the queue descriptor. 711 711 * @bic: the bic to move. 712 - * @blkcg: the blk-cgroup to move to. 712 + * @bfqg: the group to move to. 713 713 * 714 714 * Move bic to blkcg, assuming that bfqd->lock is held; which makes 715 715 * sure that the reference to cgroup is valid across the call (see ··· 863 863 * @bfqd: the device data structure with the root group. 864 864 * @entity: the entity to move, if entity is a leaf; or the parent entity 865 865 * of an active leaf entity to move, if entity is not a leaf. 866 + * @ioprio_class: I/O priority class to reparent. 866 867 */ 867 868 static void bfq_reparent_leaf_entity(struct bfq_data *bfqd, 868 869 struct bfq_entity *entity, ··· 893 892 * @bfqd: the device data structure with the root group. 894 893 * @bfqg: the group to move from. 895 894 * @st: the service tree to start the search from. 895 + * @ioprio_class: I/O priority class to reparent. 896 896 */ 897 897 static void bfq_reparent_active_queues(struct bfq_data *bfqd, 898 898 struct bfq_group *bfqg, ··· 1472 1470 { 1473 1471 return bfqq->bfqd->root_group; 1474 1472 } 1475 - 1476 - void bfqg_and_blkg_get(struct bfq_group *bfqg) {} 1477 1473 1478 1474 void bfqg_and_blkg_put(struct bfq_group *bfqg) {} 1479 1475
+8 -8
block/bfq-iosched.c
··· 668 668 * significantly affect service guarantees coming from the BFQ scheduling 669 669 * algorithm. 670 670 */ 671 - static void bfq_limit_depth(unsigned int op, struct blk_mq_alloc_data *data) 671 + static void bfq_limit_depth(blk_opf_t opf, struct blk_mq_alloc_data *data) 672 672 { 673 673 struct bfq_data *bfqd = data->q->elevator->elevator_data; 674 674 struct bfq_io_cq *bic = bfq_bic_lookup(data->q); 675 - struct bfq_queue *bfqq = bic ? bic_to_bfqq(bic, op_is_sync(op)) : NULL; 675 + struct bfq_queue *bfqq = bic ? bic_to_bfqq(bic, op_is_sync(opf)) : NULL; 676 676 int depth; 677 677 unsigned limit = data->q->nr_requests; 678 678 679 679 /* Sync reads have full depth available */ 680 - if (op_is_sync(op) && !op_is_write(op)) { 680 + if (op_is_sync(opf) && !op_is_write(opf)) { 681 681 depth = 0; 682 682 } else { 683 - depth = bfqd->word_depths[!!bfqd->wr_busy_queues][op_is_sync(op)]; 683 + depth = bfqd->word_depths[!!bfqd->wr_busy_queues][op_is_sync(opf)]; 684 684 limit = (limit * depth) >> bfqd->full_depth_shift; 685 685 } 686 686 ··· 693 693 depth = 1; 694 694 695 695 bfq_log(bfqd, "[%s] wr_busy %d sync %d depth %u", 696 - __func__, bfqd->wr_busy_queues, op_is_sync(op), depth); 696 + __func__, bfqd->wr_busy_queues, op_is_sync(opf), depth); 697 697 if (depth) 698 698 data->shallow_depth = depth; 699 699 } ··· 6104 6104 static void bfq_update_insert_stats(struct request_queue *q, 6105 6105 struct bfq_queue *bfqq, 6106 6106 bool idle_timer_disabled, 6107 - unsigned int cmd_flags) 6107 + blk_opf_t cmd_flags) 6108 6108 { 6109 6109 if (!bfqq) 6110 6110 return; ··· 6129 6129 static inline void bfq_update_insert_stats(struct request_queue *q, 6130 6130 struct bfq_queue *bfqq, 6131 6131 bool idle_timer_disabled, 6132 - unsigned int cmd_flags) {} 6132 + blk_opf_t cmd_flags) {} 6133 6133 #endif /* CONFIG_BFQ_CGROUP_DEBUG */ 6134 6134 6135 6135 static struct bfq_queue *bfq_init_rq(struct request *rq); ··· 6141 6141 struct bfq_data *bfqd = q->elevator->elevator_data; 6142 6142 struct bfq_queue *bfqq; 6143 6143 bool idle_timer_disabled = false; 6144 - unsigned int cmd_flags; 6144 + blk_opf_t cmd_flags; 6145 6145 LIST_HEAD(free); 6146 6146 6147 6147 #ifdef CONFIG_BFQ_GROUP_IOSCHED
+4 -4
block/bfq-iosched.h
··· 994 994 995 995 void bfqg_stats_update_legacy_io(struct request_queue *q, struct request *rq); 996 996 void bfqg_stats_update_io_add(struct bfq_group *bfqg, struct bfq_queue *bfqq, 997 - unsigned int op); 998 - void bfqg_stats_update_io_remove(struct bfq_group *bfqg, unsigned int op); 999 - void bfqg_stats_update_io_merged(struct bfq_group *bfqg, unsigned int op); 997 + blk_opf_t opf); 998 + void bfqg_stats_update_io_remove(struct bfq_group *bfqg, blk_opf_t opf); 999 + void bfqg_stats_update_io_merged(struct bfq_group *bfqg, blk_opf_t opf); 1000 1000 void bfqg_stats_update_completion(struct bfq_group *bfqg, u64 start_time_ns, 1001 - u64 io_start_time_ns, unsigned int op); 1001 + u64 io_start_time_ns, blk_opf_t opf); 1002 1002 void bfqg_stats_update_dequeue(struct bfq_group *bfqg); 1003 1003 void bfqg_stats_set_start_empty_time(struct bfq_group *bfqg); 1004 1004 void bfqg_stats_update_idle_time(struct bfq_group *bfqg);
+2 -3
block/bfq-wf2q.c
··· 1360 1360 /** 1361 1361 * __bfq_lookup_next_entity - return the first eligible entity in @st. 1362 1362 * @st: the service tree. 1363 + * @in_service: whether or not there is an in-service entity for the sched_data 1364 + * this active tree belongs to. 1363 1365 * 1364 1366 * If there is no in-service entity for the sched_data st belongs to, 1365 1367 * then return the entity that will be set in service if: ··· 1473 1471 if (entity) 1474 1472 break; 1475 1473 } 1476 - 1477 - if (!entity) 1478 - return NULL; 1479 1474 1480 1475 return entity; 1481 1476 }
+58 -70
block/bio.c
··· 239 239 * when IO has completed, or when the bio is released. 240 240 */ 241 241 void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table, 242 - unsigned short max_vecs, unsigned int opf) 242 + unsigned short max_vecs, blk_opf_t opf) 243 243 { 244 244 bio->bi_next = NULL; 245 245 bio->bi_bdev = bdev; ··· 292 292 * preserved are the ones that are initialized by bio_alloc_bioset(). See 293 293 * comment in struct bio. 294 294 */ 295 - void bio_reset(struct bio *bio, struct block_device *bdev, unsigned int opf) 295 + void bio_reset(struct bio *bio, struct block_device *bdev, blk_opf_t opf) 296 296 { 297 297 bio_uninit(bio); 298 298 memset(bio, 0, BIO_RESET_BYTES); ··· 341 341 EXPORT_SYMBOL(bio_chain); 342 342 343 343 struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev, 344 - unsigned int nr_pages, unsigned int opf, gfp_t gfp) 344 + unsigned int nr_pages, blk_opf_t opf, gfp_t gfp) 345 345 { 346 346 struct bio *new = bio_alloc(bdev, nr_pages, opf, gfp); 347 347 ··· 409 409 } 410 410 411 411 static struct bio *bio_alloc_percpu_cache(struct block_device *bdev, 412 - unsigned short nr_vecs, unsigned int opf, gfp_t gfp, 412 + unsigned short nr_vecs, blk_opf_t opf, gfp_t gfp, 413 413 struct bio_set *bs) 414 414 { 415 415 struct bio_alloc_cache *cache; ··· 468 468 * Returns: Pointer to new bio on success, NULL on failure. 469 469 */ 470 470 struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned short nr_vecs, 471 - unsigned int opf, gfp_t gfp_mask, 471 + blk_opf_t opf, gfp_t gfp_mask, 472 472 struct bio_set *bs) 473 473 { 474 474 gfp_t saved_gfp = gfp_mask; ··· 1033 1033 if (WARN_ON_ONCE(bio_op(bio) != REQ_OP_ZONE_APPEND)) 1034 1034 return 0; 1035 1035 1036 - if (WARN_ON_ONCE(!blk_queue_is_zoned(q))) 1036 + if (WARN_ON_ONCE(!bdev_is_zoned(bio->bi_bdev))) 1037 1037 return 0; 1038 1038 1039 1039 return bio_add_hw_page(q, bio, page, len, offset, ··· 1159 1159 put_page(pages[i]); 1160 1160 } 1161 1161 1162 + static int bio_iov_add_page(struct bio *bio, struct page *page, 1163 + unsigned int len, unsigned int offset) 1164 + { 1165 + bool same_page = false; 1166 + 1167 + if (!__bio_try_merge_page(bio, page, len, offset, &same_page)) { 1168 + if (WARN_ON_ONCE(bio_full(bio, len))) 1169 + return -EINVAL; 1170 + __bio_add_page(bio, page, len, offset); 1171 + return 0; 1172 + } 1173 + 1174 + if (same_page) 1175 + put_page(page); 1176 + return 0; 1177 + } 1178 + 1179 + static int bio_iov_add_zone_append_page(struct bio *bio, struct page *page, 1180 + unsigned int len, unsigned int offset) 1181 + { 1182 + struct request_queue *q = bdev_get_queue(bio->bi_bdev); 1183 + bool same_page = false; 1184 + 1185 + if (bio_add_hw_page(q, bio, page, len, offset, 1186 + queue_max_zone_append_sectors(q), &same_page) != len) 1187 + return -EINVAL; 1188 + if (same_page) 1189 + put_page(page); 1190 + return 0; 1191 + } 1192 + 1162 1193 #define PAGE_PTRS_PER_BVEC (sizeof(struct bio_vec) / sizeof(struct page *)) 1163 1194 1164 1195 /** ··· 1208 1177 unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt; 1209 1178 struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt; 1210 1179 struct page **pages = (struct page **)bv; 1211 - bool same_page = false; 1212 1180 ssize_t size, left; 1213 1181 unsigned len, i; 1214 1182 size_t offset; 1215 - 1216 - /* 1217 - * Move page array up in the allocated memory for the bio vecs as far as 1218 - * possible so that we can start filling biovecs from the beginning 1219 - * without overwriting the temporary page array. 1220 - */ 1221 - BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2); 1222 - pages += entries_left * (PAGE_PTRS_PER_BVEC - 1); 1223 - 1224 - size = iov_iter_get_pages(iter, pages, LONG_MAX, nr_pages, &offset); 1225 - if (unlikely(size <= 0)) 1226 - return size ? size : -EFAULT; 1227 - 1228 - for (left = size, i = 0; left > 0; left -= len, i++) { 1229 - struct page *page = pages[i]; 1230 - 1231 - len = min_t(size_t, PAGE_SIZE - offset, left); 1232 - 1233 - if (__bio_try_merge_page(bio, page, len, offset, &same_page)) { 1234 - if (same_page) 1235 - put_page(page); 1236 - } else { 1237 - if (WARN_ON_ONCE(bio_full(bio, len))) { 1238 - bio_put_pages(pages + i, left, offset); 1239 - return -EINVAL; 1240 - } 1241 - __bio_add_page(bio, page, len, offset); 1242 - } 1243 - offset = 0; 1244 - } 1245 - 1246 - iov_iter_advance(iter, size); 1247 - return 0; 1248 - } 1249 - 1250 - static int __bio_iov_append_get_pages(struct bio *bio, struct iov_iter *iter) 1251 - { 1252 - unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt; 1253 - unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt; 1254 - struct request_queue *q = bdev_get_queue(bio->bi_bdev); 1255 - unsigned int max_append_sectors = queue_max_zone_append_sectors(q); 1256 - struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt; 1257 - struct page **pages = (struct page **)bv; 1258 - ssize_t size, left; 1259 - unsigned len, i; 1260 - size_t offset; 1261 - int ret = 0; 1262 - 1263 - if (WARN_ON_ONCE(!max_append_sectors)) 1264 - return 0; 1265 1183 1266 1184 /* 1267 1185 * Move page array up in the allocated memory for the bio vecs as far as ··· 1220 1240 BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2); 1221 1241 pages += entries_left * (PAGE_PTRS_PER_BVEC - 1); 1222 1242 1243 + /* 1244 + * Each segment in the iov is required to be a block size multiple. 1245 + * However, we may not be able to get the entire segment if it spans 1246 + * more pages than bi_max_vecs allows, so we have to ALIGN_DOWN the 1247 + * result to ensure the bio's total size is correct. The remainder of 1248 + * the iov data will be picked up in the next bio iteration. 1249 + */ 1223 1250 size = iov_iter_get_pages(iter, pages, LONG_MAX, nr_pages, &offset); 1251 + if (size > 0) 1252 + size = ALIGN_DOWN(size, bdev_logical_block_size(bio->bi_bdev)); 1224 1253 if (unlikely(size <= 0)) 1225 1254 return size ? size : -EFAULT; 1226 1255 1227 1256 for (left = size, i = 0; left > 0; left -= len, i++) { 1228 1257 struct page *page = pages[i]; 1229 - bool same_page = false; 1258 + int ret; 1230 1259 1231 1260 len = min_t(size_t, PAGE_SIZE - offset, left); 1232 - if (bio_add_hw_page(q, bio, page, len, offset, 1233 - max_append_sectors, &same_page) != len) { 1261 + if (bio_op(bio) == REQ_OP_ZONE_APPEND) 1262 + ret = bio_iov_add_zone_append_page(bio, page, len, 1263 + offset); 1264 + else 1265 + ret = bio_iov_add_page(bio, page, len, offset); 1266 + 1267 + if (ret) { 1234 1268 bio_put_pages(pages + i, left, offset); 1235 - ret = -EINVAL; 1236 - break; 1269 + return ret; 1237 1270 } 1238 - if (same_page) 1239 - put_page(page); 1240 1271 offset = 0; 1241 1272 } 1242 1273 1243 - iov_iter_advance(iter, size - left); 1244 - return ret; 1274 + iov_iter_advance(iter, size); 1275 + return 0; 1245 1276 } 1246 1277 1247 1278 /** ··· 1289 1298 } 1290 1299 1291 1300 do { 1292 - if (bio_op(bio) == REQ_OP_ZONE_APPEND) 1293 - ret = __bio_iov_append_get_pages(bio, iter); 1294 - else 1295 - ret = __bio_iov_iter_get_pages(bio, iter); 1301 + ret = __bio_iov_iter_get_pages(bio, iter); 1296 1302 } while (!ret && iov_iter_count(iter) && !bio_full(bio, 0)); 1297 1303 1298 1304 /* don't account direct I/O as memory stall */
+4 -4
block/blk-cgroup-rwstat.h
··· 59 59 * caller is responsible for synchronizing calls to this function. 60 60 */ 61 61 static inline void blkg_rwstat_add(struct blkg_rwstat *rwstat, 62 - unsigned int op, uint64_t val) 62 + blk_opf_t opf, uint64_t val) 63 63 { 64 64 struct percpu_counter *cnt; 65 65 66 - if (op_is_discard(op)) 66 + if (op_is_discard(opf)) 67 67 cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_DISCARD]; 68 - else if (op_is_write(op)) 68 + else if (op_is_write(opf)) 69 69 cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_WRITE]; 70 70 else 71 71 cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_READ]; 72 72 73 73 percpu_counter_add_batch(cnt, val, BLKG_STAT_CPU_BATCH); 74 74 75 - if (op_is_sync(op)) 75 + if (op_is_sync(opf)) 76 76 cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_SYNC]; 77 77 else 78 78 cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_ASYNC];
+40 -36
block/blk-cgroup.c
··· 846 846 } 847 847 } 848 848 849 + static void blkcg_iostat_update(struct blkcg_gq *blkg, struct blkg_iostat *cur, 850 + struct blkg_iostat *last) 851 + { 852 + struct blkg_iostat delta; 853 + unsigned long flags; 854 + 855 + /* propagate percpu delta to global */ 856 + flags = u64_stats_update_begin_irqsave(&blkg->iostat.sync); 857 + blkg_iostat_set(&delta, cur); 858 + blkg_iostat_sub(&delta, last); 859 + blkg_iostat_add(&blkg->iostat.cur, &delta); 860 + blkg_iostat_add(last, &delta); 861 + u64_stats_update_end_irqrestore(&blkg->iostat.sync, flags); 862 + } 863 + 849 864 static void blkcg_rstat_flush(struct cgroup_subsys_state *css, int cpu) 850 865 { 851 866 struct blkcg *blkcg = css_to_blkcg(css); ··· 875 860 hlist_for_each_entry_rcu(blkg, &blkcg->blkg_list, blkcg_node) { 876 861 struct blkcg_gq *parent = blkg->parent; 877 862 struct blkg_iostat_set *bisc = per_cpu_ptr(blkg->iostat_cpu, cpu); 878 - struct blkg_iostat cur, delta; 879 - unsigned long flags; 863 + struct blkg_iostat cur; 880 864 unsigned int seq; 881 865 882 866 /* fetch the current per-cpu values */ ··· 884 870 blkg_iostat_set(&cur, &bisc->cur); 885 871 } while (u64_stats_fetch_retry(&bisc->sync, seq)); 886 872 887 - /* propagate percpu delta to global */ 888 - flags = u64_stats_update_begin_irqsave(&blkg->iostat.sync); 889 - blkg_iostat_set(&delta, &cur); 890 - blkg_iostat_sub(&delta, &bisc->last); 891 - blkg_iostat_add(&blkg->iostat.cur, &delta); 892 - blkg_iostat_add(&bisc->last, &delta); 893 - u64_stats_update_end_irqrestore(&blkg->iostat.sync, flags); 873 + blkcg_iostat_update(blkg, &cur, &bisc->last); 894 874 895 875 /* propagate global delta to parent (unless that's root) */ 896 - if (parent && parent->parent) { 897 - flags = u64_stats_update_begin_irqsave(&parent->iostat.sync); 898 - blkg_iostat_set(&delta, &blkg->iostat.cur); 899 - blkg_iostat_sub(&delta, &blkg->iostat.last); 900 - blkg_iostat_add(&parent->iostat.cur, &delta); 901 - blkg_iostat_add(&blkg->iostat.last, &delta); 902 - u64_stats_update_end_irqrestore(&parent->iostat.sync, flags); 903 - } 876 + if (parent && parent->parent) 877 + blkcg_iostat_update(parent, &blkg->iostat.cur, 878 + &blkg->iostat.last); 904 879 } 905 880 906 881 rcu_read_unlock(); ··· 1302 1299 ret = blk_iolatency_init(q); 1303 1300 if (ret) { 1304 1301 blk_throtl_exit(q); 1302 + blk_ioprio_exit(q); 1305 1303 goto err_destroy_all; 1306 1304 } 1307 1305 ··· 1533 1529 } 1534 1530 EXPORT_SYMBOL_GPL(blkcg_deactivate_policy); 1535 1531 1532 + static void blkcg_free_all_cpd(struct blkcg_policy *pol) 1533 + { 1534 + struct blkcg *blkcg; 1535 + 1536 + list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1537 + if (blkcg->cpd[pol->plid]) { 1538 + pol->cpd_free_fn(blkcg->cpd[pol->plid]); 1539 + blkcg->cpd[pol->plid] = NULL; 1540 + } 1541 + } 1542 + } 1543 + 1536 1544 /** 1537 1545 * blkcg_policy_register - register a blkcg policy 1538 1546 * @pol: blkcg policy to register ··· 1609 1593 return 0; 1610 1594 1611 1595 err_free_cpds: 1612 - if (pol->cpd_free_fn) { 1613 - list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1614 - if (blkcg->cpd[pol->plid]) { 1615 - pol->cpd_free_fn(blkcg->cpd[pol->plid]); 1616 - blkcg->cpd[pol->plid] = NULL; 1617 - } 1618 - } 1619 - } 1596 + if (pol->cpd_free_fn) 1597 + blkcg_free_all_cpd(pol); 1598 + 1620 1599 blkcg_policy[pol->plid] = NULL; 1621 1600 err_unlock: 1622 1601 mutex_unlock(&blkcg_pol_mutex); ··· 1628 1617 */ 1629 1618 void blkcg_policy_unregister(struct blkcg_policy *pol) 1630 1619 { 1631 - struct blkcg *blkcg; 1632 - 1633 1620 mutex_lock(&blkcg_pol_register_mutex); 1634 1621 1635 1622 if (WARN_ON(blkcg_policy[pol->plid] != pol)) ··· 1642 1633 /* remove cpds and unregister */ 1643 1634 mutex_lock(&blkcg_pol_mutex); 1644 1635 1645 - if (pol->cpd_free_fn) { 1646 - list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1647 - if (blkcg->cpd[pol->plid]) { 1648 - pol->cpd_free_fn(blkcg->cpd[pol->plid]); 1649 - blkcg->cpd[pol->plid] = NULL; 1650 - } 1651 - } 1652 - } 1636 + if (pol->cpd_free_fn) 1637 + blkcg_free_all_cpd(pol); 1638 + 1653 1639 blkcg_policy[pol->plid] = NULL; 1654 1640 1655 1641 mutex_unlock(&blkcg_pol_mutex); ··· 1700 1696 * everybody is happy with their IO latencies. 1701 1697 */ 1702 1698 if (time_before64(old + NSEC_PER_SEC, now) && 1703 - atomic64_cmpxchg(&blkg->delay_start, old, now) == old) { 1699 + atomic64_try_cmpxchg(&blkg->delay_start, &old, now)) { 1704 1700 u64 cur = atomic64_read(&blkg->delay_nsec); 1705 1701 u64 sub = min_t(u64, blkg->last_delay, now - old); 1706 1702 int cur_use = atomic_read(&blkg->use_delay);
+4 -8
block/blk-cgroup.h
··· 430 430 * then check to see if we were the last delay so we can drop the 431 431 * congestion count on the cgroup. 432 432 */ 433 - while (old) { 434 - int cur = atomic_cmpxchg(&blkg->use_delay, old, old - 1); 435 - if (cur == old) 436 - break; 437 - old = cur; 438 - } 433 + while (old && !atomic_try_cmpxchg(&blkg->use_delay, &old, old - 1)) 434 + ; 439 435 440 436 if (old == 0) 441 437 return 0; ··· 454 458 int old = atomic_read(&blkg->use_delay); 455 459 456 460 /* We only want 1 person setting the congestion count for this blkg. */ 457 - if (!old && atomic_cmpxchg(&blkg->use_delay, old, -1) == old) 461 + if (!old && atomic_try_cmpxchg(&blkg->use_delay, &old, -1)) 458 462 atomic_inc(&blkg->blkcg->css.cgroup->congestion_count); 459 463 460 464 atomic64_set(&blkg->delay_nsec, delay); ··· 471 475 int old = atomic_read(&blkg->use_delay); 472 476 473 477 /* We only want 1 person clearing the congestion count for this blkg. */ 474 - if (old && atomic_cmpxchg(&blkg->use_delay, old, 0) == old) 478 + if (old && atomic_try_cmpxchg(&blkg->use_delay, &old, 0)) 475 479 atomic_dec(&blkg->blkcg->css.cgroup->congestion_count); 476 480 } 477 481
+17 -63
block/blk-core.c
··· 136 136 * string format. Useful in the debugging and tracing bio or request. For 137 137 * invalid REQ_OP_XXX it returns string "UNKNOWN". 138 138 */ 139 - inline const char *blk_op_str(unsigned int op) 139 + inline const char *blk_op_str(enum req_op op) 140 140 { 141 141 const char *op_str = "UNKNOWN"; 142 142 ··· 285 285 } 286 286 287 287 /** 288 - * blk_cleanup_queue - shutdown a request queue 289 - * @q: request queue to shutdown 290 - * 291 - * Mark @q DYING, drain all pending requests, mark @q DEAD, destroy and 292 - * put it. All future requests will be failed immediately with -ENODEV. 293 - * 294 - * Context: can sleep 295 - */ 296 - void blk_cleanup_queue(struct request_queue *q) 297 - { 298 - /* cannot be called from atomic context */ 299 - might_sleep(); 300 - 301 - WARN_ON_ONCE(blk_queue_registered(q)); 302 - 303 - /* mark @q DYING, no new request or merges will be allowed afterwards */ 304 - blk_queue_flag_set(QUEUE_FLAG_DYING, q); 305 - blk_queue_start_drain(q); 306 - 307 - blk_queue_flag_set(QUEUE_FLAG_NOMERGES, q); 308 - blk_queue_flag_set(QUEUE_FLAG_NOXMERGES, q); 309 - 310 - /* 311 - * Drain all requests queued before DYING marking. Set DEAD flag to 312 - * prevent that blk_mq_run_hw_queues() accesses the hardware queues 313 - * after draining finished. 314 - */ 315 - blk_freeze_queue(q); 316 - 317 - blk_queue_flag_set(QUEUE_FLAG_DEAD, q); 318 - 319 - blk_sync_queue(q); 320 - if (queue_is_mq(q)) { 321 - blk_mq_cancel_work_sync(q); 322 - blk_mq_exit_queue(q); 323 - } 324 - 325 - /* @q is and will stay empty, shutdown and put */ 326 - blk_put_queue(q); 327 - } 328 - EXPORT_SYMBOL(blk_cleanup_queue); 329 - 330 - /** 331 288 * blk_queue_enter() - try to increase q->q_usage_counter 332 289 * @q: request queue pointer 333 290 * @flags: BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM ··· 392 435 393 436 q->last_merge = NULL; 394 437 395 - q->id = ida_simple_get(&blk_queue_ida, 0, 0, GFP_KERNEL); 438 + q->id = ida_alloc(&blk_queue_ida, GFP_KERNEL); 396 439 if (q->id < 0) 397 440 goto fail_srcu; 398 441 ··· 442 485 fail_split: 443 486 bioset_exit(&q->bio_split); 444 487 fail_id: 445 - ida_simple_remove(&blk_queue_ida, q->id); 488 + ida_free(&blk_queue_ida, q->id); 446 489 fail_srcu: 447 490 if (alloc_srcu) 448 491 cleanup_srcu_struct(q->srcu); ··· 461 504 */ 462 505 bool blk_get_queue(struct request_queue *q) 463 506 { 464 - if (likely(!blk_queue_dying(q))) { 465 - __blk_get_queue(q); 466 - return true; 467 - } 468 - 469 - return false; 507 + if (unlikely(blk_queue_dying(q))) 508 + return false; 509 + kobject_get(&q->kobj); 510 + return true; 470 511 } 471 512 EXPORT_SYMBOL(blk_get_queue); 472 513 ··· 563 608 static inline blk_status_t blk_check_zone_append(struct request_queue *q, 564 609 struct bio *bio) 565 610 { 566 - sector_t pos = bio->bi_iter.bi_sector; 567 611 int nr_sectors = bio_sectors(bio); 568 612 569 613 /* Only applicable to zoned block devices */ 570 - if (!blk_queue_is_zoned(q)) 614 + if (!bdev_is_zoned(bio->bi_bdev)) 571 615 return BLK_STS_NOTSUPP; 572 616 573 617 /* The bio sector must point to the start of a sequential zone */ 574 - if (pos & (blk_queue_zone_sectors(q) - 1) || 575 - !blk_queue_zone_is_seq(q, pos)) 618 + if (bio->bi_iter.bi_sector & (bdev_zone_sectors(bio->bi_bdev) - 1) || 619 + !bio_zone_is_seq(bio)) 576 620 return BLK_STS_IOERR; 577 621 578 622 /* ··· 716 762 717 763 might_sleep(); 718 764 719 - plug = blk_mq_plug(q, bio); 765 + plug = blk_mq_plug(bio); 720 766 if (plug && plug->nowait) 721 767 bio->bi_opf |= REQ_NOWAIT; 722 768 ··· 772 818 case REQ_OP_ZONE_OPEN: 773 819 case REQ_OP_ZONE_CLOSE: 774 820 case REQ_OP_ZONE_FINISH: 775 - if (!blk_queue_is_zoned(q)) 821 + if (!bdev_is_zoned(bio->bi_bdev)) 776 822 goto not_supported; 777 823 break; 778 824 case REQ_OP_ZONE_RESET_ALL: 779 - if (!blk_queue_is_zoned(q) || !blk_queue_zone_resetall(q)) 825 + if (!bdev_is_zoned(bio->bi_bdev) || !blk_queue_zone_resetall(q)) 780 826 goto not_supported; 781 827 break; 782 828 case REQ_OP_WRITE_ZEROES: ··· 941 987 again: 942 988 stamp = READ_ONCE(part->bd_stamp); 943 989 if (unlikely(time_after(now, stamp))) { 944 - if (likely(cmpxchg(&part->bd_stamp, stamp, now) == stamp)) 990 + if (likely(try_cmpxchg(&part->bd_stamp, &stamp, now))) 945 991 __part_stat_add(part, io_ticks, end ? now - stamp : 1); 946 992 } 947 993 if (part->bd_partno) { ··· 951 997 } 952 998 953 999 unsigned long bdev_start_io_acct(struct block_device *bdev, 954 - unsigned int sectors, unsigned int op, 1000 + unsigned int sectors, enum req_op op, 955 1001 unsigned long start_time) 956 1002 { 957 1003 const int sgrp = op_stat_group(op); ··· 992 1038 } 993 1039 EXPORT_SYMBOL_GPL(bio_start_io_acct); 994 1040 995 - void bdev_end_io_acct(struct block_device *bdev, unsigned int op, 1041 + void bdev_end_io_acct(struct block_device *bdev, enum req_op op, 996 1042 unsigned long start_time) 997 1043 { 998 1044 const int sgrp = op_stat_group(op); ··· 1201 1247 1202 1248 int __init blk_dev_init(void) 1203 1249 { 1204 - BUILD_BUG_ON(REQ_OP_LAST >= (1 << REQ_OP_BITS)); 1250 + BUILD_BUG_ON((__force u32)REQ_OP_LAST >= (1 << REQ_OP_BITS)); 1205 1251 BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 * 1206 1252 sizeof_field(struct request, cmd_flags)); 1207 1253 BUILD_BUG_ON(REQ_OP_BITS + REQ_FLAG_BITS > 8 *
+3 -3
block/blk-flush.c
··· 94 94 }; 95 95 96 96 static void blk_kick_flush(struct request_queue *q, 97 - struct blk_flush_queue *fq, unsigned int flags); 97 + struct blk_flush_queue *fq, blk_opf_t flags); 98 98 99 99 static inline struct blk_flush_queue * 100 100 blk_get_flush_queue(struct request_queue *q, struct blk_mq_ctx *ctx) ··· 173 173 { 174 174 struct request_queue *q = rq->q; 175 175 struct list_head *pending = &fq->flush_queue[fq->flush_pending_idx]; 176 - unsigned int cmd_flags; 176 + blk_opf_t cmd_flags; 177 177 178 178 BUG_ON(rq->flush.seq & seq); 179 179 rq->flush.seq |= seq; ··· 290 290 * 291 291 */ 292 292 static void blk_kick_flush(struct request_queue *q, struct blk_flush_queue *fq, 293 - unsigned int flags) 293 + blk_opf_t flags) 294 294 { 295 295 struct list_head *pending = &fq->flush_queue[fq->flush_pending_idx]; 296 296 struct request *first_rq =
+20 -45
block/blk-ia-ranges.c
··· 102 102 * disk_register_independent_access_ranges - register with sysfs a set of 103 103 * independent access ranges 104 104 * @disk: Target disk 105 - * @new_iars: New set of independent access ranges 106 105 * 107 106 * Register with sysfs a set of independent access ranges for @disk. 108 - * If @new_iars is not NULL, this set of ranges is registered and the old set 109 - * specified by q->ia_ranges is unregistered. Otherwise, q->ia_ranges is 110 - * registered if it is not already. 111 107 */ 112 - int disk_register_independent_access_ranges(struct gendisk *disk, 113 - struct blk_independent_access_ranges *new_iars) 108 + int disk_register_independent_access_ranges(struct gendisk *disk) 114 109 { 110 + struct blk_independent_access_ranges *iars = disk->ia_ranges; 115 111 struct request_queue *q = disk->queue; 116 - struct blk_independent_access_ranges *iars; 117 112 int i, ret; 118 113 119 114 lockdep_assert_held(&q->sysfs_dir_lock); 120 115 lockdep_assert_held(&q->sysfs_lock); 121 116 122 - /* If a new range set is specified, unregister the old one */ 123 - if (new_iars) { 124 - if (q->ia_ranges) 125 - disk_unregister_independent_access_ranges(disk); 126 - q->ia_ranges = new_iars; 127 - } 128 - 129 - iars = q->ia_ranges; 130 117 if (!iars) 131 118 return 0; 132 119 ··· 125 138 ret = kobject_init_and_add(&iars->kobj, &blk_ia_ranges_ktype, 126 139 &q->kobj, "%s", "independent_access_ranges"); 127 140 if (ret) { 128 - q->ia_ranges = NULL; 141 + disk->ia_ranges = NULL; 129 142 kobject_put(&iars->kobj); 130 143 return ret; 131 144 } ··· 151 164 void disk_unregister_independent_access_ranges(struct gendisk *disk) 152 165 { 153 166 struct request_queue *q = disk->queue; 154 - struct blk_independent_access_ranges *iars = q->ia_ranges; 167 + struct blk_independent_access_ranges *iars = disk->ia_ranges; 155 168 int i; 156 169 157 170 lockdep_assert_held(&q->sysfs_dir_lock); ··· 169 182 kfree(iars); 170 183 } 171 184 172 - q->ia_ranges = NULL; 185 + disk->ia_ranges = NULL; 173 186 } 174 187 175 188 static struct blk_independent_access_range * ··· 196 209 sector_t capacity = get_capacity(disk); 197 210 sector_t sector = 0; 198 211 int i; 212 + 213 + if (WARN_ON_ONCE(!iars->nr_ia_ranges)) 214 + return false; 199 215 200 216 /* 201 217 * While sorting the ranges in increasing LBA order, check that the ··· 232 242 static bool disk_ia_ranges_changed(struct gendisk *disk, 233 243 struct blk_independent_access_ranges *new) 234 244 { 235 - struct blk_independent_access_ranges *old = disk->queue->ia_ranges; 245 + struct blk_independent_access_ranges *old = disk->ia_ranges; 236 246 int i; 237 247 238 248 if (!old) ··· 288 298 { 289 299 struct request_queue *q = disk->queue; 290 300 291 - if (WARN_ON_ONCE(iars && !iars->nr_ia_ranges)) { 301 + mutex_lock(&q->sysfs_dir_lock); 302 + mutex_lock(&q->sysfs_lock); 303 + if (iars && !disk_check_ia_ranges(disk, iars)) { 292 304 kfree(iars); 293 305 iars = NULL; 294 306 } 295 - 296 - mutex_lock(&q->sysfs_dir_lock); 297 - mutex_lock(&q->sysfs_lock); 298 - 299 - if (iars) { 300 - if (!disk_check_ia_ranges(disk, iars)) { 301 - kfree(iars); 302 - iars = NULL; 303 - goto reg; 304 - } 305 - 306 - if (!disk_ia_ranges_changed(disk, iars)) { 307 - kfree(iars); 308 - goto unlock; 309 - } 307 + if (iars && !disk_ia_ranges_changed(disk, iars)) { 308 + kfree(iars); 309 + goto unlock; 310 310 } 311 311 312 312 /* ··· 304 324 * revalidation. If that is the case, we need to unregister the old 305 325 * set of independent access ranges and register the new set. If the 306 326 * queue is not registered, registration of the device request queue 307 - * will register the independent access ranges, so only swap in the 308 - * new set and free the old one. 327 + * will register the independent access ranges. 309 328 */ 310 - reg: 311 - if (blk_queue_registered(q)) { 312 - disk_register_independent_access_ranges(disk, iars); 313 - } else { 314 - swap(q->ia_ranges, iars); 315 - kfree(iars); 316 - } 317 - 329 + disk_unregister_independent_access_ranges(disk); 330 + disk->ia_ranges = iars; 331 + if (blk_queue_registered(q)) 332 + disk_register_independent_access_ranges(disk); 318 333 unlock: 319 334 mutex_unlock(&q->sysfs_lock); 320 335 mutex_unlock(&q->sysfs_dir_lock);
+2
block/blk-ioc.c
··· 247 247 INIT_HLIST_HEAD(&ioc->icq_list); 248 248 INIT_WORK(&ioc->release_work, ioc_release_fn); 249 249 #endif 250 + ioc->ioprio = IOPRIO_DEFAULT; 251 + 250 252 return ioc; 251 253 } 252 254
+14 -8
block/blk-iocost.c
··· 2769 2769 if (!ioc->enabled || !rq->alloc_time_ns || !rq->start_time_ns) 2770 2770 return; 2771 2771 2772 - switch (req_op(rq) & REQ_OP_MASK) { 2772 + switch (req_op(rq)) { 2773 2773 case REQ_OP_READ: 2774 2774 pidx = QOS_RLAT; 2775 2775 rw = READ; ··· 2886 2886 * called before policy activation completion, can't assume that the 2887 2887 * target bio has an iocg associated and need to test for NULL iocg. 2888 2888 */ 2889 - rq_qos_add(q, rqos); 2889 + ret = rq_qos_add(q, rqos); 2890 + if (ret) 2891 + goto err_free_ioc; 2892 + 2890 2893 ret = blkcg_activate_policy(q, &blkcg_policy_iocost); 2891 - if (ret) { 2892 - rq_qos_del(q, rqos); 2893 - free_percpu(ioc->pcpu_stat); 2894 - kfree(ioc); 2895 - return ret; 2896 - } 2894 + if (ret) 2895 + goto err_del_qos; 2897 2896 return 0; 2897 + 2898 + err_del_qos: 2899 + rq_qos_del(q, rqos); 2900 + err_free_ioc: 2901 + free_percpu(ioc->pcpu_stat); 2902 + kfree(ioc); 2903 + return ret; 2898 2904 } 2899 2905 2900 2906 static struct blkcg_policy_data *ioc_cpd_alloc(gfp_t gfp)
+16 -14
block/blk-iolatency.c
··· 401 401 unsigned int cur_cookie; 402 402 unsigned int our_cookie = atomic_read(&iolat->scale_cookie); 403 403 u64 scale_lat; 404 - unsigned int old; 405 404 int direction = 0; 406 405 407 406 if (lat_to_blkg(iolat)->parent == NULL) ··· 421 422 else 422 423 return; 423 424 424 - old = atomic_cmpxchg(&iolat->scale_cookie, our_cookie, cur_cookie); 425 - 426 - /* Somebody beat us to the punch, just bail. */ 427 - if (old != our_cookie) 425 + if (!atomic_try_cmpxchg(&iolat->scale_cookie, &our_cookie, cur_cookie)) { 426 + /* Somebody beat us to the punch, just bail. */ 428 427 return; 428 + } 429 429 430 430 if (direction < 0 && iolat->min_lat_nsec) { 431 431 u64 samples_thresh; ··· 631 633 window_start = atomic64_read(&iolat->window_start); 632 634 if (now > window_start && 633 635 (now - window_start) >= iolat->cur_win_nsec) { 634 - if (atomic64_cmpxchg(&iolat->window_start, 635 - window_start, now) == window_start) 636 + if (atomic64_try_cmpxchg(&iolat->window_start, 637 + &window_start, now)) 636 638 iolatency_check_latencies(iolat, now); 637 639 } 638 640 } ··· 771 773 rqos->ops = &blkcg_iolatency_ops; 772 774 rqos->q = q; 773 775 774 - rq_qos_add(q, rqos); 775 - 776 + ret = rq_qos_add(q, rqos); 777 + if (ret) 778 + goto err_free; 776 779 ret = blkcg_activate_policy(q, &blkcg_policy_iolatency); 777 - if (ret) { 778 - rq_qos_del(q, rqos); 779 - kfree(blkiolat); 780 - return ret; 781 - } 780 + if (ret) 781 + goto err_qos_del; 782 782 783 783 timer_setup(&blkiolat->timer, blkiolatency_timer_fn, 0); 784 784 INIT_WORK(&blkiolat->enable_work, blkiolatency_enable_work_fn); 785 785 786 786 return 0; 787 + 788 + err_qos_del: 789 + rq_qos_del(q, rqos); 790 + err_free: 791 + kfree(blkiolat); 792 + return ret; 787 793 } 788 794 789 795 static void iolatency_set_min_lat_nsec(struct blkcg_gq *blkg, u64 val)
+7 -50
block/blk-ioprio.c
··· 62 62 struct ioprio_blkcg { 63 63 struct blkcg_policy_data cpd; 64 64 enum prio_policy prio_policy; 65 - bool prio_set; 66 65 }; 67 66 68 67 static inline struct ioprio_blkg *pd_to_ioprio(struct blkg_policy_data *pd) ··· 112 113 if (ret < 0) 113 114 return ret; 114 115 blkcg->prio_policy = ret; 115 - blkcg->prio_set = true; 116 116 return nbytes; 117 117 } 118 118 ··· 181 183 .pd_free_fn = ioprio_free_pd, 182 184 }; 183 185 184 - struct blk_ioprio { 185 - struct rq_qos rqos; 186 - }; 187 - 188 - static void blkcg_ioprio_track(struct rq_qos *rqos, struct request *rq, 189 - struct bio *bio) 186 + void blkcg_set_ioprio(struct bio *bio) 190 187 { 191 188 struct ioprio_blkcg *blkcg = ioprio_blkcg_from_bio(bio); 192 189 u16 prio; 193 190 194 - if (!blkcg->prio_set) 191 + if (!blkcg || blkcg->prio_policy == POLICY_NO_CHANGE) 195 192 return; 196 193 197 194 /* 198 195 * Except for IOPRIO_CLASS_NONE, higher I/O priority numbers 199 196 * correspond to a lower priority. Hence, the max_t() below selects 200 197 * the lower priority of bi_ioprio and the cgroup I/O priority class. 201 - * If the cgroup policy has been set to POLICY_NO_CHANGE == 0, the 202 - * bio I/O priority is not modified. If the bio I/O priority equals 203 - * IOPRIO_CLASS_NONE, the cgroup I/O priority is assigned to the bio. 198 + * If the bio I/O priority equals IOPRIO_CLASS_NONE, the cgroup I/O 199 + * priority is assigned to the bio. 204 200 */ 205 201 prio = max_t(u16, bio->bi_ioprio, 206 202 IOPRIO_PRIO_VALUE(blkcg->prio_policy, 0)); ··· 202 210 bio->bi_ioprio = prio; 203 211 } 204 212 205 - static void blkcg_ioprio_exit(struct rq_qos *rqos) 213 + void blk_ioprio_exit(struct request_queue *q) 206 214 { 207 - struct blk_ioprio *blkioprio_blkg = 208 - container_of(rqos, typeof(*blkioprio_blkg), rqos); 209 - 210 - blkcg_deactivate_policy(rqos->q, &ioprio_policy); 211 - kfree(blkioprio_blkg); 215 + blkcg_deactivate_policy(q, &ioprio_policy); 212 216 } 213 - 214 - static struct rq_qos_ops blkcg_ioprio_ops = { 215 - .track = blkcg_ioprio_track, 216 - .exit = blkcg_ioprio_exit, 217 - }; 218 217 219 218 int blk_ioprio_init(struct request_queue *q) 220 219 { 221 - struct blk_ioprio *blkioprio_blkg; 222 - struct rq_qos *rqos; 223 - int ret; 224 - 225 - blkioprio_blkg = kzalloc(sizeof(*blkioprio_blkg), GFP_KERNEL); 226 - if (!blkioprio_blkg) 227 - return -ENOMEM; 228 - 229 - ret = blkcg_activate_policy(q, &ioprio_policy); 230 - if (ret) { 231 - kfree(blkioprio_blkg); 232 - return ret; 233 - } 234 - 235 - rqos = &blkioprio_blkg->rqos; 236 - rqos->id = RQ_QOS_IOPRIO; 237 - rqos->ops = &blkcg_ioprio_ops; 238 - rqos->q = q; 239 - 240 - /* 241 - * Registering the rq-qos policy after activating the blk-cgroup 242 - * policy guarantees that ioprio_blkcg_from_bio(bio) != NULL in the 243 - * rq-qos callbacks. 244 - */ 245 - rq_qos_add(q, rqos); 246 - 247 - return 0; 220 + return blkcg_activate_policy(q, &ioprio_policy); 248 221 } 249 222 250 223 static int __init ioprio_init(void)
+9
block/blk-ioprio.h
··· 6 6 #include <linux/kconfig.h> 7 7 8 8 struct request_queue; 9 + struct bio; 9 10 10 11 #ifdef CONFIG_BLK_CGROUP_IOPRIO 11 12 int blk_ioprio_init(struct request_queue *q); 13 + void blk_ioprio_exit(struct request_queue *q); 14 + void blkcg_set_ioprio(struct bio *bio); 12 15 #else 13 16 static inline int blk_ioprio_init(struct request_queue *q) 14 17 { 15 18 return 0; 19 + } 20 + static inline void blk_ioprio_exit(struct request_queue *q) 21 + { 22 + } 23 + static inline void blkcg_set_ioprio(struct bio *bio) 24 + { 16 25 } 17 26 #endif 18 27
+2 -4
block/blk-lib.c
··· 48 48 49 49 /* In case the discard granularity isn't set by buggy device driver */ 50 50 if (WARN_ON_ONCE(!bdev_discard_granularity(bdev))) { 51 - char dev_name[BDEVNAME_SIZE]; 52 - 53 - bdevname(bdev, dev_name); 54 - pr_err_ratelimited("%s: Error: discard_granularity is 0.\n", dev_name); 51 + pr_err_ratelimited("%pg: Error: discard_granularity is 0.\n", 52 + bdev); 55 53 return -EOPNOTSUPP; 56 54 } 57 55
+46 -33
block/blk-merge.c
··· 164 164 static inline unsigned get_max_io_size(struct request_queue *q, 165 165 struct bio *bio) 166 166 { 167 - unsigned sectors = blk_max_size_offset(q, bio->bi_iter.bi_sector, 0); 168 - unsigned max_sectors = sectors; 169 167 unsigned pbs = queue_physical_block_size(q) >> SECTOR_SHIFT; 170 168 unsigned lbs = queue_logical_block_size(q) >> SECTOR_SHIFT; 171 - unsigned start_offset = bio->bi_iter.bi_sector & (pbs - 1); 169 + unsigned max_sectors = queue_max_sectors(q), start, end; 172 170 173 - max_sectors += start_offset; 174 - max_sectors &= ~(pbs - 1); 175 - if (max_sectors > start_offset) 176 - return max_sectors - start_offset; 171 + if (q->limits.chunk_sectors) { 172 + max_sectors = min(max_sectors, 173 + blk_chunk_sectors_left(bio->bi_iter.bi_sector, 174 + q->limits.chunk_sectors)); 175 + } 177 176 178 - return sectors & ~(lbs - 1); 177 + start = bio->bi_iter.bi_sector & (pbs - 1); 178 + end = (start + max_sectors) & ~(pbs - 1); 179 + if (end > start) 180 + return end - start; 181 + return max_sectors & ~(lbs - 1); 179 182 } 180 183 181 184 static inline unsigned get_max_segment_size(const struct request_queue *q, ··· 204 201 * @nsegs: [in,out] Number of segments in the bio being built. Incremented 205 202 * by the number of segments from @bv that may be appended to that 206 203 * bio without exceeding @max_segs 207 - * @sectors: [in,out] Number of sectors in the bio being built. Incremented 208 - * by the number of sectors from @bv that may be appended to that 209 - * bio without exceeding @max_sectors 204 + * @bytes: [in,out] Number of bytes in the bio being built. Incremented 205 + * by the number of bytes from @bv that may be appended to that 206 + * bio without exceeding @max_bytes 210 207 * @max_segs: [in] upper bound for *@nsegs 211 - * @max_sectors: [in] upper bound for *@sectors 208 + * @max_bytes: [in] upper bound for *@bytes 212 209 * 213 210 * When splitting a bio, it can happen that a bvec is encountered that is too 214 211 * big to fit in a single segment and hence that it has to be split in the ··· 219 216 */ 220 217 static bool bvec_split_segs(const struct request_queue *q, 221 218 const struct bio_vec *bv, unsigned *nsegs, 222 - unsigned *sectors, unsigned max_segs, 223 - unsigned max_sectors) 219 + unsigned *bytes, unsigned max_segs, 220 + unsigned max_bytes) 224 221 { 225 - unsigned max_len = (min(max_sectors, UINT_MAX >> 9) - *sectors) << 9; 222 + unsigned max_len = min(max_bytes, UINT_MAX) - *bytes; 226 223 unsigned len = min(bv->bv_len, max_len); 227 224 unsigned total_len = 0; 228 225 unsigned seg_size = 0; ··· 240 237 break; 241 238 } 242 239 243 - *sectors += total_len >> 9; 240 + *bytes += total_len; 244 241 245 242 /* tell the caller to split the bvec if it is too big to fit */ 246 243 return len > 0 || bv->bv_len > max_len; ··· 272 269 { 273 270 struct bio_vec bv, bvprv, *bvprvp = NULL; 274 271 struct bvec_iter iter; 275 - unsigned nsegs = 0, sectors = 0; 276 - const unsigned max_sectors = get_max_io_size(q, bio); 272 + unsigned nsegs = 0, bytes = 0; 273 + const unsigned max_bytes = get_max_io_size(q, bio) << 9; 277 274 const unsigned max_segs = queue_max_segments(q); 278 275 279 276 bio_for_each_bvec(bv, bio, iter) { ··· 285 282 goto split; 286 283 287 284 if (nsegs < max_segs && 288 - sectors + (bv.bv_len >> 9) <= max_sectors && 285 + bytes + bv.bv_len <= max_bytes && 289 286 bv.bv_offset + bv.bv_len <= PAGE_SIZE) { 290 287 nsegs++; 291 - sectors += bv.bv_len >> 9; 292 - } else if (bvec_split_segs(q, &bv, &nsegs, &sectors, max_segs, 293 - max_sectors)) { 288 + bytes += bv.bv_len; 289 + } else if (bvec_split_segs(q, &bv, &nsegs, &bytes, max_segs, 290 + max_bytes)) { 294 291 goto split; 295 292 } 296 293 ··· 304 301 *segs = nsegs; 305 302 306 303 /* 304 + * Individual bvecs might not be logical block aligned. Round down the 305 + * split size so that each bio is properly block size aligned, even if 306 + * we do not use the full hardware limits. 307 + */ 308 + bytes = ALIGN_DOWN(bytes, queue_logical_block_size(q)); 309 + 310 + /* 307 311 * Bio splitting may cause subtle trouble such as hang when doing sync 308 312 * iopoll in direct IO routine. Given performance gain of iopoll for 309 313 * big IO can be trival, disable iopoll when split needed. 310 314 */ 311 315 bio_clear_polled(bio); 312 - return bio_split(bio, sectors, GFP_NOIO, bs); 316 + return bio_split(bio, bytes >> SECTOR_SHIFT, GFP_NOIO, bs); 313 317 } 314 318 315 319 /** ··· 386 376 unsigned int blk_recalc_rq_segments(struct request *rq) 387 377 { 388 378 unsigned int nr_phys_segs = 0; 389 - unsigned int nr_sectors = 0; 379 + unsigned int bytes = 0; 390 380 struct req_iterator iter; 391 381 struct bio_vec bv; 392 382 ··· 406 396 return 1; 407 397 case REQ_OP_WRITE_ZEROES: 408 398 return 0; 399 + default: 400 + break; 409 401 } 410 402 411 403 rq_for_each_bvec(bv, rq, iter) 412 - bvec_split_segs(rq->q, &bv, &nr_phys_segs, &nr_sectors, 404 + bvec_split_segs(rq->q, &bv, &nr_phys_segs, &bytes, 413 405 UINT_MAX, UINT_MAX); 414 406 return nr_phys_segs; 415 407 } ··· 572 560 sector_t offset) 573 561 { 574 562 struct request_queue *q = rq->q; 563 + unsigned int max_sectors; 575 564 576 565 if (blk_rq_is_passthrough(rq)) 577 566 return q->limits.max_hw_sectors; 578 567 568 + max_sectors = blk_queue_get_max_sectors(q, req_op(rq)); 579 569 if (!q->limits.chunk_sectors || 580 570 req_op(rq) == REQ_OP_DISCARD || 581 571 req_op(rq) == REQ_OP_SECURE_ERASE) 582 - return blk_queue_get_max_sectors(q, req_op(rq)); 583 - 584 - return min(blk_max_size_offset(q, offset, 0), 585 - blk_queue_get_max_sectors(q, req_op(rq))); 572 + return max_sectors; 573 + return min(max_sectors, 574 + blk_chunk_sectors_left(offset, q->limits.chunk_sectors)); 586 575 } 587 576 588 577 static inline int ll_new_hw_segment(struct request *req, struct bio *bio, ··· 713 700 */ 714 701 void blk_rq_set_mixed_merge(struct request *rq) 715 702 { 716 - unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK; 703 + blk_opf_t ff = rq->cmd_flags & REQ_FAILFAST_MASK; 717 704 struct bio *bio; 718 705 719 706 if (rq->rq_flags & RQF_MIXED_MERGE) ··· 929 916 static enum bio_merge_status bio_attempt_back_merge(struct request *req, 930 917 struct bio *bio, unsigned int nr_segs) 931 918 { 932 - const int ff = bio->bi_opf & REQ_FAILFAST_MASK; 919 + const blk_opf_t ff = bio->bi_opf & REQ_FAILFAST_MASK; 933 920 934 921 if (!ll_back_merge_fn(req, bio, nr_segs)) 935 922 return BIO_MERGE_FAILED; ··· 953 940 static enum bio_merge_status bio_attempt_front_merge(struct request *req, 954 941 struct bio *bio, unsigned int nr_segs) 955 942 { 956 - const int ff = bio->bi_opf & REQ_FAILFAST_MASK; 943 + const blk_opf_t ff = bio->bi_opf & REQ_FAILFAST_MASK; 957 944 958 945 if (!ll_front_merge_fn(req, bio, nr_segs)) 959 946 return BIO_MERGE_FAILED; ··· 1054 1041 struct blk_plug *plug; 1055 1042 struct request *rq; 1056 1043 1057 - plug = blk_mq_plug(q, bio); 1044 + plug = blk_mq_plug(bio); 1058 1045 if (!plug || rq_list_empty(plug->mq_list)) 1059 1046 return false; 1060 1047
+3 -3
block/blk-mq-debugfs-zoned.c
··· 11 11 struct request_queue *q = data; 12 12 unsigned int i; 13 13 14 - if (!q->seq_zones_wlock) 14 + if (!q->disk->seq_zones_wlock) 15 15 return 0; 16 16 17 - for (i = 0; i < q->nr_zones; i++) 18 - if (test_bit(i, q->seq_zones_wlock)) 17 + for (i = 0; i < q->disk->nr_zones; i++) 18 + if (test_bit(i, q->disk->seq_zones_wlock)) 19 19 seq_printf(m, "%u\n", i); 20 20 21 21 return 0;
+10 -9
block/blk-mq-debugfs.c
··· 116 116 QUEUE_FLAG_NAME(NOXMERGES), 117 117 QUEUE_FLAG_NAME(ADD_RANDOM), 118 118 QUEUE_FLAG_NAME(SAME_FORCE), 119 - QUEUE_FLAG_NAME(DEAD), 120 119 QUEUE_FLAG_NAME(INIT_DONE), 121 120 QUEUE_FLAG_NAME(STABLE_WRITES), 122 121 QUEUE_FLAG_NAME(POLL), ··· 150 151 char opbuf[16] = { }, *op; 151 152 152 153 /* 153 - * The "state" attribute is removed after blk_cleanup_queue() has called 154 - * blk_mq_free_queue(). Return if QUEUE_FLAG_DEAD has been set to avoid 155 - * triggering a use-after-free. 154 + * The "state" attribute is removed when the queue is removed. Don't 155 + * allow setting the state on a dying queue to avoid a use-after-free. 156 156 */ 157 - if (blk_queue_dead(q)) 157 + if (blk_queue_dying(q)) 158 158 return -ENOENT; 159 159 160 160 if (count >= sizeof(opbuf)) { ··· 304 306 int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq) 305 307 { 306 308 const struct blk_mq_ops *const mq_ops = rq->q->mq_ops; 307 - const unsigned int op = req_op(rq); 309 + const enum req_op op = req_op(rq); 308 310 const char *op_str = blk_op_str(op); 309 311 310 312 seq_printf(m, "%p {.op=", rq); ··· 313 315 else 314 316 seq_printf(m, "%s", op_str); 315 317 seq_puts(m, ", .cmd_flags="); 316 - blk_flags_show(m, rq->cmd_flags & ~REQ_OP_MASK, cmd_flag_name, 317 - ARRAY_SIZE(cmd_flag_name)); 318 + blk_flags_show(m, (__force unsigned int)(rq->cmd_flags & ~REQ_OP_MASK), 319 + cmd_flag_name, ARRAY_SIZE(cmd_flag_name)); 318 320 seq_puts(m, ", .rq_flags="); 319 321 blk_flags_show(m, (__force unsigned int)rq->rq_flags, rqf_name, 320 322 ARRAY_SIZE(rqf_name)); ··· 375 377 * e.g. due to a concurrent blk_mq_finish_request() call. Returns true to 376 378 * keep iterating requests. 377 379 */ 378 - static bool hctx_show_busy_rq(struct request *rq, void *data, bool reserved) 380 + static bool hctx_show_busy_rq(struct request *rq, void *data) 379 381 { 380 382 const struct show_busy_params *params = data; 381 383 ··· 727 729 struct blk_mq_ctx *ctx; 728 730 char name[20]; 729 731 int i; 732 + 733 + if (!q->debugfs_dir) 734 + return; 730 735 731 736 snprintf(name, sizeof(name), "hctx%u", hctx->queue_num); 732 737 hctx->debugfs_dir = debugfs_create_dir(name, q->debugfs_dir);
+22 -23
block/blk-mq-sysfs.c
··· 203 203 return ret; 204 204 } 205 205 206 - void blk_mq_unregister_dev(struct device *dev, struct request_queue *q) 207 - { 208 - struct blk_mq_hw_ctx *hctx; 209 - unsigned long i; 210 - 211 - lockdep_assert_held(&q->sysfs_dir_lock); 212 - 213 - queue_for_each_hw_ctx(q, hctx, i) 214 - blk_mq_unregister_hctx(hctx); 215 - 216 - kobject_uevent(q->mq_kobj, KOBJ_REMOVE); 217 - kobject_del(q->mq_kobj); 218 - kobject_put(&dev->kobj); 219 - 220 - q->mq_sysfs_init_done = false; 221 - } 222 - 223 206 void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx) 224 207 { 225 208 kobject_init(&hctx->kobj, &blk_mq_hw_ktype); ··· 235 252 } 236 253 } 237 254 238 - int __blk_mq_register_dev(struct device *dev, struct request_queue *q) 255 + int blk_mq_sysfs_register(struct gendisk *disk) 239 256 { 257 + struct request_queue *q = disk->queue; 240 258 struct blk_mq_hw_ctx *hctx; 241 259 unsigned long i, j; 242 260 int ret; 243 261 244 - WARN_ON_ONCE(!q->kobj.parent); 245 262 lockdep_assert_held(&q->sysfs_dir_lock); 246 263 247 - ret = kobject_add(q->mq_kobj, kobject_get(&dev->kobj), "%s", "mq"); 264 + ret = kobject_add(q->mq_kobj, &disk_to_dev(disk)->kobj, "mq"); 248 265 if (ret < 0) 249 266 goto out; 250 267 ··· 269 286 270 287 kobject_uevent(q->mq_kobj, KOBJ_REMOVE); 271 288 kobject_del(q->mq_kobj); 272 - kobject_put(&dev->kobj); 273 289 return ret; 274 290 } 275 291 276 - void blk_mq_sysfs_unregister(struct request_queue *q) 292 + void blk_mq_sysfs_unregister(struct gendisk *disk) 293 + { 294 + struct request_queue *q = disk->queue; 295 + struct blk_mq_hw_ctx *hctx; 296 + unsigned long i; 297 + 298 + lockdep_assert_held(&q->sysfs_dir_lock); 299 + 300 + queue_for_each_hw_ctx(q, hctx, i) 301 + blk_mq_unregister_hctx(hctx); 302 + 303 + kobject_uevent(q->mq_kobj, KOBJ_REMOVE); 304 + kobject_del(q->mq_kobj); 305 + 306 + q->mq_sysfs_init_done = false; 307 + } 308 + 309 + void blk_mq_sysfs_unregister_hctxs(struct request_queue *q) 277 310 { 278 311 struct blk_mq_hw_ctx *hctx; 279 312 unsigned long i; ··· 305 306 mutex_unlock(&q->sysfs_dir_lock); 306 307 } 307 308 308 - int blk_mq_sysfs_register(struct request_queue *q) 309 + int blk_mq_sysfs_register_hctxs(struct request_queue *q) 309 310 { 310 311 struct blk_mq_hw_ctx *hctx; 311 312 unsigned long i;
+12 -19
block/blk-mq-tag.c
··· 37 37 * to get tag when first time, the other shared-tag users could reserve 38 38 * budget for it. 39 39 */ 40 - bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 40 + void __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 41 41 { 42 42 unsigned int users; 43 43 44 44 if (blk_mq_is_shared_tags(hctx->flags)) { 45 45 struct request_queue *q = hctx->queue; 46 46 47 - if (test_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags) || 48 - test_and_set_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags)) { 49 - return true; 50 - } 47 + if (test_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags)) 48 + return; 49 + set_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags); 51 50 } else { 52 - if (test_bit(BLK_MQ_S_TAG_ACTIVE, &hctx->state) || 53 - test_and_set_bit(BLK_MQ_S_TAG_ACTIVE, &hctx->state)) { 54 - return true; 55 - } 51 + if (test_bit(BLK_MQ_S_TAG_ACTIVE, &hctx->state)) 52 + return; 53 + set_bit(BLK_MQ_S_TAG_ACTIVE, &hctx->state); 56 54 } 57 55 58 56 users = atomic_inc_return(&hctx->tags->active_queues); 59 57 60 58 blk_mq_update_wake_batch(hctx->tags, users); 61 - 62 - return true; 63 59 } 64 60 65 61 /* ··· 262 266 struct blk_mq_hw_ctx *hctx = iter_data->hctx; 263 267 struct request_queue *q = iter_data->q; 264 268 struct blk_mq_tag_set *set = q->tag_set; 265 - bool reserved = iter_data->reserved; 266 269 struct blk_mq_tags *tags; 267 270 struct request *rq; 268 271 bool ret = true; ··· 271 276 else 272 277 tags = hctx->tags; 273 278 274 - if (!reserved) 279 + if (!iter_data->reserved) 275 280 bitnr += tags->nr_reserved_tags; 276 281 /* 277 282 * We can hit rq == NULL here, because the tagging functions ··· 282 287 return true; 283 288 284 289 if (rq->q == q && (!hctx || rq->mq_hctx == hctx)) 285 - ret = iter_data->fn(rq, iter_data->data, reserved); 290 + ret = iter_data->fn(rq, iter_data->data); 286 291 blk_mq_put_rq_ref(rq); 287 292 return ret; 288 293 } ··· 332 337 { 333 338 struct bt_tags_iter_data *iter_data = data; 334 339 struct blk_mq_tags *tags = iter_data->tags; 335 - bool reserved = iter_data->flags & BT_TAG_ITER_RESERVED; 336 340 struct request *rq; 337 341 bool ret = true; 338 342 bool iter_static_rqs = !!(iter_data->flags & BT_TAG_ITER_STATIC_RQS); 339 343 340 - if (!reserved) 344 + if (!(iter_data->flags & BT_TAG_ITER_RESERVED)) 341 345 bitnr += tags->nr_reserved_tags; 342 346 343 347 /* ··· 352 358 353 359 if (!(iter_data->flags & BT_TAG_ITER_STARTED) || 354 360 blk_mq_request_started(rq)) 355 - ret = iter_data->fn(rq, iter_data->data, reserved); 361 + ret = iter_data->fn(rq, iter_data->data); 356 362 if (!iter_static_rqs) 357 363 blk_mq_put_rq_ref(rq); 358 364 return ret; ··· 442 448 } 443 449 EXPORT_SYMBOL(blk_mq_tagset_busy_iter); 444 450 445 - static bool blk_mq_tagset_count_completed_rqs(struct request *rq, 446 - void *data, bool reserved) 451 + static bool blk_mq_tagset_count_completed_rqs(struct request *rq, void *data) 447 452 { 448 453 unsigned *count = data; 449 454
+4 -6
block/blk-mq-tag.h
··· 47 47 BLK_MQ_TAG_MAX = BLK_MQ_NO_TAG - 1, 48 48 }; 49 49 50 - extern bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *); 50 + extern void __blk_mq_tag_busy(struct blk_mq_hw_ctx *); 51 51 extern void __blk_mq_tag_idle(struct blk_mq_hw_ctx *); 52 52 53 - static inline bool blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 53 + static inline void blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 54 54 { 55 - if (!(hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)) 56 - return false; 57 - 58 - return __blk_mq_tag_busy(hctx); 55 + if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED) 56 + __blk_mq_tag_busy(hctx); 59 57 } 60 58 61 59 static inline void blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx)
+78 -27
block/blk-mq.c
··· 42 42 #include "blk-stat.h" 43 43 #include "blk-mq-sched.h" 44 44 #include "blk-rq-qos.h" 45 + #include "blk-ioprio.h" 45 46 46 47 static DEFINE_PER_CPU(struct llist_head, blk_cpu_done); 47 48 ··· 129 128 unsigned int inflight[2]; 130 129 }; 131 130 132 - static bool blk_mq_check_inflight(struct request *rq, void *priv, 133 - bool reserved) 131 + static bool blk_mq_check_inflight(struct request *rq, void *priv) 134 132 { 135 133 struct mq_inflight *mi = priv; 136 134 ··· 474 474 if (!(data->rq_flags & RQF_ELV)) 475 475 blk_mq_tag_busy(data->hctx); 476 476 477 + if (data->flags & BLK_MQ_REQ_RESERVED) 478 + data->rq_flags |= RQF_RESV; 479 + 477 480 /* 478 481 * Try batched alloc if we want more than 1 tag. 479 482 */ ··· 510 507 alloc_time_ns); 511 508 } 512 509 513 - struct request *blk_mq_alloc_request(struct request_queue *q, unsigned int op, 510 + struct request *blk_mq_alloc_request(struct request_queue *q, blk_opf_t opf, 514 511 blk_mq_req_flags_t flags) 515 512 { 516 513 struct blk_mq_alloc_data data = { 517 514 .q = q, 518 515 .flags = flags, 519 - .cmd_flags = op, 516 + .cmd_flags = opf, 520 517 .nr_tags = 1, 521 518 }; 522 519 struct request *rq; ··· 540 537 EXPORT_SYMBOL(blk_mq_alloc_request); 541 538 542 539 struct request *blk_mq_alloc_request_hctx(struct request_queue *q, 543 - unsigned int op, blk_mq_req_flags_t flags, unsigned int hctx_idx) 540 + blk_opf_t opf, blk_mq_req_flags_t flags, unsigned int hctx_idx) 544 541 { 545 542 struct blk_mq_alloc_data data = { 546 543 .q = q, 547 544 .flags = flags, 548 - .cmd_flags = op, 545 + .cmd_flags = opf, 549 546 .nr_tags = 1, 550 547 }; 551 548 u64 alloc_time_ns = 0; ··· 590 587 blk_mq_tag_busy(data.hctx); 591 588 else 592 589 data.rq_flags |= RQF_ELV; 590 + 591 + if (flags & BLK_MQ_REQ_RESERVED) 592 + data.rq_flags |= RQF_RESV; 593 593 594 594 ret = -EWOULDBLOCK; 595 595 tag = blk_mq_get_tag(&data); ··· 660 654 { 661 655 printk(KERN_INFO "%s: dev %s: flags=%llx\n", msg, 662 656 rq->q->disk ? rq->q->disk->disk_name : "?", 663 - (unsigned long long) rq->cmd_flags); 657 + (__force unsigned long long) rq->cmd_flags); 664 658 665 659 printk(KERN_INFO " sector %llu, nr/cnr %u/%u\n", 666 660 (unsigned long long)blk_rq_pos(rq), ··· 713 707 "phys_seg %u prio class %u\n", 714 708 blk_status_to_str(status), 715 709 req->q->disk ? req->q->disk->disk_name : "?", 716 - blk_rq_pos(req), req_op(req), blk_op_str(req_op(req)), 717 - req->cmd_flags & ~REQ_OP_MASK, 710 + blk_rq_pos(req), (__force u32)req_op(req), 711 + blk_op_str(req_op(req)), 712 + (__force u32)(req->cmd_flags & ~REQ_OP_MASK), 718 713 req->nr_phys_segments, 719 714 IOPRIO_PRIO_CLASS(req->ioprio)); 720 715 } ··· 1400 1393 } 1401 1394 EXPORT_SYMBOL(blk_mq_delay_kick_requeue_list); 1402 1395 1403 - static bool blk_mq_rq_inflight(struct request *rq, void *priv, 1404 - bool reserved) 1396 + static bool blk_mq_rq_inflight(struct request *rq, void *priv) 1405 1397 { 1406 1398 /* 1407 1399 * If we find a request that isn't idle we know the queue is busy ··· 1426 1420 } 1427 1421 EXPORT_SYMBOL_GPL(blk_mq_queue_inflight); 1428 1422 1429 - static void blk_mq_rq_timed_out(struct request *req, bool reserved) 1423 + static void blk_mq_rq_timed_out(struct request *req) 1430 1424 { 1431 1425 req->rq_flags |= RQF_TIMED_OUT; 1432 1426 if (req->q->mq_ops->timeout) { 1433 1427 enum blk_eh_timer_return ret; 1434 1428 1435 - ret = req->q->mq_ops->timeout(req, reserved); 1429 + ret = req->q->mq_ops->timeout(req); 1436 1430 if (ret == BLK_EH_DONE) 1437 1431 return; 1438 1432 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER); ··· 1469 1463 __blk_mq_free_request(rq); 1470 1464 } 1471 1465 1472 - static bool blk_mq_check_expired(struct request *rq, void *priv, bool reserved) 1466 + static bool blk_mq_check_expired(struct request *rq, void *priv) 1473 1467 { 1474 1468 unsigned long *next = priv; 1475 1469 ··· 1481 1475 * from blk_mq_check_expired(). 1482 1476 */ 1483 1477 if (blk_mq_req_expired(rq, next)) 1484 - blk_mq_rq_timed_out(rq, reserved); 1478 + blk_mq_rq_timed_out(rq); 1485 1479 return true; 1486 1480 } 1487 1481 ··· 2091 2085 return; 2092 2086 2093 2087 if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) { 2094 - int cpu = get_cpu(); 2095 - if (cpumask_test_cpu(cpu, hctx->cpumask)) { 2088 + if (cpumask_test_cpu(raw_smp_processor_id(), hctx->cpumask)) { 2096 2089 __blk_mq_run_hw_queue(hctx); 2097 - put_cpu(); 2098 2090 return; 2099 2091 } 2100 - 2101 - put_cpu(); 2102 2092 } 2103 2093 2104 2094 kblockd_mod_delayed_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work, ··· 2158 2156 * just causes lock contention inside the scheduler and pointless cache 2159 2157 * bouncing. 2160 2158 */ 2161 - struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(q, 0, ctx); 2159 + struct blk_mq_hw_ctx *hctx = ctx->hctxs[HCTX_TYPE_DEFAULT]; 2162 2160 2163 2161 if (!blk_mq_hctx_stopped(hctx)) 2164 2162 return hctx; ··· 2785 2783 return rq; 2786 2784 } 2787 2785 2786 + static void bio_set_ioprio(struct bio *bio) 2787 + { 2788 + /* Nobody set ioprio so far? Initialize it based on task's nice value */ 2789 + if (IOPRIO_PRIO_CLASS(bio->bi_ioprio) == IOPRIO_CLASS_NONE) 2790 + bio->bi_ioprio = get_current_ioprio(); 2791 + blkcg_set_ioprio(bio); 2792 + } 2793 + 2788 2794 /** 2789 2795 * blk_mq_submit_bio - Create and send a request to block device. 2790 2796 * @bio: Bio pointer. ··· 2809 2799 void blk_mq_submit_bio(struct bio *bio) 2810 2800 { 2811 2801 struct request_queue *q = bdev_get_queue(bio->bi_bdev); 2812 - struct blk_plug *plug = blk_mq_plug(q, bio); 2802 + struct blk_plug *plug = blk_mq_plug(bio); 2813 2803 const int is_sync = op_is_sync(bio->bi_opf); 2814 2804 struct request *rq; 2815 2805 unsigned int nr_segs = 1; ··· 2821 2811 2822 2812 if (!bio_integrity_prep(bio)) 2823 2813 return; 2814 + 2815 + bio_set_ioprio(bio); 2824 2816 2825 2817 rq = blk_mq_get_cached_request(q, plug, &bio, nr_segs); 2826 2818 if (!rq) { ··· 3288 3276 bool has_rq; 3289 3277 }; 3290 3278 3291 - static bool blk_mq_has_request(struct request *rq, void *data, bool reserved) 3279 + static bool blk_mq_has_request(struct request *rq, void *data) 3292 3280 { 3293 3281 struct rq_iter_data *iter_data = data; 3294 3282 ··· 3907 3895 q->queuedata = queuedata; 3908 3896 ret = blk_mq_init_allocated_queue(set, q); 3909 3897 if (ret) { 3910 - blk_cleanup_queue(q); 3898 + blk_put_queue(q); 3911 3899 return ERR_PTR(ret); 3912 3900 } 3913 3901 return q; ··· 3918 3906 return blk_mq_init_queue_data(set, NULL); 3919 3907 } 3920 3908 EXPORT_SYMBOL(blk_mq_init_queue); 3909 + 3910 + /** 3911 + * blk_mq_destroy_queue - shutdown a request queue 3912 + * @q: request queue to shutdown 3913 + * 3914 + * This shuts down a request queue allocated by blk_mq_init_queue() and drops 3915 + * the initial reference. All future requests will failed with -ENODEV. 3916 + * 3917 + * Context: can sleep 3918 + */ 3919 + void blk_mq_destroy_queue(struct request_queue *q) 3920 + { 3921 + WARN_ON_ONCE(!queue_is_mq(q)); 3922 + WARN_ON_ONCE(blk_queue_registered(q)); 3923 + 3924 + might_sleep(); 3925 + 3926 + blk_queue_flag_set(QUEUE_FLAG_DYING, q); 3927 + blk_queue_start_drain(q); 3928 + blk_freeze_queue(q); 3929 + 3930 + blk_sync_queue(q); 3931 + blk_mq_cancel_work_sync(q); 3932 + blk_mq_exit_queue(q); 3933 + 3934 + /* @q is and will stay empty, shutdown and put */ 3935 + blk_put_queue(q); 3936 + } 3937 + EXPORT_SYMBOL(blk_mq_destroy_queue); 3921 3938 3922 3939 struct gendisk *__blk_mq_alloc_disk(struct blk_mq_tag_set *set, void *queuedata, 3923 3940 struct lock_class_key *lkclass) ··· 3960 3919 3961 3920 disk = __alloc_disk_node(q, set->numa_node, lkclass); 3962 3921 if (!disk) { 3963 - blk_cleanup_queue(q); 3922 + blk_mq_destroy_queue(q); 3964 3923 return ERR_PTR(-ENOMEM); 3965 3924 } 3925 + set_bit(GD_OWNS_QUEUE, &disk->state); 3966 3926 return disk; 3967 3927 } 3968 3928 EXPORT_SYMBOL(__blk_mq_alloc_disk); 3929 + 3930 + struct gendisk *blk_mq_alloc_disk_for_queue(struct request_queue *q, 3931 + struct lock_class_key *lkclass) 3932 + { 3933 + if (!blk_get_queue(q)) 3934 + return NULL; 3935 + return __alloc_disk_node(q, NUMA_NO_NODE, lkclass); 3936 + } 3937 + EXPORT_SYMBOL(blk_mq_alloc_disk_for_queue); 3969 3938 3970 3939 static struct blk_mq_hw_ctx *blk_mq_alloc_and_init_hctx( 3971 3940 struct blk_mq_tag_set *set, struct request_queue *q, ··· 4564 4513 4565 4514 list_for_each_entry(q, &set->tag_list, tag_set_list) { 4566 4515 blk_mq_debugfs_unregister_hctxs(q); 4567 - blk_mq_sysfs_unregister(q); 4516 + blk_mq_sysfs_unregister_hctxs(q); 4568 4517 } 4569 4518 4570 4519 prev_nr_hw_queues = set->nr_hw_queues; ··· 4595 4544 4596 4545 reregister: 4597 4546 list_for_each_entry(q, &set->tag_list, tag_set_list) { 4598 - blk_mq_sysfs_register(q); 4547 + blk_mq_sysfs_register_hctxs(q); 4599 4548 blk_mq_debugfs_register_hctxs(q); 4600 4549 } 4601 4550
+19 -20
block/blk-mq.h
··· 86 86 return xa_load(&q->hctx_table, q->tag_set->map[type].mq_map[cpu]); 87 87 } 88 88 89 - static inline enum hctx_type blk_mq_get_hctx_type(unsigned int flags) 89 + static inline enum hctx_type blk_mq_get_hctx_type(blk_opf_t opf) 90 90 { 91 91 enum hctx_type type = HCTX_TYPE_DEFAULT; 92 92 93 93 /* 94 94 * The caller ensure that if REQ_POLLED, poll must be enabled. 95 95 */ 96 - if (flags & REQ_POLLED) 96 + if (opf & REQ_POLLED) 97 97 type = HCTX_TYPE_POLL; 98 - else if ((flags & REQ_OP_MASK) == REQ_OP_READ) 98 + else if ((opf & REQ_OP_MASK) == REQ_OP_READ) 99 99 type = HCTX_TYPE_READ; 100 100 return type; 101 101 } ··· 103 103 /* 104 104 * blk_mq_map_queue() - map (cmd_flags,type) to hardware queue 105 105 * @q: request queue 106 - * @flags: request command flags 106 + * @opf: operation type (REQ_OP_*) and flags (e.g. REQ_POLLED). 107 107 * @ctx: software queue cpu ctx 108 108 */ 109 109 static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q, 110 - unsigned int flags, 110 + blk_opf_t opf, 111 111 struct blk_mq_ctx *ctx) 112 112 { 113 - return ctx->hctxs[blk_mq_get_hctx_type(flags)]; 113 + return ctx->hctxs[blk_mq_get_hctx_type(opf)]; 114 114 } 115 115 116 116 /* ··· 118 118 */ 119 119 extern void blk_mq_sysfs_init(struct request_queue *q); 120 120 extern void blk_mq_sysfs_deinit(struct request_queue *q); 121 - extern int __blk_mq_register_dev(struct device *dev, struct request_queue *q); 122 - extern int blk_mq_sysfs_register(struct request_queue *q); 123 - extern void blk_mq_sysfs_unregister(struct request_queue *q); 121 + int blk_mq_sysfs_register(struct gendisk *disk); 122 + void blk_mq_sysfs_unregister(struct gendisk *disk); 123 + int blk_mq_sysfs_register_hctxs(struct request_queue *q); 124 + void blk_mq_sysfs_unregister_hctxs(struct request_queue *q); 124 125 extern void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx); 125 126 void blk_mq_free_plug_rqs(struct blk_plug *plug); 126 127 void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule); ··· 152 151 struct request_queue *q; 153 152 blk_mq_req_flags_t flags; 154 153 unsigned int shallow_depth; 155 - unsigned int cmd_flags; 154 + blk_opf_t cmd_flags; 156 155 req_flags_t rq_flags; 157 156 158 157 /* allocate multiple requests/tags in one go */ ··· 294 293 295 294 /* 296 295 * blk_mq_plug() - Get caller context plug 297 - * @q: request queue 298 296 * @bio : the bio being submitted by the caller context 299 297 * 300 298 * Plugging, by design, may delay the insertion of BIOs into the elevator in ··· 304 304 * order. While this is not a problem with regular block devices, this ordering 305 305 * change can cause write BIO failures with zoned block devices as these 306 306 * require sequential write patterns to zones. Prevent this from happening by 307 - * ignoring the plug state of a BIO issuing context if the target request queue 308 - * is for a zoned block device and the BIO to plug is a write operation. 307 + * ignoring the plug state of a BIO issuing context if it is for a zoned block 308 + * device and the BIO to plug is a write operation. 309 309 * 310 310 * Return current->plug if the bio can be plugged and NULL otherwise 311 311 */ 312 - static inline struct blk_plug *blk_mq_plug(struct request_queue *q, 313 - struct bio *bio) 312 + static inline struct blk_plug *blk_mq_plug( struct bio *bio) 314 313 { 314 + /* Zoned block device write operation case: do not plug the BIO */ 315 + if (bdev_is_zoned(bio->bi_bdev) && op_is_write(bio_op(bio))) 316 + return NULL; 317 + 315 318 /* 316 319 * For regular block devices or read operations, use the context plug 317 320 * which may be NULL if blk_start_plug() was not executed. 318 321 */ 319 - if (!blk_queue_is_zoned(q) || !op_is_write(bio_op(bio))) 320 - return current->plug; 321 - 322 - /* Zoned block device write operation case: do not plug the BIO */ 323 - return NULL; 322 + return current->plug; 324 323 } 325 324 326 325 /* Free all requests on the list */
+2 -8
block/blk-rq-qos.c
··· 10 10 { 11 11 unsigned int cur = atomic_read(v); 12 12 13 - for (;;) { 14 - unsigned int old; 15 - 13 + do { 16 14 if (cur >= below) 17 15 return false; 18 - old = atomic_cmpxchg(v, cur, cur + 1); 19 - if (old == cur) 20 - break; 21 - cur = old; 22 - } 16 + } while (!atomic_try_cmpxchg(v, &cur, cur + 1)); 23 17 24 18 return true; 25 19 }
+10 -1
block/blk-rq-qos.h
··· 86 86 init_waitqueue_head(&rq_wait->wait); 87 87 } 88 88 89 - static inline void rq_qos_add(struct request_queue *q, struct rq_qos *rqos) 89 + static inline int rq_qos_add(struct request_queue *q, struct rq_qos *rqos) 90 90 { 91 91 /* 92 92 * No IO can be in-flight when adding rqos, so freeze queue, which ··· 98 98 blk_mq_freeze_queue(q); 99 99 100 100 spin_lock_irq(&q->queue_lock); 101 + if (rq_qos_id(q, rqos->id)) 102 + goto ebusy; 101 103 rqos->next = q->rq_qos; 102 104 q->rq_qos = rqos; 103 105 spin_unlock_irq(&q->queue_lock); ··· 111 109 blk_mq_debugfs_register_rqos(rqos); 112 110 mutex_unlock(&q->debugfs_mutex); 113 111 } 112 + 113 + return 0; 114 + ebusy: 115 + spin_unlock_irq(&q->queue_lock); 116 + blk_mq_unfreeze_queue(q); 117 + return -EBUSY; 118 + 114 119 } 115 120 116 121 static inline void rq_qos_del(struct request_queue *q, struct rq_qos *rqos)
+6 -5
block/blk-settings.c
··· 893 893 } 894 894 895 895 /** 896 - * blk_queue_set_zoned - configure a disk queue zoned model. 896 + * disk_set_zoned - configure the zoned model for a disk 897 897 * @disk: the gendisk of the queue to configure 898 898 * @model: the zoned model to set 899 899 * 900 - * Set the zoned model of the request queue of @disk according to @model. 900 + * Set the zoned model of @disk to @model. 901 + * 901 902 * When @model is BLK_ZONED_HM (host managed), this should be called only 902 903 * if zoned block device support is enabled (CONFIG_BLK_DEV_ZONED option). 903 904 * If @model specifies BLK_ZONED_HA (host aware), the effective model used 904 905 * depends on CONFIG_BLK_DEV_ZONED settings and on the existence of partitions 905 906 * on the disk. 906 907 */ 907 - void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model) 908 + void disk_set_zoned(struct gendisk *disk, enum blk_zoned_model model) 908 909 { 909 910 struct request_queue *q = disk->queue; 910 911 ··· 946 945 blk_queue_zone_write_granularity(q, 947 946 queue_logical_block_size(q)); 948 947 } else { 949 - blk_queue_clear_zone_settings(q); 948 + disk_clear_zone_settings(disk); 950 949 } 951 950 } 952 - EXPORT_SYMBOL_GPL(blk_queue_set_zoned); 951 + EXPORT_SYMBOL_GPL(disk_set_zoned); 953 952 954 953 int bdev_alignment_offset(struct block_device *bdev) 955 954 {
+23 -37
block/blk-sysfs.c
··· 274 274 return queue_var_show(q->limits.virt_boundary_mask, page); 275 275 } 276 276 277 + static ssize_t queue_dma_alignment_show(struct request_queue *q, char *page) 278 + { 279 + return queue_var_show(queue_dma_alignment(q), page); 280 + } 281 + 277 282 #define QUEUE_SYSFS_BIT_FNS(name, flag, neg) \ 278 283 static ssize_t \ 279 284 queue_##name##_show(struct request_queue *q, char *page) \ ··· 325 320 326 321 static ssize_t queue_nr_zones_show(struct request_queue *q, char *page) 327 322 { 328 - return queue_var_show(blk_queue_nr_zones(q), page); 323 + return queue_var_show(disk_nr_zones(q->disk), page); 329 324 } 330 325 331 326 static ssize_t queue_max_open_zones_show(struct request_queue *q, char *page) 332 327 { 333 - return queue_var_show(queue_max_open_zones(q), page); 328 + return queue_var_show(bdev_max_open_zones(q->disk->part0), page); 334 329 } 335 330 336 331 static ssize_t queue_max_active_zones_show(struct request_queue *q, char *page) 337 332 { 338 - return queue_var_show(queue_max_active_zones(q), page); 333 + return queue_var_show(bdev_max_active_zones(q->disk->part0), page); 339 334 } 340 335 341 336 static ssize_t queue_nomerges_show(struct request_queue *q, char *page) ··· 611 606 QUEUE_RW_ENTRY(queue_io_timeout, "io_timeout"); 612 607 QUEUE_RW_ENTRY(queue_wb_lat, "wbt_lat_usec"); 613 608 QUEUE_RO_ENTRY(queue_virt_boundary_mask, "virt_boundary_mask"); 609 + QUEUE_RO_ENTRY(queue_dma_alignment, "dma_alignment"); 614 610 615 611 #ifdef CONFIG_BLK_DEV_THROTTLING_LOW 616 612 QUEUE_RW_ENTRY(blk_throtl_sample_time, "throttle_sample_time"); ··· 673 667 &blk_throtl_sample_time_entry.attr, 674 668 #endif 675 669 &queue_virt_boundary_mask_entry.attr, 670 + &queue_dma_alignment_entry.attr, 676 671 NULL, 677 672 }; 678 673 ··· 755 748 * decremented with blk_put_queue(). Once the refcount reaches 0 this function 756 749 * is called. 757 750 * 758 - * For drivers that have a request_queue on a gendisk and added with 759 - * __device_add_disk() the refcount to request_queue will reach 0 with 760 - * the last put_disk() called by the driver. For drivers which don't use 761 - * __device_add_disk() this happens with blk_cleanup_queue(). 762 - * 763 751 * Drivers exist which depend on the release of the request_queue to be 764 752 * synchronous, it should not be deferred. 765 753 * ··· 776 774 blk_free_queue_stats(q->stats); 777 775 kfree(q->poll_stat); 778 776 779 - blk_queue_free_zone_bitmaps(q); 780 - 781 777 if (queue_is_mq(q)) 782 778 blk_mq_release(q); 783 779 ··· 784 784 if (blk_queue_has_srcu(q)) 785 785 cleanup_srcu_struct(q->srcu); 786 786 787 - ida_simple_remove(&blk_queue_ida, q->id); 787 + ida_free(&blk_queue_ida, q->id); 788 788 call_rcu(&q->rcu_head, blk_free_queue_rcu); 789 789 } 790 790 ··· 793 793 .store = queue_attr_store, 794 794 }; 795 795 796 + static const struct attribute_group *blk_queue_attr_groups[] = { 797 + &queue_attr_group, 798 + NULL 799 + }; 800 + 796 801 struct kobj_type blk_queue_ktype = { 802 + .default_groups = blk_queue_attr_groups, 797 803 .sysfs_ops = &queue_sysfs_ops, 798 804 .release = blk_release_queue, 799 805 }; ··· 810 804 */ 811 805 int blk_register_queue(struct gendisk *disk) 812 806 { 813 - int ret; 814 - struct device *dev = disk_to_dev(disk); 815 807 struct request_queue *q = disk->queue; 816 - 817 - ret = blk_trace_init_sysfs(dev); 818 - if (ret) 819 - return ret; 808 + int ret; 820 809 821 810 mutex_lock(&q->sysfs_dir_lock); 822 811 823 - ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue"); 824 - if (ret < 0) { 825 - blk_trace_remove_sysfs(dev); 812 + ret = kobject_add(&q->kobj, &disk_to_dev(disk)->kobj, "queue"); 813 + if (ret < 0) 826 814 goto unlock; 827 - } 828 - 829 - ret = sysfs_create_group(&q->kobj, &queue_attr_group); 830 - if (ret) { 831 - blk_trace_remove_sysfs(dev); 832 - kobject_del(&q->kobj); 833 - kobject_put(&dev->kobj); 834 - goto unlock; 835 - } 836 815 837 816 if (queue_is_mq(q)) 838 - __blk_mq_register_dev(dev, q); 817 + blk_mq_sysfs_register(disk); 839 818 mutex_lock(&q->sysfs_lock); 840 819 841 820 mutex_lock(&q->debugfs_mutex); ··· 830 839 blk_mq_debugfs_register(q); 831 840 mutex_unlock(&q->debugfs_mutex); 832 841 833 - ret = disk_register_independent_access_ranges(disk, NULL); 842 + ret = disk_register_independent_access_ranges(disk); 834 843 if (ret) 835 844 goto put_dev; 836 845 ··· 879 888 mutex_unlock(&q->sysfs_lock); 880 889 mutex_unlock(&q->sysfs_dir_lock); 881 890 kobject_del(&q->kobj); 882 - blk_trace_remove_sysfs(dev); 883 - kobject_put(&dev->kobj); 884 891 885 892 return ret; 886 893 } ··· 916 927 * structures that can be modified through sysfs. 917 928 */ 918 929 if (queue_is_mq(q)) 919 - blk_mq_unregister_dev(disk_to_dev(disk), q); 930 + blk_mq_sysfs_unregister(disk); 920 931 blk_crypto_sysfs_unregister(q); 921 - blk_trace_remove_sysfs(disk_to_dev(disk)); 922 932 923 933 mutex_lock(&q->sysfs_lock); 924 934 elv_unregister_queue(q); ··· 936 948 q->sched_debugfs_dir = NULL; 937 949 q->rqos_debugfs_dir = NULL; 938 950 mutex_unlock(&q->debugfs_mutex); 939 - 940 - kobject_put(&disk_to_dev(disk)->kobj); 941 951 }
+4 -3
block/blk-throttle.c
··· 2203 2203 2204 2204 #ifdef CONFIG_BLK_DEV_THROTTLING_LOW 2205 2205 static void throtl_track_latency(struct throtl_data *td, sector_t size, 2206 - int op, unsigned long time) 2206 + enum req_op op, unsigned long time) 2207 2207 { 2208 + const bool rw = op_is_write(op); 2208 2209 struct latency_bucket *latency; 2209 2210 int index; 2210 2211 ··· 2216 2215 2217 2216 index = request_bucket_index(size); 2218 2217 2219 - latency = get_cpu_ptr(td->latency_buckets[op]); 2218 + latency = get_cpu_ptr(td->latency_buckets[rw]); 2220 2219 latency[index].total_latency += time; 2221 2220 latency[index].samples++; 2222 - put_cpu_ptr(td->latency_buckets[op]); 2221 + put_cpu_ptr(td->latency_buckets[rw]); 2223 2222 } 2224 2223 2225 2224 void blk_throtl_stat_add(struct request *rq, u64 time_ns)
+20 -10
block/blk-wbt.c
··· 451 451 452 452 #define REQ_HIPRIO (REQ_SYNC | REQ_META | REQ_PRIO) 453 453 454 - static inline unsigned int get_limit(struct rq_wb *rwb, unsigned long rw) 454 + static inline unsigned int get_limit(struct rq_wb *rwb, blk_opf_t opf) 455 455 { 456 456 unsigned int limit; 457 457 ··· 462 462 if (!rwb_enabled(rwb)) 463 463 return UINT_MAX; 464 464 465 - if ((rw & REQ_OP_MASK) == REQ_OP_DISCARD) 465 + if ((opf & REQ_OP_MASK) == REQ_OP_DISCARD) 466 466 return rwb->wb_background; 467 467 468 468 /* ··· 473 473 * the idle limit, or go to normal if we haven't had competing 474 474 * IO for a bit. 475 475 */ 476 - if ((rw & REQ_HIPRIO) || wb_recent_wait(rwb) || current_is_kswapd()) 476 + if ((opf & REQ_HIPRIO) || wb_recent_wait(rwb) || current_is_kswapd()) 477 477 limit = rwb->rq_depth.max_depth; 478 - else if ((rw & REQ_BACKGROUND) || close_io(rwb)) { 478 + else if ((opf & REQ_BACKGROUND) || close_io(rwb)) { 479 479 /* 480 480 * If less than 100ms since we completed unrelated IO, 481 481 * limit us to half the depth for background writeback. ··· 490 490 struct wbt_wait_data { 491 491 struct rq_wb *rwb; 492 492 enum wbt_flags wb_acct; 493 - unsigned long rw; 493 + blk_opf_t opf; 494 494 }; 495 495 496 496 static bool wbt_inflight_cb(struct rq_wait *rqw, void *private_data) 497 497 { 498 498 struct wbt_wait_data *data = private_data; 499 - return rq_wait_inc_below(rqw, get_limit(data->rwb, data->rw)); 499 + return rq_wait_inc_below(rqw, get_limit(data->rwb, data->opf)); 500 500 } 501 501 502 502 static void wbt_cleanup_cb(struct rq_wait *rqw, void *private_data) ··· 510 510 * the timer to kick off queuing again. 511 511 */ 512 512 static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct, 513 - unsigned long rw) 513 + blk_opf_t opf) 514 514 { 515 515 struct rq_wait *rqw = get_rq_wait(rwb, wb_acct); 516 516 struct wbt_wait_data data = { 517 517 .rwb = rwb, 518 518 .wb_acct = wb_acct, 519 - .rw = rw, 519 + .opf = opf, 520 520 }; 521 521 522 522 rq_qos_wait(rqw, &data, wbt_inflight_cb, wbt_cleanup_cb); ··· 670 670 671 671 static int wbt_data_dir(const struct request *rq) 672 672 { 673 - const int op = req_op(rq); 673 + const enum req_op op = req_op(rq); 674 674 675 675 if (op == REQ_OP_READ) 676 676 return READ; ··· 820 820 { 821 821 struct rq_wb *rwb; 822 822 int i; 823 + int ret; 823 824 824 825 rwb = kzalloc(sizeof(*rwb), GFP_KERNEL); 825 826 if (!rwb) ··· 847 846 /* 848 847 * Assign rwb and add the stats callback. 849 848 */ 850 - rq_qos_add(q, &rwb->rqos); 849 + ret = rq_qos_add(q, &rwb->rqos); 850 + if (ret) 851 + goto err_free; 852 + 851 853 blk_stat_add_callback(q, rwb->cb); 852 854 853 855 rwb->min_lat_nsec = wbt_default_latency_nsec(q); ··· 859 855 wbt_set_write_cache(q, test_bit(QUEUE_FLAG_WC, &q->queue_flags)); 860 856 861 857 return 0; 858 + 859 + err_free: 860 + blk_stat_free_callback(rwb->cb); 861 + kfree(rwb); 862 + return ret; 863 + 862 864 }
+46 -46
block/blk-zoned.c
··· 57 57 */ 58 58 bool blk_req_needs_zone_write_lock(struct request *rq) 59 59 { 60 - if (!rq->q->seq_zones_wlock) 60 + if (blk_rq_is_passthrough(rq)) 61 61 return false; 62 62 63 - if (blk_rq_is_passthrough(rq)) 63 + if (!rq->q->disk->seq_zones_wlock) 64 64 return false; 65 65 66 66 switch (req_op(rq)) { ··· 77 77 { 78 78 unsigned int zno = blk_rq_zone_no(rq); 79 79 80 - if (test_and_set_bit(zno, rq->q->seq_zones_wlock)) 80 + if (test_and_set_bit(zno, rq->q->disk->seq_zones_wlock)) 81 81 return false; 82 82 83 83 WARN_ON_ONCE(rq->rq_flags & RQF_ZONE_WRITE_LOCKED); ··· 90 90 void __blk_req_zone_write_lock(struct request *rq) 91 91 { 92 92 if (WARN_ON_ONCE(test_and_set_bit(blk_rq_zone_no(rq), 93 - rq->q->seq_zones_wlock))) 93 + rq->q->disk->seq_zones_wlock))) 94 94 return; 95 95 96 96 WARN_ON_ONCE(rq->rq_flags & RQF_ZONE_WRITE_LOCKED); ··· 101 101 void __blk_req_zone_write_unlock(struct request *rq) 102 102 { 103 103 rq->rq_flags &= ~RQF_ZONE_WRITE_LOCKED; 104 - if (rq->q->seq_zones_wlock) 104 + if (rq->q->disk->seq_zones_wlock) 105 105 WARN_ON_ONCE(!test_and_clear_bit(blk_rq_zone_no(rq), 106 - rq->q->seq_zones_wlock)); 106 + rq->q->disk->seq_zones_wlock)); 107 107 } 108 108 EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock); 109 109 110 110 /** 111 - * blkdev_nr_zones - Get number of zones 112 - * @disk: Target gendisk 111 + * bdev_nr_zones - Get number of zones 112 + * @bdev: Target device 113 113 * 114 114 * Return the total number of zones of a zoned block device. For a block 115 115 * device without zone capabilities, the number of zones is always 0. 116 116 */ 117 - unsigned int blkdev_nr_zones(struct gendisk *disk) 117 + unsigned int bdev_nr_zones(struct block_device *bdev) 118 118 { 119 - sector_t zone_sectors = blk_queue_zone_sectors(disk->queue); 119 + sector_t zone_sectors = bdev_zone_sectors(bdev); 120 120 121 - if (!blk_queue_is_zoned(disk->queue)) 121 + if (!bdev_is_zoned(bdev)) 122 122 return 0; 123 - return (get_capacity(disk) + zone_sectors - 1) >> ilog2(zone_sectors); 123 + return (bdev_nr_sectors(bdev) + zone_sectors - 1) >> 124 + ilog2(zone_sectors); 124 125 } 125 - EXPORT_SYMBOL_GPL(blkdev_nr_zones); 126 + EXPORT_SYMBOL_GPL(bdev_nr_zones); 126 127 127 128 /** 128 129 * blkdev_report_zones - Get zones information ··· 150 149 struct gendisk *disk = bdev->bd_disk; 151 150 sector_t capacity = get_capacity(disk); 152 151 153 - if (!blk_queue_is_zoned(bdev_get_queue(bdev)) || 154 - WARN_ON_ONCE(!disk->fops->report_zones)) 152 + if (!bdev_is_zoned(bdev) || WARN_ON_ONCE(!disk->fops->report_zones)) 155 153 return -EOPNOTSUPP; 156 154 157 155 if (!nr_zones || sector >= capacity) ··· 189 189 static int blkdev_zone_reset_all_emulated(struct block_device *bdev, 190 190 gfp_t gfp_mask) 191 191 { 192 - struct request_queue *q = bdev_get_queue(bdev); 193 - sector_t capacity = get_capacity(bdev->bd_disk); 194 - sector_t zone_sectors = blk_queue_zone_sectors(q); 192 + struct gendisk *disk = bdev->bd_disk; 193 + sector_t capacity = bdev_nr_sectors(bdev); 194 + sector_t zone_sectors = bdev_zone_sectors(bdev); 195 195 unsigned long *need_reset; 196 196 struct bio *bio = NULL; 197 197 sector_t sector = 0; 198 198 int ret; 199 199 200 - need_reset = blk_alloc_zone_bitmap(q->node, q->nr_zones); 200 + need_reset = blk_alloc_zone_bitmap(disk->queue->node, disk->nr_zones); 201 201 if (!need_reset) 202 202 return -ENOMEM; 203 203 204 - ret = bdev->bd_disk->fops->report_zones(bdev->bd_disk, 0, 205 - q->nr_zones, blk_zone_need_reset_cb, 206 - need_reset); 204 + ret = disk->fops->report_zones(disk, 0, disk->nr_zones, 205 + blk_zone_need_reset_cb, need_reset); 207 206 if (ret < 0) 208 207 goto out_free_need_reset; 209 208 210 209 ret = 0; 211 210 while (sector < capacity) { 212 - if (!test_bit(blk_queue_zone_no(q, sector), need_reset)) { 211 + if (!test_bit(disk_zone_no(disk, sector), need_reset)) { 213 212 sector += zone_sectors; 214 213 continue; 215 214 } ··· 256 257 * The operation to execute on each zone can be a zone reset, open, close 257 258 * or finish request. 258 259 */ 259 - int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op, 260 - sector_t sector, sector_t nr_sectors, 261 - gfp_t gfp_mask) 260 + int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op, 261 + sector_t sector, sector_t nr_sectors, gfp_t gfp_mask) 262 262 { 263 263 struct request_queue *q = bdev_get_queue(bdev); 264 - sector_t zone_sectors = blk_queue_zone_sectors(q); 265 - sector_t capacity = get_capacity(bdev->bd_disk); 264 + sector_t zone_sectors = bdev_zone_sectors(bdev); 265 + sector_t capacity = bdev_nr_sectors(bdev); 266 266 sector_t end_sector = sector + nr_sectors; 267 267 struct bio *bio = NULL; 268 268 int ret = 0; 269 269 270 - if (!blk_queue_is_zoned(q)) 270 + if (!bdev_is_zoned(bdev)) 271 271 return -EOPNOTSUPP; 272 272 273 273 if (bdev_read_only(bdev)) ··· 348 350 if (!q) 349 351 return -ENXIO; 350 352 351 - if (!blk_queue_is_zoned(q)) 353 + if (!bdev_is_zoned(bdev)) 352 354 return -ENOTTY; 353 355 354 356 if (copy_from_user(&rep, argp, sizeof(struct blk_zone_report))) ··· 396 398 void __user *argp = (void __user *)arg; 397 399 struct request_queue *q; 398 400 struct blk_zone_range zrange; 399 - enum req_opf op; 401 + enum req_op op; 400 402 int ret; 401 403 402 404 if (!argp) ··· 406 408 if (!q) 407 409 return -ENXIO; 408 410 409 - if (!blk_queue_is_zoned(q)) 411 + if (!bdev_is_zoned(bdev)) 410 412 return -ENOTTY; 411 413 412 414 if (!(mode & FMODE_WRITE)) ··· 448 450 return ret; 449 451 } 450 452 451 - void blk_queue_free_zone_bitmaps(struct request_queue *q) 453 + void disk_free_zone_bitmaps(struct gendisk *disk) 452 454 { 453 - kfree(q->conv_zones_bitmap); 454 - q->conv_zones_bitmap = NULL; 455 - kfree(q->seq_zones_wlock); 456 - q->seq_zones_wlock = NULL; 455 + kfree(disk->conv_zones_bitmap); 456 + disk->conv_zones_bitmap = NULL; 457 + kfree(disk->seq_zones_wlock); 458 + disk->seq_zones_wlock = NULL; 457 459 } 458 460 459 461 struct blk_revalidate_zone_args { ··· 603 605 blk_mq_freeze_queue(q); 604 606 if (ret > 0) { 605 607 blk_queue_chunk_sectors(q, args.zone_sectors); 606 - q->nr_zones = args.nr_zones; 607 - swap(q->seq_zones_wlock, args.seq_zones_wlock); 608 - swap(q->conv_zones_bitmap, args.conv_zones_bitmap); 608 + disk->nr_zones = args.nr_zones; 609 + swap(disk->seq_zones_wlock, args.seq_zones_wlock); 610 + swap(disk->conv_zones_bitmap, args.conv_zones_bitmap); 609 611 if (update_driver_data) 610 612 update_driver_data(disk); 611 613 ret = 0; 612 614 } else { 613 615 pr_warn("%s: failed to revalidate zones\n", disk->disk_name); 614 - blk_queue_free_zone_bitmaps(q); 616 + disk_free_zone_bitmaps(disk); 615 617 } 616 618 blk_mq_unfreeze_queue(q); 617 619 ··· 621 623 } 622 624 EXPORT_SYMBOL_GPL(blk_revalidate_disk_zones); 623 625 624 - void blk_queue_clear_zone_settings(struct request_queue *q) 626 + void disk_clear_zone_settings(struct gendisk *disk) 625 627 { 628 + struct request_queue *q = disk->queue; 629 + 626 630 blk_mq_freeze_queue(q); 627 631 628 - blk_queue_free_zone_bitmaps(q); 632 + disk_free_zone_bitmaps(disk); 629 633 blk_queue_flag_clear(QUEUE_FLAG_ZONE_RESETALL, q); 630 634 q->required_elevator_features &= ~ELEVATOR_F_ZBD_SEQ_WRITE; 631 - q->nr_zones = 0; 632 - q->max_open_zones = 0; 633 - q->max_active_zones = 0; 635 + disk->nr_zones = 0; 636 + disk->max_open_zones = 0; 637 + disk->max_active_zones = 0; 634 638 q->limits.chunk_sectors = 0; 635 639 q->limits.zone_write_granularity = 0; 636 640 q->limits.max_zone_append_sectors = 0;
+23 -11
block/blk.h
··· 31 31 extern struct kobj_type blk_queue_ktype; 32 32 extern struct ida blk_queue_ida; 33 33 34 - static inline void __blk_get_queue(struct request_queue *q) 35 - { 36 - kobject_get(&q->kobj); 37 - } 38 - 39 34 bool is_flush_rq(struct request *req); 40 35 41 36 struct blk_flush_queue *blk_alloc_flush_queue(int node, int cmd_size, ··· 152 157 queue_max_discard_segments(req->q) > 1) 153 158 return true; 154 159 return false; 160 + } 161 + 162 + static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q, 163 + enum req_op op) 164 + { 165 + if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE)) 166 + return min(q->limits.max_discard_sectors, 167 + UINT_MAX >> SECTOR_SHIFT); 168 + 169 + if (unlikely(op == REQ_OP_WRITE_ZEROES)) 170 + return q->limits.max_write_zeroes_sectors; 171 + 172 + return q->limits.max_sectors; 155 173 } 156 174 157 175 #ifdef CONFIG_BLK_DEV_INTEGRITY ··· 400 392 #endif 401 393 402 394 #ifdef CONFIG_BLK_DEV_ZONED 403 - void blk_queue_free_zone_bitmaps(struct request_queue *q); 404 - void blk_queue_clear_zone_settings(struct request_queue *q); 395 + void disk_free_zone_bitmaps(struct gendisk *disk); 396 + void disk_clear_zone_settings(struct gendisk *disk); 405 397 #else 406 - static inline void blk_queue_free_zone_bitmaps(struct request_queue *q) {} 407 - static inline void blk_queue_clear_zone_settings(struct request_queue *q) {} 398 + static inline void disk_free_zone_bitmaps(struct gendisk *disk) {} 399 + static inline void disk_clear_zone_settings(struct gendisk *disk) {} 408 400 #endif 409 401 410 402 int blk_alloc_ext_minor(void); ··· 418 410 int bdev_resize_partition(struct gendisk *disk, int partno, sector_t start, 419 411 sector_t length); 420 412 void blk_drop_partitions(struct gendisk *disk); 413 + 414 + struct gendisk *__alloc_disk_node(struct request_queue *q, int node_id, 415 + struct lock_class_key *lkclass); 421 416 422 417 int bio_add_hw_page(struct request_queue *q, struct bio *bio, 423 418 struct page *page, unsigned int len, unsigned int offset, ··· 447 436 extern struct device_attribute dev_attr_events_async; 448 437 extern struct device_attribute dev_attr_events_poll_msecs; 449 438 439 + extern struct attribute_group blk_trace_attr_group; 440 + 450 441 long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); 451 442 long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); 452 443 453 444 extern const struct address_space_operations def_blk_aops; 454 445 455 - int disk_register_independent_access_ranges(struct gendisk *disk, 456 - struct blk_independent_access_ranges *new_iars); 446 + int disk_register_independent_access_ranges(struct gendisk *disk); 457 447 void disk_unregister_independent_access_ranges(struct gendisk *disk); 458 448 459 449 #ifdef CONFIG_FAIL_MAKE_REQUEST
+10 -3
block/bounce.c
··· 205 205 int rw = bio_data_dir(*bio_orig); 206 206 struct bio_vec *to, from; 207 207 struct bvec_iter iter; 208 - unsigned i = 0; 208 + unsigned i = 0, bytes = 0; 209 209 bool bounce = false; 210 - int sectors = 0; 210 + int sectors; 211 211 212 212 bio_for_each_segment(from, *bio_orig, iter) { 213 213 if (i++ < BIO_MAX_VECS) 214 - sectors += from.bv_len >> 9; 214 + bytes += from.bv_len; 215 215 if (PageHighMem(from.bv_page)) 216 216 bounce = true; 217 217 } 218 218 if (!bounce) 219 219 return; 220 220 221 + /* 222 + * Individual bvecs might not be logical block aligned. Round down 223 + * the split size so that each bio is properly block size aligned, 224 + * even if we do not use the full hardware limits. 225 + */ 226 + sectors = ALIGN_DOWN(bytes, queue_logical_block_size(q)) >> 227 + SECTOR_SHIFT; 221 228 if (sectors < bio_sectors(*bio_orig)) { 222 229 bio = bio_split(*bio_orig, sectors, GFP_NOIO, &bounce_bio_split); 223 230 bio_chain(bio, *bio_orig);
+3 -3
block/bsg-lib.c
··· 324 324 container_of(q->tag_set, struct bsg_set, tag_set); 325 325 326 326 bsg_unregister_queue(bset->bd); 327 - blk_cleanup_queue(q); 327 + blk_mq_destroy_queue(q); 328 328 blk_mq_free_tag_set(&bset->tag_set); 329 329 kfree(bset); 330 330 } 331 331 } 332 332 EXPORT_SYMBOL_GPL(bsg_remove_queue); 333 333 334 - static enum blk_eh_timer_return bsg_timeout(struct request *rq, bool reserved) 334 + static enum blk_eh_timer_return bsg_timeout(struct request *rq) 335 335 { 336 336 struct bsg_set *bset = 337 337 container_of(rq->q->tag_set, struct bsg_set, tag_set); ··· 399 399 400 400 return q; 401 401 out_cleanup_queue: 402 - blk_cleanup_queue(q); 402 + blk_mq_destroy_queue(q); 403 403 out_queue: 404 404 blk_mq_free_tag_set(set); 405 405 out_tag_set:
+1 -1
block/elevator.h
··· 34 34 int (*request_merge)(struct request_queue *q, struct request **, struct bio *); 35 35 void (*request_merged)(struct request_queue *, struct request *, enum elv_merge); 36 36 void (*requests_merged)(struct request_queue *, struct request *, struct request *); 37 - void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *); 37 + void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *); 38 38 void (*prepare_request)(struct request *); 39 39 void (*finish_request)(struct request *); 40 40 void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+16 -12
block/fops.c
··· 32 32 return 0; 33 33 } 34 34 35 - static unsigned int dio_bio_write_op(struct kiocb *iocb) 35 + static blk_opf_t dio_bio_write_op(struct kiocb *iocb) 36 36 { 37 - unsigned int op = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; 37 + blk_opf_t opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; 38 38 39 39 /* avoid the need for a I/O completion work item */ 40 40 if (iocb->ki_flags & IOCB_DSYNC) 41 - op |= REQ_FUA; 42 - return op; 41 + opf |= REQ_FUA; 42 + return opf; 43 + } 44 + 45 + static bool blkdev_dio_unaligned(struct block_device *bdev, loff_t pos, 46 + struct iov_iter *iter) 47 + { 48 + return pos & (bdev_logical_block_size(bdev) - 1) || 49 + !bdev_iter_is_aligned(bdev, iter); 43 50 } 44 51 45 52 #define DIO_INLINE_BIO_VECS 4 ··· 61 54 struct bio bio; 62 55 ssize_t ret; 63 56 64 - if ((pos | iov_iter_alignment(iter)) & 65 - (bdev_logical_block_size(bdev) - 1)) 57 + if (blkdev_dio_unaligned(bdev, pos, iter)) 66 58 return -EINVAL; 67 59 68 60 if (nr_pages <= DIO_INLINE_BIO_VECS) ··· 175 169 struct blkdev_dio *dio; 176 170 struct bio *bio; 177 171 bool is_read = (iov_iter_rw(iter) == READ), is_sync; 178 - unsigned int opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); 172 + blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); 179 173 loff_t pos = iocb->ki_pos; 180 174 int ret = 0; 181 175 182 - if ((pos | iov_iter_alignment(iter)) & 183 - (bdev_logical_block_size(bdev) - 1)) 176 + if (blkdev_dio_unaligned(bdev, pos, iter)) 184 177 return -EINVAL; 185 178 186 179 if (iocb->ki_flags & IOCB_ALLOC_CACHE) ··· 297 292 { 298 293 struct block_device *bdev = iocb->ki_filp->private_data; 299 294 bool is_read = iov_iter_rw(iter) == READ; 300 - unsigned int opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); 295 + blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); 301 296 struct blkdev_dio *dio; 302 297 struct bio *bio; 303 298 loff_t pos = iocb->ki_pos; 304 299 int ret = 0; 305 300 306 - if ((pos | iov_iter_alignment(iter)) & 307 - (bdev_logical_block_size(bdev) - 1)) 301 + if (blkdev_dio_unaligned(bdev, pos, iter)) 308 302 return -EINVAL; 309 303 310 304 if (iocb->ki_flags & IOCB_ALLOC_CACHE)
+32 -48
block/genhd.c
··· 101 101 } 102 102 EXPORT_SYMBOL_GPL(set_capacity_and_notify); 103 103 104 - /* 105 - * Format the device name of the indicated block device into the supplied buffer 106 - * and return a pointer to that same buffer for convenience. 107 - * 108 - * Note: do not use this in new code, use the %pg specifier to sprintf and 109 - * printk insted. 110 - */ 111 - const char *bdevname(struct block_device *bdev, char *buf) 112 - { 113 - struct gendisk *hd = bdev->bd_disk; 114 - int partno = bdev->bd_partno; 115 - 116 - if (!partno) 117 - snprintf(buf, BDEVNAME_SIZE, "%s", hd->disk_name); 118 - else if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) 119 - snprintf(buf, BDEVNAME_SIZE, "%sp%d", hd->disk_name, partno); 120 - else 121 - snprintf(buf, BDEVNAME_SIZE, "%s%d", hd->disk_name, partno); 122 - 123 - return buf; 124 - } 125 - EXPORT_SYMBOL(bdevname); 126 - 127 104 static void part_stat_read_all(struct block_device *part, 128 105 struct disk_stats *stat) 129 106 { ··· 594 617 * Fail any new I/O. 595 618 */ 596 619 set_bit(GD_DEAD, &disk->state); 620 + if (test_bit(GD_OWNS_QUEUE, &disk->state)) 621 + blk_queue_flag_set(QUEUE_FLAG_DYING, q); 597 622 set_capacity(disk, 0); 598 623 599 624 /* ··· 642 663 blk_mq_unquiesce_queue(q); 643 664 644 665 /* 645 - * Allow using passthrough request again after the queue is torn down. 666 + * If the disk does not own the queue, allow using passthrough requests 667 + * again. Else leave the queue frozen to fail all I/O. 646 668 */ 647 - blk_queue_flag_clear(QUEUE_FLAG_INIT_DONE, q); 648 - __blk_mq_unfreeze_queue(q, true); 649 - 669 + if (!test_bit(GD_OWNS_QUEUE, &disk->state)) { 670 + blk_queue_flag_clear(QUEUE_FLAG_INIT_DONE, q); 671 + __blk_mq_unfreeze_queue(q, true); 672 + } else { 673 + if (queue_is_mq(q)) 674 + blk_mq_exit_queue(q); 675 + } 650 676 } 651 677 EXPORT_SYMBOL(del_gendisk); 652 678 ··· 1111 1127 1112 1128 static const struct attribute_group *disk_attr_groups[] = { 1113 1129 &disk_attr_group, 1130 + #ifdef CONFIG_BLK_DEV_IO_TRACE 1131 + &blk_trace_attr_group, 1132 + #endif 1114 1133 NULL 1115 1134 }; 1116 1135 ··· 1138 1151 might_sleep(); 1139 1152 WARN_ON_ONCE(disk_live(disk)); 1140 1153 1154 + /* 1155 + * To undo the all initialization from blk_mq_init_allocated_queue in 1156 + * case of a probe failure where add_disk is never called we have to 1157 + * call blk_mq_exit_queue here. We can't do this for the more common 1158 + * teardown case (yet) as the tagset can be gone by the time the disk 1159 + * is released once it was added. 1160 + */ 1161 + if (queue_is_mq(disk->queue) && 1162 + test_bit(GD_OWNS_QUEUE, &disk->state) && 1163 + !test_bit(GD_ADDED, &disk->state)) 1164 + blk_mq_exit_queue(disk->queue); 1165 + 1141 1166 blkcg_exit_queue(disk->queue); 1142 1167 1143 1168 disk_release_events(disk); 1144 1169 kfree(disk->random); 1170 + disk_free_zone_bitmaps(disk); 1145 1171 xa_destroy(&disk->part_tbl); 1146 1172 1147 1173 disk->queue->disk = NULL; ··· 1338 1338 { 1339 1339 struct gendisk *disk; 1340 1340 1341 - if (!blk_get_queue(q)) 1342 - return NULL; 1343 - 1344 1341 disk = kzalloc_node(sizeof(struct gendisk), GFP_KERNEL, node_id); 1345 1342 if (!disk) 1346 1343 goto out_put_queue; ··· 1388 1391 blk_put_queue(q); 1389 1392 return NULL; 1390 1393 } 1391 - EXPORT_SYMBOL(__alloc_disk_node); 1392 1394 1393 1395 struct gendisk *__blk_alloc_disk(int node, struct lock_class_key *lkclass) 1394 1396 { ··· 1400 1404 1401 1405 disk = __alloc_disk_node(q, node, lkclass); 1402 1406 if (!disk) { 1403 - blk_cleanup_queue(q); 1407 + blk_put_queue(q); 1404 1408 return NULL; 1405 1409 } 1410 + set_bit(GD_OWNS_QUEUE, &disk->state); 1406 1411 return disk; 1407 1412 } 1408 1413 EXPORT_SYMBOL(__blk_alloc_disk); ··· 1415 1418 * This decrements the refcount for the struct gendisk. When this reaches 0 1416 1419 * we'll have disk_release() called. 1417 1420 * 1421 + * Note: for blk-mq disk put_disk must be called before freeing the tag_set 1422 + * when handling probe errors (that is before add_disk() is called). 1423 + * 1418 1424 * Context: Any context, but the last reference must not be dropped from 1419 1425 * atomic context. 1420 1426 */ ··· 1427 1427 put_device(disk_to_dev(disk)); 1428 1428 } 1429 1429 EXPORT_SYMBOL(put_disk); 1430 - 1431 - /** 1432 - * blk_cleanup_disk - shutdown a gendisk allocated by blk_alloc_disk 1433 - * @disk: gendisk to shutdown 1434 - * 1435 - * Mark the queue hanging off @disk DYING, drain all pending requests, then mark 1436 - * the queue DEAD, destroy and put it and the gendisk structure. 1437 - * 1438 - * Context: can sleep 1439 - */ 1440 - void blk_cleanup_disk(struct gendisk *disk) 1441 - { 1442 - blk_cleanup_queue(disk->queue); 1443 - put_disk(disk); 1444 - } 1445 - EXPORT_SYMBOL(blk_cleanup_disk); 1446 1430 1447 1431 static void set_disk_ro_uevent(struct gendisk *gd, int ro) 1448 1432 {
+1 -1
block/ioctl.c
··· 495 495 case BLKGETZONESZ: 496 496 return put_uint(argp, bdev_zone_sectors(bdev)); 497 497 case BLKGETNRZONES: 498 - return put_uint(argp, blkdev_nr_zones(bdev->bd_disk)); 498 + return put_uint(argp, bdev_nr_zones(bdev)); 499 499 case BLKROGET: 500 500 return put_int(argp, bdev_read_only(bdev) != 0); 501 501 case BLKSSZGET: /* get block device logical block size */
+51 -9
block/ioprio.c
··· 138 138 return ret; 139 139 } 140 140 141 + /* 142 + * If the task has set an I/O priority, use that. Otherwise, return 143 + * the default I/O priority. 144 + * 145 + * Expected to be called for current task or with task_lock() held to keep 146 + * io_context stable. 147 + */ 148 + int __get_task_ioprio(struct task_struct *p) 149 + { 150 + struct io_context *ioc = p->io_context; 151 + int prio; 152 + 153 + if (p != current) 154 + lockdep_assert_held(&p->alloc_lock); 155 + if (ioc) 156 + prio = ioc->ioprio; 157 + else 158 + prio = IOPRIO_DEFAULT; 159 + 160 + if (IOPRIO_PRIO_CLASS(prio) == IOPRIO_CLASS_NONE) 161 + prio = IOPRIO_PRIO_VALUE(task_nice_ioclass(p), 162 + task_nice_ioprio(p)); 163 + return prio; 164 + } 165 + EXPORT_SYMBOL_GPL(__get_task_ioprio); 166 + 141 167 static int get_task_ioprio(struct task_struct *p) 142 168 { 143 169 int ret; ··· 171 145 ret = security_task_getioprio(p); 172 146 if (ret) 173 147 goto out; 174 - ret = IOPRIO_DEFAULT; 175 148 task_lock(p); 176 - if (p->io_context) 177 - ret = p->io_context->ioprio; 149 + ret = __get_task_ioprio(p); 178 150 task_unlock(p); 179 151 out: 180 152 return ret; 181 153 } 182 154 183 - int ioprio_best(unsigned short aprio, unsigned short bprio) 155 + /* 156 + * Return raw IO priority value as set by userspace. We use this for 157 + * ioprio_get(pid, IOPRIO_WHO_PROCESS) so that we keep historical behavior and 158 + * also so that userspace can distinguish unset IO priority (which just gets 159 + * overriden based on task's nice value) from IO priority set to some value. 160 + */ 161 + static int get_task_raw_ioprio(struct task_struct *p) 184 162 { 185 - if (!ioprio_valid(aprio)) 186 - aprio = IOPRIO_DEFAULT; 187 - if (!ioprio_valid(bprio)) 188 - bprio = IOPRIO_DEFAULT; 163 + int ret; 189 164 165 + ret = security_task_getioprio(p); 166 + if (ret) 167 + goto out; 168 + task_lock(p); 169 + if (p->io_context) 170 + ret = p->io_context->ioprio; 171 + else 172 + ret = IOPRIO_DEFAULT; 173 + task_unlock(p); 174 + out: 175 + return ret; 176 + } 177 + 178 + static int ioprio_best(unsigned short aprio, unsigned short bprio) 179 + { 190 180 return min(aprio, bprio); 191 181 } 192 182 ··· 223 181 else 224 182 p = find_task_by_vpid(who); 225 183 if (p) 226 - ret = get_task_ioprio(p); 184 + ret = get_task_raw_ioprio(p); 227 185 break; 228 186 case IOPRIO_WHO_PGRP: 229 187 if (!who)
+4 -4
block/kyber-iosched.c
··· 195 195 static int kyber_domain_wake(wait_queue_entry_t *wait, unsigned mode, int flags, 196 196 void *key); 197 197 198 - static unsigned int kyber_sched_domain(unsigned int op) 198 + static unsigned int kyber_sched_domain(blk_opf_t opf) 199 199 { 200 - switch (op & REQ_OP_MASK) { 200 + switch (opf & REQ_OP_MASK) { 201 201 case REQ_OP_READ: 202 202 return KYBER_READ; 203 203 case REQ_OP_WRITE: ··· 553 553 } 554 554 } 555 555 556 - static void kyber_limit_depth(unsigned int op, struct blk_mq_alloc_data *data) 556 + static void kyber_limit_depth(blk_opf_t opf, struct blk_mq_alloc_data *data) 557 557 { 558 558 /* 559 559 * We use the scheduler tags as per-hardware queue queueing tokens. 560 560 * Async requests can be limited at this stage. 561 561 */ 562 - if (!op_is_sync(op)) { 562 + if (!op_is_sync(opf)) { 563 563 struct kyber_queue_data *kqd = data->q->elevator->elevator_data; 564 564 565 565 data->shallow_depth = kqd->async_depth;
+2 -2
block/mq-deadline.c
··· 543 543 * Called by __blk_mq_alloc_request(). The shallow_depth value set by this 544 544 * function is used by __blk_mq_get_tag(). 545 545 */ 546 - static void dd_limit_depth(unsigned int op, struct blk_mq_alloc_data *data) 546 + static void dd_limit_depth(blk_opf_t opf, struct blk_mq_alloc_data *data) 547 547 { 548 548 struct deadline_data *dd = data->q->elevator->elevator_data; 549 549 550 550 /* Do not throttle synchronous reads. */ 551 - if (op_is_sync(op) && !op_is_write(op)) 551 + if (op_is_sync(opf) && !op_is_write(opf)) 552 552 return; 553 553 554 554 /*
+1 -2
block/partitions/core.c
··· 9 9 #include <linux/slab.h> 10 10 #include <linux/ctype.h> 11 11 #include <linux/vmalloc.h> 12 - #include <linux/blktrace_api.h> 13 12 #include <linux/raid/detect.h> 14 13 #include "check.h" 15 14 ··· 330 331 case BLK_ZONED_HA: 331 332 pr_info("%s: disabling host aware zoned block device support due to partitions\n", 332 333 disk->disk_name); 333 - blk_queue_set_zoned(disk, BLK_ZONED_NONE); 334 + disk_set_zoned(disk, BLK_ZONED_NONE); 334 335 break; 335 336 case BLK_ZONED_NONE: 336 337 break;
+9
drivers/block/Kconfig
··· 408 408 409 409 If unsure, say N. 410 410 411 + config BLK_DEV_UBLK 412 + tristate "Userspace block driver (Experimental)" 413 + select IO_URING 414 + help 415 + io_uring based userspace block driver. Together with ublk server, ublk 416 + has been working well, but interface with userspace or command data 417 + definition isn't finalized yet, and might change according to future 418 + requirement, so mark is as experimental now. 419 + 411 420 source "drivers/block/rnbd/Kconfig" 412 421 413 422 endif # BLK_DEV
+2
drivers/block/Makefile
··· 39 39 40 40 obj-$(CONFIG_BLK_DEV_NULL_BLK) += null_blk/ 41 41 42 + obj-$(CONFIG_BLK_DEV_UBLK) += ublk_drv.o 43 + 42 44 swim_mod-y := swim.o swim_asm.o
+1 -1
drivers/block/amiflop.c
··· 1802 1802 unit[drive].gendisk[system] = disk; 1803 1803 err = add_disk(disk); 1804 1804 if (err) 1805 - blk_cleanup_disk(disk); 1805 + put_disk(disk); 1806 1806 return err; 1807 1807 } 1808 1808
+1 -1
drivers/block/aoe/aoeblk.c
··· 427 427 return; 428 428 429 429 out_disk_cleanup: 430 - blk_cleanup_disk(gd); 430 + put_disk(gd); 431 431 err_tagset: 432 432 blk_mq_free_tag_set(set); 433 433 err_mempool:
+1 -1
drivers/block/aoe/aoedev.c
··· 277 277 if (d->gd) { 278 278 aoedisk_rm_debugfs(d); 279 279 del_gendisk(d->gd); 280 - blk_cleanup_disk(d->gd); 280 + put_disk(d->gd); 281 281 blk_mq_free_tag_set(&d->tag_set); 282 282 } 283 283 t = d->targets;
+2 -3
drivers/block/ataflop.c
··· 2031 2031 return; 2032 2032 2033 2033 cleanup_disk: 2034 - blk_cleanup_disk(unit[drive].disk[type]); 2034 + put_disk(unit[drive].disk[type]); 2035 2035 unit[drive].disk[type] = NULL; 2036 2036 } 2037 2037 ··· 2045 2045 if (!unit[i].disk[type]) 2046 2046 continue; 2047 2047 del_gendisk(unit[i].disk[type]); 2048 - blk_cleanup_queue(unit[i].disk[type]->queue); 2049 2048 put_disk(unit[i].disk[type]); 2050 2049 } 2051 2050 blk_mq_free_tag_set(&unit[i].tag_set); ··· 2063 2064 continue; 2064 2065 if (fs->registered[type]) 2065 2066 del_gendisk(fs->disk[type]); 2066 - blk_cleanup_disk(fs->disk[type]); 2067 + put_disk(fs->disk[type]); 2067 2068 } 2068 2069 blk_mq_free_tag_set(&fs->tag_set); 2069 2070 }
+4 -4
drivers/block/brd.c
··· 256 256 * Process a single bvec of a bio. 257 257 */ 258 258 static int brd_do_bvec(struct brd_device *brd, struct page *page, 259 - unsigned int len, unsigned int off, unsigned int op, 259 + unsigned int len, unsigned int off, enum req_op op, 260 260 sector_t sector) 261 261 { 262 262 void *mem; ··· 310 310 } 311 311 312 312 static int brd_rw_page(struct block_device *bdev, sector_t sector, 313 - struct page *page, unsigned int op) 313 + struct page *page, enum req_op op) 314 314 { 315 315 struct brd_device *brd = bdev->bd_disk->private_data; 316 316 int err; ··· 419 419 return 0; 420 420 421 421 out_cleanup_disk: 422 - blk_cleanup_disk(disk); 422 + put_disk(disk); 423 423 out_free_dev: 424 424 list_del(&brd->brd_list); 425 425 kfree(brd); ··· 439 439 440 440 list_for_each_entry_safe(brd, next, &brd_devices, brd_list) { 441 441 del_gendisk(brd->brd_disk); 442 - blk_cleanup_disk(brd->brd_disk); 442 + put_disk(brd->brd_disk); 443 443 brd_free_pages(brd); 444 444 list_del(&brd->brd_list); 445 445 kfree(brd);
+5 -4
drivers/block/drbd/drbd_actlog.c
··· 124 124 125 125 static int _drbd_md_sync_page_io(struct drbd_device *device, 126 126 struct drbd_backing_dev *bdev, 127 - sector_t sector, int op) 127 + sector_t sector, enum req_op op) 128 128 { 129 129 struct bio *bio; 130 130 /* we do all our meta data IO in aligned 4k blocks. */ 131 131 const int size = 4096; 132 - int err, op_flags = 0; 132 + int err; 133 + blk_opf_t op_flags = 0; 133 134 134 135 device->md_io.done = 0; 135 136 device->md_io.error = -ENODEV; ··· 175 174 } 176 175 177 176 int drbd_md_sync_page_io(struct drbd_device *device, struct drbd_backing_dev *bdev, 178 - sector_t sector, int op) 177 + sector_t sector, enum req_op op) 179 178 { 180 179 int err; 181 180 D_ASSERT(device, atomic_read(&device->md_io.in_use) == 1); ··· 386 385 write_al_updates = rcu_dereference(device->ldev->disk_conf)->al_updates; 387 386 rcu_read_unlock(); 388 387 if (write_al_updates) { 389 - if (drbd_md_sync_page_io(device, device->ldev, sector, WRITE)) { 388 + if (drbd_md_sync_page_io(device, device->ldev, sector, REQ_OP_WRITE)) { 390 389 err = -EIO; 391 390 drbd_chk_io_error(device, 1, DRBD_META_IO_ERROR); 392 391 } else {
+1 -1
drivers/block/drbd/drbd_bitmap.c
··· 977 977 static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_hold(local) 978 978 { 979 979 struct drbd_device *device = ctx->device; 980 - unsigned int op = (ctx->flags & BM_AIO_READ) ? REQ_OP_READ : REQ_OP_WRITE; 980 + enum req_op op = ctx->flags & BM_AIO_READ ? REQ_OP_READ : REQ_OP_WRITE; 981 981 struct bio *bio = bio_alloc_bioset(device->ldev->md_bdev, 1, op, 982 982 GFP_NOIO, &drbd_md_io_bio_set); 983 983 struct drbd_bitmap *b = device->bitmap;
+2 -3
drivers/block/drbd/drbd_int.h
··· 1495 1495 extern void *drbd_md_get_buffer(struct drbd_device *device, const char *intent); 1496 1496 extern void drbd_md_put_buffer(struct drbd_device *device); 1497 1497 extern int drbd_md_sync_page_io(struct drbd_device *device, 1498 - struct drbd_backing_dev *bdev, sector_t sector, int op); 1498 + struct drbd_backing_dev *bdev, sector_t sector, enum req_op op); 1499 1499 extern void drbd_ov_out_of_sync_found(struct drbd_device *, sector_t, int); 1500 1500 extern void wait_until_done_or_force_detached(struct drbd_device *device, 1501 1501 struct drbd_backing_dev *bdev, unsigned int *done); ··· 1547 1547 extern bool drbd_rs_should_slow_down(struct drbd_device *device, sector_t sector, 1548 1548 bool throttle_if_app_is_waiting); 1549 1549 extern int drbd_submit_peer_request(struct drbd_device *, 1550 - struct drbd_peer_request *, const unsigned, 1551 - const unsigned, const int); 1550 + struct drbd_peer_request *, blk_opf_t, int); 1552 1551 extern int drbd_free_peer_reqs(struct drbd_device *, struct list_head *); 1553 1552 extern struct drbd_peer_request *drbd_alloc_peer_req(struct drbd_peer_device *, u64, 1554 1553 sector_t, unsigned int,
+2 -2
drivers/block/drbd/drbd_main.c
··· 2207 2207 if (device->bitmap) /* should no longer be there. */ 2208 2208 drbd_bm_cleanup(device); 2209 2209 __free_page(device->md_io.page); 2210 - blk_cleanup_disk(device->vdisk); 2210 + put_disk(device->vdisk); 2211 2211 kfree(device->rs_plan_s); 2212 2212 2213 2213 /* not for_each_connection(connection, resource): ··· 2807 2807 out_no_bitmap: 2808 2808 __free_page(device->md_io.page); 2809 2809 out_no_io_page: 2810 - blk_cleanup_disk(disk); 2810 + put_disk(disk); 2811 2811 out_no_disk: 2812 2812 kref_put(&resource->kref, drbd_destroy_resource); 2813 2813 kfree(device);
+12 -12
drivers/block/drbd/drbd_receiver.c
··· 1621 1621 /* TODO allocate from our own bio_set. */ 1622 1622 int drbd_submit_peer_request(struct drbd_device *device, 1623 1623 struct drbd_peer_request *peer_req, 1624 - const unsigned op, const unsigned op_flags, 1625 - const int fault_type) 1624 + const blk_opf_t opf, const int fault_type) 1626 1625 { 1627 1626 struct bio *bios = NULL; 1628 1627 struct bio *bio; ··· 1667 1668 * generated bio, but a bio allocated on behalf of the peer. 1668 1669 */ 1669 1670 next_bio: 1670 - bio = bio_alloc(device->ldev->backing_bdev, nr_pages, op | op_flags, 1671 - GFP_NOIO); 1671 + bio = bio_alloc(device->ldev->backing_bdev, nr_pages, opf, GFP_NOIO); 1672 1672 /* > peer_req->i.sector, unless this is the first bio */ 1673 1673 bio->bi_iter.bi_sector = sector; 1674 1674 bio->bi_private = peer_req; ··· 2058 2060 spin_unlock_irq(&device->resource->req_lock); 2059 2061 2060 2062 atomic_add(pi->size >> 9, &device->rs_sect_ev); 2061 - if (drbd_submit_peer_request(device, peer_req, REQ_OP_WRITE, 0, 2063 + if (drbd_submit_peer_request(device, peer_req, REQ_OP_WRITE, 2062 2064 DRBD_FAULT_RS_WR) == 0) 2063 2065 return 0; 2064 2066 ··· 2381 2383 /* see also bio_flags_to_wire() 2382 2384 * DRBD_REQ_*, because we need to semantically map the flags to data packet 2383 2385 * flags and back. We may replicate to other kernel versions. */ 2384 - static unsigned long wire_flags_to_bio_flags(u32 dpf) 2386 + static blk_opf_t wire_flags_to_bio_flags(u32 dpf) 2385 2387 { 2386 2388 return (dpf & DP_RW_SYNC ? REQ_SYNC : 0) | 2387 2389 (dpf & DP_FUA ? REQ_FUA : 0) | 2388 2390 (dpf & DP_FLUSH ? REQ_PREFLUSH : 0); 2389 2391 } 2390 2392 2391 - static unsigned long wire_flags_to_bio_op(u32 dpf) 2393 + static enum req_op wire_flags_to_bio_op(u32 dpf) 2392 2394 { 2393 2395 if (dpf & DP_ZEROES) 2394 2396 return REQ_OP_WRITE_ZEROES; ··· 2541 2543 struct drbd_peer_request *peer_req; 2542 2544 struct p_data *p = pi->data; 2543 2545 u32 peer_seq = be32_to_cpu(p->seq_num); 2544 - int op, op_flags; 2546 + enum req_op op; 2547 + blk_opf_t op_flags; 2545 2548 u32 dp_flags; 2546 2549 int err, tp; 2547 2550 ··· 2680 2681 peer_req->flags |= EE_CALL_AL_COMPLETE_IO; 2681 2682 } 2682 2683 2683 - err = drbd_submit_peer_request(device, peer_req, op, op_flags, 2684 + err = drbd_submit_peer_request(device, peer_req, op | op_flags, 2684 2685 DRBD_FAULT_DT_WR); 2685 2686 if (!err) 2686 2687 return 0; ··· 2978 2979 submit: 2979 2980 update_receiver_timing_details(connection, drbd_submit_peer_request); 2980 2981 inc_unacked(device); 2981 - if (drbd_submit_peer_request(device, peer_req, REQ_OP_READ, 0, 2982 + if (drbd_submit_peer_request(device, peer_req, REQ_OP_READ, 2982 2983 fault_type) == 0) 2983 2984 return 0; 2984 2985 ··· 4950 4951 4951 4952 if (get_ldev(device)) { 4952 4953 struct drbd_peer_request *peer_req; 4953 - const int op = REQ_OP_WRITE_ZEROES; 4954 + const enum req_op op = REQ_OP_WRITE_ZEROES; 4954 4955 4955 4956 peer_req = drbd_alloc_peer_req(peer_device, ID_SYNCER, sector, 4956 4957 size, 0, GFP_NOIO); ··· 4968 4969 spin_unlock_irq(&device->resource->req_lock); 4969 4970 4970 4971 atomic_add(pi->size >> 9, &device->rs_sect_ev); 4971 - err = drbd_submit_peer_request(device, peer_req, op, 0, DRBD_FAULT_RS_WR); 4972 + err = drbd_submit_peer_request(device, peer_req, op, 4973 + DRBD_FAULT_RS_WR); 4972 4974 4973 4975 if (err) { 4974 4976 spin_lock_irq(&device->resource->req_lock);
+2 -4
drivers/block/drbd/drbd_req.c
··· 523 523 524 524 static void drbd_report_io_error(struct drbd_device *device, struct drbd_request *req) 525 525 { 526 - char b[BDEVNAME_SIZE]; 527 - 528 526 if (!__ratelimit(&drbd_ratelimit_state)) 529 527 return; 530 528 531 - drbd_warn(device, "local %s IO error sector %llu+%u on %s\n", 529 + drbd_warn(device, "local %s IO error sector %llu+%u on %pg\n", 532 530 (req->rq_state & RQ_WRITE) ? "WRITE" : "READ", 533 531 (unsigned long long)req->i.sector, 534 532 req->i.size >> 9, 535 - bdevname(device->ldev->backing_bdev, b)); 533 + device->ldev->backing_bdev); 536 534 } 537 535 538 536 /* Helper for HANDED_OVER_TO_NETWORK.
+1 -1
drivers/block/drbd/drbd_worker.c
··· 405 405 spin_unlock_irq(&device->resource->req_lock); 406 406 407 407 atomic_add(size >> 9, &device->rs_sect_ev); 408 - if (drbd_submit_peer_request(device, peer_req, REQ_OP_READ, 0, 408 + if (drbd_submit_peer_request(device, peer_req, REQ_OP_READ, 409 409 DRBD_FAULT_RS_RD) == 0) 410 410 return 0; 411 411
+4 -4
drivers/block/floppy.c
··· 2859 2859 if (WARN(atomic_read(&usage_count) == 0, 2860 2860 "warning: usage count=0, current_req=%p sect=%ld flags=%llx\n", 2861 2861 current_req, (long)blk_rq_pos(current_req), 2862 - (unsigned long long) current_req->cmd_flags)) 2862 + (__force unsigned long long) current_req->cmd_flags)) 2863 2863 return BLK_STS_IOERR; 2864 2864 2865 2865 if (test_and_set_bit(0, &fdc_busy)) { ··· 4557 4557 return; 4558 4558 4559 4559 cleanup_disk: 4560 - blk_cleanup_disk(disks[drive][type]); 4560 + put_disk(disks[drive][type]); 4561 4561 disks[drive][type] = NULL; 4562 4562 mutex_unlock(&floppy_probe_lock); 4563 4563 } ··· 4753 4753 if (!disks[drive][0]) 4754 4754 break; 4755 4755 del_timer_sync(&motor_off_timer[drive]); 4756 - blk_cleanup_disk(disks[drive][0]); 4756 + put_disk(disks[drive][0]); 4757 4757 blk_mq_free_tag_set(&tag_sets[drive]); 4758 4758 } 4759 4759 return err; ··· 4985 4985 } 4986 4986 for (i = 0; i < ARRAY_SIZE(floppy_type); i++) { 4987 4987 if (disks[drive][i]) 4988 - blk_cleanup_disk(disks[drive][i]); 4988 + put_disk(disks[drive][i]); 4989 4989 } 4990 4990 blk_mq_free_tag_set(&tag_sets[drive]); 4991 4991 }
+1 -2
drivers/block/loop.c
··· 2040 2040 return i; 2041 2041 2042 2042 out_cleanup_disk: 2043 - blk_cleanup_disk(disk); 2043 + put_disk(disk); 2044 2044 out_cleanup_tags: 2045 2045 blk_mq_free_tag_set(&lo->tag_set); 2046 2046 out_free_idr: ··· 2057 2057 { 2058 2058 /* Make this loop device unreachable from pathname. */ 2059 2059 del_gendisk(lo->lo_disk); 2060 - blk_cleanup_queue(lo->lo_disk->queue); 2061 2060 blk_mq_free_tag_set(&lo->tag_set); 2062 2061 2063 2062 mutex_lock(&loop_ctl_mutex);
+48 -259
drivers/block/mtip32xx/mtip32xx.c
··· 94 94 /* Device instance number, incremented each time a device is probed. */ 95 95 static int instance; 96 96 97 - static LIST_HEAD(online_list); 98 - static LIST_HEAD(removing_list); 99 - static DEFINE_SPINLOCK(dev_lock); 100 - 101 97 /* 102 98 * Global variable used to hold the major block device number 103 99 * allocated in mtip_init(). 104 100 */ 105 101 static int mtip_major; 106 102 static struct dentry *dfs_parent; 107 - static struct dentry *dfs_device_status; 108 103 109 104 static u32 cpu_use[NR_CPUS]; 110 105 ··· 141 146 pci_read_config_word(dd->pdev, 0x00, &vendor_id); 142 147 if (vendor_id == 0xFFFF) { 143 148 dd->sr = true; 144 - if (dd->queue) 145 - blk_queue_flag_set(QUEUE_FLAG_DEAD, dd->queue); 146 - else 147 - dev_warn(&dd->pdev->dev, 148 - "%s: dd->queue is NULL\n", __func__); 149 + if (dd->disk) 150 + blk_mark_disk_dead(dd->disk); 149 151 return true; /* device removed */ 150 152 } 151 153 ··· 2162 2170 NULL, 2163 2171 }; 2164 2172 2165 - /* debugsfs entries */ 2166 - 2167 - static ssize_t show_device_status(struct device_driver *drv, char *buf) 2168 - { 2169 - int size = 0; 2170 - struct driver_data *dd, *tmp; 2171 - unsigned long flags; 2172 - char id_buf[42]; 2173 - u16 status = 0; 2174 - 2175 - spin_lock_irqsave(&dev_lock, flags); 2176 - size += sprintf(&buf[size], "Devices Present:\n"); 2177 - list_for_each_entry_safe(dd, tmp, &online_list, online_list) { 2178 - if (dd->pdev) { 2179 - if (dd->port && 2180 - dd->port->identify && 2181 - dd->port->identify_valid) { 2182 - strlcpy(id_buf, 2183 - (char *) (dd->port->identify + 10), 21); 2184 - status = *(dd->port->identify + 141); 2185 - } else { 2186 - memset(id_buf, 0, 42); 2187 - status = 0; 2188 - } 2189 - 2190 - if (dd->port && 2191 - test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) { 2192 - size += sprintf(&buf[size], 2193 - " device %s %s (ftl rebuild %d %%)\n", 2194 - dev_name(&dd->pdev->dev), 2195 - id_buf, 2196 - status); 2197 - } else { 2198 - size += sprintf(&buf[size], 2199 - " device %s %s\n", 2200 - dev_name(&dd->pdev->dev), 2201 - id_buf); 2202 - } 2203 - } 2204 - } 2205 - 2206 - size += sprintf(&buf[size], "Devices Being Removed:\n"); 2207 - list_for_each_entry_safe(dd, tmp, &removing_list, remove_list) { 2208 - if (dd->pdev) { 2209 - if (dd->port && 2210 - dd->port->identify && 2211 - dd->port->identify_valid) { 2212 - strlcpy(id_buf, 2213 - (char *) (dd->port->identify+10), 21); 2214 - status = *(dd->port->identify + 141); 2215 - } else { 2216 - memset(id_buf, 0, 42); 2217 - status = 0; 2218 - } 2219 - 2220 - if (dd->port && 2221 - test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) { 2222 - size += sprintf(&buf[size], 2223 - " device %s %s (ftl rebuild %d %%)\n", 2224 - dev_name(&dd->pdev->dev), 2225 - id_buf, 2226 - status); 2227 - } else { 2228 - size += sprintf(&buf[size], 2229 - " device %s %s\n", 2230 - dev_name(&dd->pdev->dev), 2231 - id_buf); 2232 - } 2233 - } 2234 - } 2235 - spin_unlock_irqrestore(&dev_lock, flags); 2236 - 2237 - return size; 2238 - } 2239 - 2240 - static ssize_t mtip_hw_read_device_status(struct file *f, char __user *ubuf, 2241 - size_t len, loff_t *offset) 2242 - { 2243 - int size = *offset; 2244 - char *buf; 2245 - int rv = 0; 2246 - 2247 - if (!len || *offset) 2248 - return 0; 2249 - 2250 - buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL); 2251 - if (!buf) 2252 - return -ENOMEM; 2253 - 2254 - size += show_device_status(NULL, buf); 2255 - 2256 - *offset = size <= len ? size : len; 2257 - size = copy_to_user(ubuf, buf, *offset); 2258 - if (size) 2259 - rv = -EFAULT; 2260 - 2261 - kfree(buf); 2262 - return rv ? rv : *offset; 2263 - } 2264 - 2265 2173 static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf, 2266 2174 size_t len, loff_t *offset) 2267 2175 { ··· 2254 2362 kfree(buf); 2255 2363 return rv ? rv : *offset; 2256 2364 } 2257 - 2258 - static const struct file_operations mtip_device_status_fops = { 2259 - .owner = THIS_MODULE, 2260 - .open = simple_open, 2261 - .read = mtip_hw_read_device_status, 2262 - .llseek = no_llseek, 2263 - }; 2264 2365 2265 2366 static const struct file_operations mtip_regs_fops = { 2266 2367 .owner = THIS_MODULE, ··· 2441 2556 blk_mq_end_request(rq, cmd->status); 2442 2557 } 2443 2558 2444 - static bool mtip_abort_cmd(struct request *req, void *data, bool reserved) 2559 + static bool mtip_abort_cmd(struct request *req, void *data) 2445 2560 { 2446 2561 struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req); 2447 2562 struct driver_data *dd = data; ··· 2454 2569 return true; 2455 2570 } 2456 2571 2457 - static bool mtip_queue_cmd(struct request *req, void *data, bool reserved) 2572 + static bool mtip_queue_cmd(struct request *req, void *data) 2458 2573 { 2459 2574 struct driver_data *dd = data; 2460 2575 ··· 3182 3297 return 0; 3183 3298 } 3184 3299 3185 - static int mtip_block_open(struct block_device *dev, fmode_t mode) 3300 + static void mtip_block_free_disk(struct gendisk *disk) 3186 3301 { 3187 - struct driver_data *dd; 3302 + struct driver_data *dd = disk->private_data; 3188 3303 3189 - if (dev && dev->bd_disk) { 3190 - dd = (struct driver_data *) dev->bd_disk->private_data; 3191 - 3192 - if (dd) { 3193 - if (test_bit(MTIP_DDF_REMOVAL_BIT, 3194 - &dd->dd_flag)) { 3195 - return -ENODEV; 3196 - } 3197 - return 0; 3198 - } 3199 - } 3200 - return -ENODEV; 3201 - } 3202 - 3203 - static void mtip_block_release(struct gendisk *disk, fmode_t mode) 3204 - { 3304 + ida_free(&rssd_index_ida, dd->index); 3305 + kfree(dd); 3205 3306 } 3206 3307 3207 3308 /* ··· 3197 3326 * layer. 3198 3327 */ 3199 3328 static const struct block_device_operations mtip_block_ops = { 3200 - .open = mtip_block_open, 3201 - .release = mtip_block_release, 3202 3329 .ioctl = mtip_block_ioctl, 3203 3330 #ifdef CONFIG_COMPAT 3204 3331 .compat_ioctl = mtip_block_compat_ioctl, 3205 3332 #endif 3206 3333 .getgeo = mtip_block_getgeo, 3334 + .free_disk = mtip_block_free_disk, 3207 3335 .owner = THIS_MODULE 3208 3336 }; 3209 3337 ··· 3357 3487 return 0; 3358 3488 } 3359 3489 3360 - static enum blk_eh_timer_return mtip_cmd_timeout(struct request *req, 3361 - bool reserved) 3490 + static enum blk_eh_timer_return mtip_cmd_timeout(struct request *req) 3362 3491 { 3363 3492 struct driver_data *dd = req->q->queuedata; 3364 3493 3365 - if (reserved) { 3494 + if (blk_mq_is_reserved_rq(req)) { 3366 3495 struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req); 3367 3496 3368 3497 cmd->status = BLK_STS_TIMEOUT; ··· 3533 3664 disk_index_error: 3534 3665 ida_free(&rssd_index_ida, index); 3535 3666 ida_get_error: 3536 - blk_cleanup_disk(dd->disk); 3667 + put_disk(dd->disk); 3537 3668 block_queue_alloc_init_error: 3538 3669 blk_mq_free_tag_set(&dd->tags); 3539 3670 block_queue_alloc_tag_error: 3540 3671 mtip_hw_exit(dd); /* De-initialize the protocol layer. */ 3541 3672 protocol_init_error: 3542 3673 return rv; 3543 - } 3544 - 3545 - static bool mtip_no_dev_cleanup(struct request *rq, void *data, bool reserv) 3546 - { 3547 - struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq); 3548 - 3549 - cmd->status = BLK_STS_IOERR; 3550 - blk_mq_complete_request(rq); 3551 - return true; 3552 - } 3553 - 3554 - /* 3555 - * Block layer deinitialization function. 3556 - * 3557 - * Called by the PCI layer as each P320 device is removed. 3558 - * 3559 - * @dd Pointer to the driver data structure. 3560 - * 3561 - * return value 3562 - * 0 3563 - */ 3564 - static int mtip_block_remove(struct driver_data *dd) 3565 - { 3566 - mtip_hw_debugfs_exit(dd); 3567 - 3568 - if (dd->mtip_svc_handler) { 3569 - set_bit(MTIP_PF_SVC_THD_STOP_BIT, &dd->port->flags); 3570 - wake_up_interruptible(&dd->port->svc_wait); 3571 - kthread_stop(dd->mtip_svc_handler); 3572 - } 3573 - 3574 - if (!dd->sr) { 3575 - /* 3576 - * Explicitly wait here for IOs to quiesce, 3577 - * as mtip_standby_drive usually won't wait for IOs. 3578 - */ 3579 - if (!mtip_quiesce_io(dd->port, MTIP_QUIESCE_IO_TIMEOUT_MS)) 3580 - mtip_standby_drive(dd); 3581 - } 3582 - else 3583 - dev_info(&dd->pdev->dev, "device %s surprise removal\n", 3584 - dd->disk->disk_name); 3585 - 3586 - blk_freeze_queue_start(dd->queue); 3587 - blk_mq_quiesce_queue(dd->queue); 3588 - blk_mq_tagset_busy_iter(&dd->tags, mtip_no_dev_cleanup, dd); 3589 - blk_mq_unquiesce_queue(dd->queue); 3590 - 3591 - if (dd->disk) { 3592 - if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag)) 3593 - del_gendisk(dd->disk); 3594 - if (dd->disk->queue) { 3595 - blk_cleanup_queue(dd->queue); 3596 - blk_mq_free_tag_set(&dd->tags); 3597 - dd->queue = NULL; 3598 - } 3599 - put_disk(dd->disk); 3600 - } 3601 - dd->disk = NULL; 3602 - 3603 - ida_free(&rssd_index_ida, dd->index); 3604 - 3605 - /* De-initialize the protocol layer. */ 3606 - mtip_hw_exit(dd); 3607 - 3608 - return 0; 3609 3674 } 3610 3675 3611 3676 /* ··· 3558 3755 { 3559 3756 mtip_hw_shutdown(dd); 3560 3757 3561 - /* Delete our gendisk structure, and cleanup the blk queue. */ 3562 - if (dd->disk) { 3563 - dev_info(&dd->pdev->dev, 3564 - "Shutting down %s ...\n", dd->disk->disk_name); 3758 + dev_info(&dd->pdev->dev, 3759 + "Shutting down %s ...\n", dd->disk->disk_name); 3565 3760 3566 - if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag)) 3567 - del_gendisk(dd->disk); 3568 - if (dd->disk->queue) { 3569 - blk_cleanup_queue(dd->queue); 3570 - blk_mq_free_tag_set(&dd->tags); 3571 - } 3572 - put_disk(dd->disk); 3573 - dd->disk = NULL; 3574 - dd->queue = NULL; 3575 - } 3761 + if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag)) 3762 + del_gendisk(dd->disk); 3576 3763 3577 - ida_free(&rssd_index_ida, dd->index); 3764 + blk_mq_free_tag_set(&dd->tags); 3765 + put_disk(dd->disk); 3578 3766 return 0; 3579 3767 } 3580 3768 ··· 3699 3905 const struct cpumask *node_mask; 3700 3906 int cpu, i = 0, j = 0; 3701 3907 int my_node = NUMA_NO_NODE; 3702 - unsigned long flags; 3703 3908 3704 3909 /* Allocate memory for this devices private data. */ 3705 3910 my_node = pcibus_to_node(pdev->bus); ··· 3744 3951 dd->instance = instance; 3745 3952 dd->pdev = pdev; 3746 3953 dd->numa_node = my_node; 3747 - 3748 - INIT_LIST_HEAD(&dd->online_list); 3749 - INIT_LIST_HEAD(&dd->remove_list); 3750 3954 3751 3955 memset(dd->workq_name, 0, 32); 3752 3956 snprintf(dd->workq_name, 31, "mtipq%d", dd->instance); ··· 3837 4047 else 3838 4048 rv = 0; /* device in rebuild state, return 0 from probe */ 3839 4049 3840 - /* Add to online list even if in ftl rebuild */ 3841 - spin_lock_irqsave(&dev_lock, flags); 3842 - list_add(&dd->online_list, &online_list); 3843 - spin_unlock_irqrestore(&dev_lock, flags); 3844 - 3845 4050 goto done; 3846 4051 3847 4052 block_initialize_err: ··· 3870 4085 static void mtip_pci_remove(struct pci_dev *pdev) 3871 4086 { 3872 4087 struct driver_data *dd = pci_get_drvdata(pdev); 3873 - unsigned long flags, to; 3874 - 3875 - set_bit(MTIP_DDF_REMOVAL_BIT, &dd->dd_flag); 3876 - 3877 - spin_lock_irqsave(&dev_lock, flags); 3878 - list_del_init(&dd->online_list); 3879 - list_add(&dd->remove_list, &removing_list); 3880 - spin_unlock_irqrestore(&dev_lock, flags); 4088 + unsigned long to; 3881 4089 3882 4090 mtip_check_surprise_removal(dd); 3883 4091 synchronize_irq(dd->pdev->irq); ··· 3887 4109 "Completion workers still active!\n"); 3888 4110 } 3889 4111 3890 - blk_mark_disk_dead(dd->disk); 3891 4112 set_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag); 3892 4113 3893 - /* Clean up the block layer. */ 3894 - mtip_block_remove(dd); 4114 + if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag)) 4115 + del_gendisk(dd->disk); 4116 + 4117 + mtip_hw_debugfs_exit(dd); 4118 + 4119 + if (dd->mtip_svc_handler) { 4120 + set_bit(MTIP_PF_SVC_THD_STOP_BIT, &dd->port->flags); 4121 + wake_up_interruptible(&dd->port->svc_wait); 4122 + kthread_stop(dd->mtip_svc_handler); 4123 + } 4124 + 4125 + if (!dd->sr) { 4126 + /* 4127 + * Explicitly wait here for IOs to quiesce, 4128 + * as mtip_standby_drive usually won't wait for IOs. 4129 + */ 4130 + if (!mtip_quiesce_io(dd->port, MTIP_QUIESCE_IO_TIMEOUT_MS)) 4131 + mtip_standby_drive(dd); 4132 + } 4133 + else 4134 + dev_info(&dd->pdev->dev, "device %s surprise removal\n", 4135 + dd->disk->disk_name); 4136 + 4137 + blk_mq_free_tag_set(&dd->tags); 4138 + 4139 + /* De-initialize the protocol layer. */ 4140 + mtip_hw_exit(dd); 3895 4141 3896 4142 if (dd->isr_workq) { 3897 4143 destroy_workqueue(dd->isr_workq); ··· 3926 4124 3927 4125 pci_disable_msi(pdev); 3928 4126 3929 - spin_lock_irqsave(&dev_lock, flags); 3930 - list_del_init(&dd->remove_list); 3931 - spin_unlock_irqrestore(&dev_lock, flags); 3932 - 3933 - kfree(dd); 3934 - 3935 4127 pcim_iounmap_regions(pdev, 1 << MTIP_ABAR); 3936 4128 pci_set_drvdata(pdev, NULL); 4129 + 4130 + put_disk(dd->disk); 3937 4131 } 3938 4132 3939 4133 /* ··· 4047 4249 if (IS_ERR_OR_NULL(dfs_parent)) { 4048 4250 pr_warn("Error creating debugfs parent\n"); 4049 4251 dfs_parent = NULL; 4050 - } 4051 - if (dfs_parent) { 4052 - dfs_device_status = debugfs_create_file("device_status", 4053 - 0444, dfs_parent, NULL, 4054 - &mtip_device_status_fops); 4055 - if (IS_ERR_OR_NULL(dfs_device_status)) { 4056 - pr_err("Error creating device_status node\n"); 4057 - dfs_device_status = NULL; 4058 - } 4059 4252 } 4060 4253 4061 4254 /* Register our PCI operations. */
-5
drivers/block/mtip32xx/mtip32xx.h
··· 149 149 MTIP_DDF_RESUME_BIT = 6, 150 150 MTIP_DDF_INIT_DONE_BIT = 7, 151 151 MTIP_DDF_REBUILD_FAILED_BIT = 8, 152 - MTIP_DDF_REMOVAL_BIT = 9, 153 152 154 153 MTIP_DDF_STOP_IO = ((1 << MTIP_DDF_REMOVE_PENDING_BIT) | 155 154 (1 << MTIP_DDF_SEC_LOCK_BIT) | ··· 460 461 struct mtip_work work[MTIP_MAX_SLOT_GROUPS]; 461 462 462 463 int isr_binding; 463 - 464 - struct list_head online_list; /* linkage for online list */ 465 - 466 - struct list_head remove_list; /* linkage for removing list */ 467 464 468 465 int unal_qdepth; /* qdepth of unaligned IO queue */ 469 466 };
+1 -1
drivers/block/n64cart.c
··· 157 157 return 0; 158 158 159 159 out_cleanup_disk: 160 - blk_cleanup_disk(disk); 160 + put_disk(disk); 161 161 out: 162 162 return err; 163 163 }
+4 -5
drivers/block/nbd.c
··· 250 250 struct gendisk *disk = nbd->disk; 251 251 252 252 del_gendisk(disk); 253 - blk_cleanup_disk(disk); 253 + put_disk(disk); 254 254 blk_mq_free_tag_set(&nbd->tag_set); 255 255 256 256 /* ··· 393 393 } 394 394 } 395 395 396 - static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req, 397 - bool reserved) 396 + static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req) 398 397 { 399 398 struct nbd_cmd *cmd = blk_mq_rq_to_pdu(req); 400 399 struct nbd_device *nbd = cmd->nbd; ··· 879 880 kfree(args); 880 881 } 881 882 882 - static bool nbd_clear_req(struct request *req, void *data, bool reserved) 883 + static bool nbd_clear_req(struct request *req, void *data) 883 884 { 884 885 struct nbd_cmd *cmd = blk_mq_rq_to_pdu(req); 885 886 ··· 1832 1833 out_free_work: 1833 1834 destroy_workqueue(nbd->recv_workq); 1834 1835 out_err_disk: 1835 - blk_cleanup_disk(disk); 1836 + put_disk(disk); 1836 1837 out_free_idr: 1837 1838 mutex_lock(&nbd_index_mutex); 1838 1839 idr_remove(&nbd_index_idr, index);
+7 -8
drivers/block/null_blk/main.c
··· 1310 1310 } 1311 1311 1312 1312 static inline blk_status_t null_handle_memory_backed(struct nullb_cmd *cmd, 1313 - enum req_opf op, 1313 + enum req_op op, 1314 1314 sector_t sector, 1315 1315 sector_t nr_sectors) 1316 1316 { ··· 1381 1381 } 1382 1382 } 1383 1383 1384 - blk_status_t null_process_cmd(struct nullb_cmd *cmd, 1385 - enum req_opf op, sector_t sector, 1386 - unsigned int nr_sectors) 1384 + blk_status_t null_process_cmd(struct nullb_cmd *cmd, enum req_op op, 1385 + sector_t sector, unsigned int nr_sectors) 1387 1386 { 1388 1387 struct nullb_device *dev = cmd->nq->dev; 1389 1388 blk_status_t ret; ··· 1400 1401 } 1401 1402 1402 1403 static blk_status_t null_handle_cmd(struct nullb_cmd *cmd, sector_t sector, 1403 - sector_t nr_sectors, enum req_opf op) 1404 + sector_t nr_sectors, enum req_op op) 1404 1405 { 1405 1406 struct nullb_device *dev = cmd->nq->dev; 1406 1407 struct nullb *nullb = dev->nullb; ··· 1577 1578 return nr; 1578 1579 } 1579 1580 1580 - static enum blk_eh_timer_return null_timeout_rq(struct request *rq, bool res) 1581 + static enum blk_eh_timer_return null_timeout_rq(struct request *rq) 1581 1582 { 1582 1583 struct blk_mq_hw_ctx *hctx = rq->mq_hctx; 1583 1584 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq); ··· 1736 1737 null_restart_queue_async(nullb); 1737 1738 } 1738 1739 1739 - blk_cleanup_disk(nullb->disk); 1740 + put_disk(nullb->disk); 1740 1741 if (dev->queue_mode == NULL_Q_MQ && 1741 1742 nullb->tag_set == &nullb->__tag_set) 1742 1743 blk_mq_free_tag_set(nullb->tag_set); ··· 2081 2082 out_cleanup_zone: 2082 2083 null_free_zoned_dev(dev); 2083 2084 out_cleanup_disk: 2084 - blk_cleanup_disk(nullb->disk); 2085 + put_disk(nullb->disk); 2085 2086 out_cleanup_tags: 2086 2087 if (dev->queue_mode == NULL_Q_MQ && nullb->tag_set == &nullb->__tag_set) 2087 2088 blk_mq_free_tag_set(nullb->tag_set);
+5 -7
drivers/block/null_blk/null_blk.h
··· 136 136 137 137 blk_status_t null_handle_discard(struct nullb_device *dev, sector_t sector, 138 138 sector_t nr_sectors); 139 - blk_status_t null_process_cmd(struct nullb_cmd *cmd, 140 - enum req_opf op, sector_t sector, 141 - unsigned int nr_sectors); 139 + blk_status_t null_process_cmd(struct nullb_cmd *cmd, enum req_op op, 140 + sector_t sector, unsigned int nr_sectors); 142 141 143 142 #ifdef CONFIG_BLK_DEV_ZONED 144 143 int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q); ··· 145 146 void null_free_zoned_dev(struct nullb_device *dev); 146 147 int null_report_zones(struct gendisk *disk, sector_t sector, 147 148 unsigned int nr_zones, report_zones_cb cb, void *data); 148 - blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, 149 - enum req_opf op, sector_t sector, 150 - sector_t nr_sectors); 149 + blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, enum req_op op, 150 + sector_t sector, sector_t nr_sectors); 151 151 size_t null_zone_valid_read_len(struct nullb *nullb, 152 152 sector_t sector, unsigned int len); 153 153 #else ··· 162 164 } 163 165 static inline void null_free_zoned_dev(struct nullb_device *dev) {} 164 166 static inline blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, 165 - enum req_opf op, sector_t sector, sector_t nr_sectors) 167 + enum req_op op, sector_t sector, sector_t nr_sectors) 166 168 { 167 169 return BLK_STS_NOTSUPP; 168 170 }
+1 -1
drivers/block/null_blk/trace.h
··· 36 36 TP_ARGS(cmd, zone_no, zone_cond), 37 37 TP_STRUCT__entry( 38 38 __array(char, disk, DISK_NAME_LEN) 39 - __field(enum req_opf, op) 39 + __field(enum req_op, op) 40 40 __field(unsigned int, zone_no) 41 41 __field(unsigned int, zone_cond) 42 42 ),
+6 -6
drivers/block/null_blk/zoned.c
··· 159 159 struct nullb_device *dev = nullb->dev; 160 160 struct request_queue *q = nullb->q; 161 161 162 - blk_queue_set_zoned(nullb->disk, BLK_ZONED_HM); 162 + disk_set_zoned(nullb->disk, BLK_ZONED_HM); 163 163 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); 164 164 blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE); 165 165 ··· 170 170 return ret; 171 171 } else { 172 172 blk_queue_chunk_sectors(q, dev->zone_size_sects); 173 - q->nr_zones = blkdev_nr_zones(nullb->disk); 173 + nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0); 174 174 } 175 175 176 176 blk_queue_max_zone_append_sectors(q, dev->zone_size_sects); 177 - blk_queue_max_open_zones(q, dev->zone_max_open); 178 - blk_queue_max_active_zones(q, dev->zone_max_active); 177 + disk_set_max_open_zones(nullb->disk, dev->zone_max_open); 178 + disk_set_max_active_zones(nullb->disk, dev->zone_max_active); 179 179 180 180 return 0; 181 181 } ··· 600 600 return BLK_STS_OK; 601 601 } 602 602 603 - static blk_status_t null_zone_mgmt(struct nullb_cmd *cmd, enum req_opf op, 603 + static blk_status_t null_zone_mgmt(struct nullb_cmd *cmd, enum req_op op, 604 604 sector_t sector) 605 605 { 606 606 struct nullb_device *dev = cmd->nq->dev; ··· 653 653 return ret; 654 654 } 655 655 656 - blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, enum req_opf op, 656 + blk_status_t null_process_zoned_cmd(struct nullb_cmd *cmd, enum req_op op, 657 657 sector_t sector, sector_t nr_sectors) 658 658 { 659 659 struct nullb_device *dev;
+2 -2
drivers/block/paride/pcd.c
··· 956 956 out_pi_release: 957 957 pi_release(cd->pi); 958 958 out_free_disk: 959 - blk_cleanup_disk(cd->disk); 959 + put_disk(cd->disk); 960 960 out_free_tag_set: 961 961 blk_mq_free_tag_set(&cd->tag_set); 962 962 return ret; ··· 1029 1029 unregister_cdrom(&cd->info); 1030 1030 del_gendisk(cd->disk); 1031 1031 pi_release(cd->pi); 1032 - blk_cleanup_disk(cd->disk); 1032 + put_disk(cd->disk); 1033 1033 1034 1034 blk_mq_free_tag_set(&cd->tag_set); 1035 1035 }
+4 -2
drivers/block/paride/pd.c
··· 501 501 return do_pd_read_start(); 502 502 else 503 503 return do_pd_write_start(); 504 + default: 505 + break; 504 506 } 505 507 return Fail; 506 508 } ··· 945 943 goto cleanup_disk; 946 944 return 0; 947 945 cleanup_disk: 948 - blk_cleanup_disk(disk->gd); 946 + put_disk(disk->gd); 949 947 put_disk: 950 948 put_disk(p); 951 949 disk->gd = NULL; ··· 1020 1018 if (p) { 1021 1019 disk->gd = NULL; 1022 1020 del_gendisk(p); 1023 - blk_cleanup_disk(p); 1021 + put_disk(p); 1024 1022 blk_mq_free_tag_set(&disk->tag_set); 1025 1023 pi_release(disk->pi); 1026 1024 }
+2 -2
drivers/block/paride/pf.c
··· 975 975 out_pi_release: 976 976 pi_release(pf->pi); 977 977 out_free_disk: 978 - blk_cleanup_disk(pf->disk); 978 + put_disk(pf->disk); 979 979 out_free_tag_set: 980 980 blk_mq_free_tag_set(&pf->tag_set); 981 981 return ret; ··· 1044 1044 if (!pf->present) 1045 1045 continue; 1046 1046 del_gendisk(pf->disk); 1047 - blk_cleanup_disk(pf->disk); 1047 + put_disk(pf->disk); 1048 1048 blk_mq_free_tag_set(&pf->tag_set); 1049 1049 pi_release(pf->pi); 1050 1050 }
+5 -9
drivers/block/pktcdvd.c
··· 2460 2460 { 2461 2461 struct pktcdvd_device *pd = m->private; 2462 2462 char *msg; 2463 - char bdev_buf[BDEVNAME_SIZE]; 2464 2463 int states[PACKET_NUM_STATES]; 2465 2464 2466 - seq_printf(m, "Writer %s mapped to %s:\n", pd->name, 2467 - bdevname(pd->bdev, bdev_buf)); 2465 + seq_printf(m, "Writer %s mapped to %pg:\n", pd->name, pd->bdev); 2468 2466 2469 2467 seq_printf(m, "\nSettings:\n"); 2470 2468 seq_printf(m, "\tpacket size:\t\t%dkB\n", pd->settings.size / 2); ··· 2519 2521 static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev) 2520 2522 { 2521 2523 int i; 2522 - char b[BDEVNAME_SIZE]; 2523 2524 struct block_device *bdev; 2524 2525 struct scsi_device *sdev; 2525 2526 ··· 2531 2534 if (!pd2) 2532 2535 continue; 2533 2536 if (pd2->bdev->bd_dev == dev) { 2534 - pkt_err(pd, "%s already setup\n", 2535 - bdevname(pd2->bdev, b)); 2537 + pkt_err(pd, "%pg already setup\n", pd2->bdev); 2536 2538 return -EBUSY; 2537 2539 } 2538 2540 if (pd2->pkt_dev == dev) { ··· 2566 2570 } 2567 2571 2568 2572 proc_create_single_data(pd->name, 0, pkt_proc, pkt_seq_show, pd); 2569 - pkt_dbg(1, pd, "writer mapped to %s\n", bdevname(bdev, b)); 2573 + pkt_dbg(1, pd, "writer mapped to %pg\n", bdev); 2570 2574 return 0; 2571 2575 2572 2576 out_mem: ··· 2729 2733 return 0; 2730 2734 2731 2735 out_mem2: 2732 - blk_cleanup_disk(disk); 2736 + put_disk(disk); 2733 2737 out_mem: 2734 2738 mempool_exit(&pd->rb_pool); 2735 2739 kfree(pd); ··· 2779 2783 pkt_dbg(1, pd, "writer unmapped\n"); 2780 2784 2781 2785 del_gendisk(pd->disk); 2782 - blk_cleanup_disk(pd->disk); 2786 + put_disk(pd->disk); 2783 2787 2784 2788 mempool_exit(&pd->rb_pool); 2785 2789 kfree(pd);
+2 -2
drivers/block/ps3disk.c
··· 473 473 474 474 return 0; 475 475 fail_cleanup_disk: 476 - blk_cleanup_disk(gendisk); 476 + put_disk(gendisk); 477 477 fail_free_tag_set: 478 478 blk_mq_free_tag_set(&priv->tag_set); 479 479 fail_teardown: ··· 500 500 &ps3disk_mask); 501 501 mutex_unlock(&ps3disk_mask_mutex); 502 502 del_gendisk(priv->gendisk); 503 - blk_cleanup_disk(priv->gendisk); 503 + put_disk(priv->gendisk); 504 504 blk_mq_free_tag_set(&priv->tag_set); 505 505 dev_notice(&dev->sbd.core, "Synchronizing disk cache\n"); 506 506 ps3disk_sync_cache(dev);
+2 -2
drivers/block/ps3vram.c
··· 761 761 return 0; 762 762 763 763 out_cleanup_disk: 764 - blk_cleanup_disk(gendisk); 764 + put_disk(gendisk); 765 765 out_cache_cleanup: 766 766 remove_proc_entry(DEVICE_NAME, NULL); 767 767 ps3vram_cache_cleanup(dev); ··· 792 792 struct ps3vram_priv *priv = ps3_system_bus_get_drvdata(dev); 793 793 794 794 del_gendisk(priv->gendisk); 795 - blk_cleanup_disk(priv->gendisk); 795 + put_disk(priv->gendisk); 796 796 remove_proc_entry(DEVICE_NAME, NULL); 797 797 ps3vram_cache_cleanup(dev); 798 798 iounmap(priv->reports);
+1 -1
drivers/block/rbd.c
··· 4729 4729 4730 4730 static void rbd_free_disk(struct rbd_device *rbd_dev) 4731 4731 { 4732 - blk_cleanup_disk(rbd_dev->disk); 4732 + put_disk(rbd_dev->disk); 4733 4733 blk_mq_free_tag_set(&rbd_dev->tag_set); 4734 4734 rbd_dev->disk = NULL; 4735 4735 }
+3 -3
drivers/block/rnbd/rnbd-clt.c
··· 1408 1408 blk_queue_flag_set(QUEUE_FLAG_NONROT, dev->queue); 1409 1409 err = add_disk(dev->gd); 1410 1410 if (err) 1411 - blk_cleanup_disk(dev->gd); 1411 + put_disk(dev->gd); 1412 1412 1413 1413 return err; 1414 1414 } ··· 1630 1630 static void destroy_gen_disk(struct rnbd_clt_dev *dev) 1631 1631 { 1632 1632 del_gendisk(dev->gd); 1633 - blk_cleanup_disk(dev->gd); 1633 + put_disk(dev->gd); 1634 1634 } 1635 1635 1636 1636 static void destroy_sysfs(struct rnbd_clt_dev *dev, ··· 1755 1755 list_for_each_entry_safe(dev, tn, &sess->devs_list, list) { 1756 1756 /* 1757 1757 * Here unmap happens in parallel for only one reason: 1758 - * blk_cleanup_queue() takes around half a second, so 1758 + * del_gendisk() takes around half a second, so 1759 1759 * on huge amount of devices the whole module unload 1760 1760 * procedure takes minutes. 1761 1761 */
+4 -3
drivers/block/rnbd/rnbd-proto.h
··· 229 229 return true; 230 230 } 231 231 232 - static inline u32 rnbd_to_bio_flags(u32 rnbd_opf) 232 + static inline blk_opf_t rnbd_to_bio_flags(u32 rnbd_opf) 233 233 { 234 - u32 bio_opf; 234 + blk_opf_t bio_opf; 235 235 236 236 switch (rnbd_op(rnbd_opf)) { 237 237 case RNBD_OP_READ: ··· 286 286 break; 287 287 default: 288 288 WARN(1, "Unknown request type %d (flags %llu)\n", 289 - req_op(rq), (unsigned long long)rq->cmd_flags); 289 + (__force u32)req_op(rq), 290 + (__force unsigned long long)rq->cmd_flags); 290 291 rnbd_opf = 0; 291 292 } 292 293
-1
drivers/block/rnbd/rnbd-srv-dev.c
··· 28 28 goto err; 29 29 30 30 dev->blk_open_flags = flags; 31 - bdevname(dev->bdev, dev->name); 32 31 33 32 return dev; 34 33
-1
drivers/block/rnbd/rnbd-srv-dev.h
··· 15 15 struct rnbd_dev { 16 16 struct block_device *bdev; 17 17 fmode_t blk_open_flags; 18 - char name[BDEVNAME_SIZE]; 19 18 }; 20 19 21 20 /**
+2 -3
drivers/block/rnbd/rnbd-srv-sysfs.c
··· 38 38 }; 39 39 40 40 int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev, 41 - struct block_device *bdev, 42 - const char *dev_name) 41 + struct block_device *bdev) 43 42 { 44 43 struct kobject *bdev_kobj; 45 44 int ret; 46 45 47 46 ret = kobject_init_and_add(&dev->dev_kobj, &dev_ktype, 48 - rnbd_devs_kobj, dev_name); 47 + rnbd_devs_kobj, "%pg", bdev); 49 48 if (ret) { 50 49 kobject_put(&dev->dev_kobj); 51 50 return ret;
+4 -5
drivers/block/rnbd/rnbd-srv.c
··· 419 419 return sess_dev; 420 420 } 421 421 422 - static struct rnbd_srv_dev *rnbd_srv_init_srv_dev(const char *id) 422 + static struct rnbd_srv_dev *rnbd_srv_init_srv_dev(struct block_device *bdev) 423 423 { 424 424 struct rnbd_srv_dev *dev; 425 425 ··· 427 427 if (!dev) 428 428 return ERR_PTR(-ENOMEM); 429 429 430 - strscpy(dev->id, id, sizeof(dev->id)); 430 + snprintf(dev->id, sizeof(dev->id), "%pg", bdev); 431 431 kref_init(&dev->kref); 432 432 INIT_LIST_HEAD(&dev->sess_dev_list); 433 433 mutex_init(&dev->lock); ··· 512 512 int ret; 513 513 struct rnbd_srv_dev *new_dev, *dev; 514 514 515 - new_dev = rnbd_srv_init_srv_dev(rnbd_dev->name); 515 + new_dev = rnbd_srv_init_srv_dev(rnbd_dev->bdev); 516 516 if (IS_ERR(new_dev)) 517 517 return new_dev; 518 518 ··· 758 758 */ 759 759 mutex_lock(&srv_dev->lock); 760 760 if (!srv_dev->dev_kobj.state_in_sysfs) { 761 - ret = rnbd_srv_create_dev_sysfs(srv_dev, rnbd_dev->bdev, 762 - rnbd_dev->name); 761 + ret = rnbd_srv_create_dev_sysfs(srv_dev, rnbd_dev->bdev); 763 762 if (ret) { 764 763 mutex_unlock(&srv_dev->lock); 765 764 rnbd_srv_err(srv_sess_dev,
+1 -2
drivers/block/rnbd/rnbd-srv.h
··· 68 68 /* rnbd-srv-sysfs.c */ 69 69 70 70 int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev, 71 - struct block_device *bdev, 72 - const char *dir_name); 71 + struct block_device *bdev); 73 72 void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev); 74 73 int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); 75 74 void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev);
+2 -2
drivers/block/sunvdc.c
··· 886 886 return 0; 887 887 888 888 out_cleanup_disk: 889 - blk_cleanup_disk(g); 889 + put_disk(g); 890 890 out_free_tag: 891 891 blk_mq_free_tag_set(&port->tag_set); 892 892 return err; ··· 1070 1070 del_timer_sync(&port->vio.timer); 1071 1071 1072 1072 del_gendisk(port->disk); 1073 - blk_cleanup_disk(port->disk); 1073 + put_disk(port->disk); 1074 1074 blk_mq_free_tag_set(&port->tag_set); 1075 1075 1076 1076 vdc_free_tx_ring(port);
+1 -1
drivers/block/swim.c
··· 783 783 if (fs->registered) 784 784 del_gendisk(fs->disk); 785 785 786 - blk_cleanup_disk(disk); 786 + put_disk(disk); 787 787 blk_mq_free_tag_set(&fs->tag_set); 788 788 } 789 789
+1 -1
drivers/block/swim3.c
··· 1238 1238 return 0; 1239 1239 1240 1240 out_cleanup_disk: 1241 - blk_cleanup_disk(disk); 1241 + put_disk(disk); 1242 1242 out_free_tag_set: 1243 1243 blk_mq_free_tag_set(&fs->tag_set); 1244 1244 out_unregister:
+3 -3
drivers/block/sx8.c
··· 1377 1377 1378 1378 if (host->state > HST_DEV_ACTIVATE) 1379 1379 del_gendisk(disk); 1380 - blk_cleanup_disk(disk); 1380 + put_disk(disk); 1381 1381 } 1382 1382 1383 1383 static int carm_init_shm(struct carm_host *host) ··· 1536 1536 clear_bit(0, &carm_major_alloc); 1537 1537 else if (host->major == 161) 1538 1538 clear_bit(1, &carm_major_alloc); 1539 - blk_cleanup_queue(host->oob_q); 1539 + blk_mq_destroy_queue(host->oob_q); 1540 1540 blk_mq_free_tag_set(&host->tag_set); 1541 1541 err_out_dma_free: 1542 1542 dma_free_coherent(&pdev->dev, CARM_SHM_SIZE, host->shm, host->shm_dma); ··· 1570 1570 clear_bit(0, &carm_major_alloc); 1571 1571 else if (host->major == 161) 1572 1572 clear_bit(1, &carm_major_alloc); 1573 - blk_cleanup_queue(host->oob_q); 1573 + blk_mq_destroy_queue(host->oob_q); 1574 1574 blk_mq_free_tag_set(&host->tag_set); 1575 1575 dma_free_coherent(&pdev->dev, CARM_SHM_SIZE, host->shm, host->shm_dma); 1576 1576 iounmap(host->mmio);
+1545
drivers/block/ublk_drv.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Userspace block device - block device which IO is handled from userspace 4 + * 5 + * Take full use of io_uring passthrough command for communicating with 6 + * ublk userspace daemon(ublksrvd) for handling basic IO request. 7 + * 8 + * Copyright 2022 Ming Lei <ming.lei@redhat.com> 9 + * 10 + * (part of code stolen from loop.c) 11 + */ 12 + #include <linux/module.h> 13 + #include <linux/moduleparam.h> 14 + #include <linux/sched.h> 15 + #include <linux/fs.h> 16 + #include <linux/pagemap.h> 17 + #include <linux/file.h> 18 + #include <linux/stat.h> 19 + #include <linux/errno.h> 20 + #include <linux/major.h> 21 + #include <linux/wait.h> 22 + #include <linux/blkdev.h> 23 + #include <linux/init.h> 24 + #include <linux/swap.h> 25 + #include <linux/slab.h> 26 + #include <linux/compat.h> 27 + #include <linux/mutex.h> 28 + #include <linux/writeback.h> 29 + #include <linux/completion.h> 30 + #include <linux/highmem.h> 31 + #include <linux/sysfs.h> 32 + #include <linux/miscdevice.h> 33 + #include <linux/falloc.h> 34 + #include <linux/uio.h> 35 + #include <linux/ioprio.h> 36 + #include <linux/sched/mm.h> 37 + #include <linux/uaccess.h> 38 + #include <linux/cdev.h> 39 + #include <linux/io_uring.h> 40 + #include <linux/blk-mq.h> 41 + #include <linux/delay.h> 42 + #include <linux/mm.h> 43 + #include <asm/page.h> 44 + #include <linux/task_work.h> 45 + #include <uapi/linux/ublk_cmd.h> 46 + 47 + #define UBLK_MINORS (1U << MINORBITS) 48 + 49 + /* All UBLK_F_* have to be included into UBLK_F_ALL */ 50 + #define UBLK_F_ALL (UBLK_F_SUPPORT_ZERO_COPY | UBLK_F_URING_CMD_COMP_IN_TASK) 51 + 52 + struct ublk_rq_data { 53 + struct callback_head work; 54 + }; 55 + 56 + struct ublk_uring_cmd_pdu { 57 + struct request *req; 58 + }; 59 + 60 + /* 61 + * io command is active: sqe cmd is received, and its cqe isn't done 62 + * 63 + * If the flag is set, the io command is owned by ublk driver, and waited 64 + * for incoming blk-mq request from the ublk block device. 65 + * 66 + * If the flag is cleared, the io command will be completed, and owned by 67 + * ublk server. 68 + */ 69 + #define UBLK_IO_FLAG_ACTIVE 0x01 70 + 71 + /* 72 + * IO command is completed via cqe, and it is being handled by ublksrv, and 73 + * not committed yet 74 + * 75 + * Basically exclusively with UBLK_IO_FLAG_ACTIVE, so can be served for 76 + * cross verification 77 + */ 78 + #define UBLK_IO_FLAG_OWNED_BY_SRV 0x02 79 + 80 + /* 81 + * IO command is aborted, so this flag is set in case of 82 + * !UBLK_IO_FLAG_ACTIVE. 83 + * 84 + * After this flag is observed, any pending or new incoming request 85 + * associated with this io command will be failed immediately 86 + */ 87 + #define UBLK_IO_FLAG_ABORTED 0x04 88 + 89 + struct ublk_io { 90 + /* userspace buffer address from io cmd */ 91 + __u64 addr; 92 + unsigned int flags; 93 + int res; 94 + 95 + struct io_uring_cmd *cmd; 96 + }; 97 + 98 + struct ublk_queue { 99 + int q_id; 100 + int q_depth; 101 + 102 + unsigned long flags; 103 + struct task_struct *ubq_daemon; 104 + char *io_cmd_buf; 105 + 106 + unsigned long io_addr; /* mapped vm address */ 107 + unsigned int max_io_sz; 108 + bool abort_work_pending; 109 + unsigned short nr_io_ready; /* how many ios setup */ 110 + struct ublk_device *dev; 111 + struct ublk_io ios[0]; 112 + }; 113 + 114 + #define UBLK_DAEMON_MONITOR_PERIOD (5 * HZ) 115 + 116 + struct ublk_device { 117 + struct gendisk *ub_disk; 118 + 119 + char *__queues; 120 + 121 + unsigned short queue_size; 122 + unsigned short bs_shift; 123 + struct ublksrv_ctrl_dev_info dev_info; 124 + 125 + struct blk_mq_tag_set tag_set; 126 + 127 + struct cdev cdev; 128 + struct device cdev_dev; 129 + 130 + #define UB_STATE_OPEN 0 131 + #define UB_STATE_USED 1 132 + unsigned long state; 133 + int ub_number; 134 + 135 + struct mutex mutex; 136 + 137 + spinlock_t mm_lock; 138 + struct mm_struct *mm; 139 + 140 + struct completion completion; 141 + unsigned int nr_queues_ready; 142 + atomic_t nr_aborted_queues; 143 + 144 + /* 145 + * Our ubq->daemon may be killed without any notification, so 146 + * monitor each queue's daemon periodically 147 + */ 148 + struct delayed_work monitor_work; 149 + struct work_struct stop_work; 150 + }; 151 + 152 + static dev_t ublk_chr_devt; 153 + static struct class *ublk_chr_class; 154 + 155 + static DEFINE_IDR(ublk_index_idr); 156 + static DEFINE_SPINLOCK(ublk_idr_lock); 157 + static wait_queue_head_t ublk_idr_wq; /* wait until one idr is freed */ 158 + 159 + static DEFINE_MUTEX(ublk_ctl_mutex); 160 + 161 + static struct miscdevice ublk_misc; 162 + 163 + static inline bool ublk_can_use_task_work(const struct ublk_queue *ubq) 164 + { 165 + if (IS_BUILTIN(CONFIG_BLK_DEV_UBLK) && 166 + !(ubq->flags & UBLK_F_URING_CMD_COMP_IN_TASK)) 167 + return true; 168 + return false; 169 + } 170 + 171 + static struct ublk_device *ublk_get_device(struct ublk_device *ub) 172 + { 173 + if (kobject_get_unless_zero(&ub->cdev_dev.kobj)) 174 + return ub; 175 + return NULL; 176 + } 177 + 178 + static void ublk_put_device(struct ublk_device *ub) 179 + { 180 + put_device(&ub->cdev_dev); 181 + } 182 + 183 + static inline struct ublk_queue *ublk_get_queue(struct ublk_device *dev, 184 + int qid) 185 + { 186 + return (struct ublk_queue *)&(dev->__queues[qid * dev->queue_size]); 187 + } 188 + 189 + static inline bool ublk_rq_has_data(const struct request *rq) 190 + { 191 + return rq->bio && bio_has_data(rq->bio); 192 + } 193 + 194 + static inline struct ublksrv_io_desc *ublk_get_iod(struct ublk_queue *ubq, 195 + int tag) 196 + { 197 + return (struct ublksrv_io_desc *) 198 + &(ubq->io_cmd_buf[tag * sizeof(struct ublksrv_io_desc)]); 199 + } 200 + 201 + static inline char *ublk_queue_cmd_buf(struct ublk_device *ub, int q_id) 202 + { 203 + return ublk_get_queue(ub, q_id)->io_cmd_buf; 204 + } 205 + 206 + static inline int ublk_queue_cmd_buf_size(struct ublk_device *ub, int q_id) 207 + { 208 + struct ublk_queue *ubq = ublk_get_queue(ub, q_id); 209 + 210 + return round_up(ubq->q_depth * sizeof(struct ublksrv_io_desc), 211 + PAGE_SIZE); 212 + } 213 + 214 + static void ublk_free_disk(struct gendisk *disk) 215 + { 216 + struct ublk_device *ub = disk->private_data; 217 + 218 + clear_bit(UB_STATE_USED, &ub->state); 219 + put_device(&ub->cdev_dev); 220 + } 221 + 222 + static const struct block_device_operations ub_fops = { 223 + .owner = THIS_MODULE, 224 + .free_disk = ublk_free_disk, 225 + }; 226 + 227 + #define UBLK_MAX_PIN_PAGES 32 228 + 229 + struct ublk_map_data { 230 + const struct ublk_queue *ubq; 231 + const struct request *rq; 232 + const struct ublk_io *io; 233 + unsigned max_bytes; 234 + }; 235 + 236 + struct ublk_io_iter { 237 + struct page *pages[UBLK_MAX_PIN_PAGES]; 238 + unsigned pg_off; /* offset in the 1st page in pages */ 239 + int nr_pages; /* how many page pointers in pages */ 240 + struct bio *bio; 241 + struct bvec_iter iter; 242 + }; 243 + 244 + static inline unsigned ublk_copy_io_pages(struct ublk_io_iter *data, 245 + unsigned max_bytes, bool to_vm) 246 + { 247 + const unsigned total = min_t(unsigned, max_bytes, 248 + PAGE_SIZE - data->pg_off + 249 + ((data->nr_pages - 1) << PAGE_SHIFT)); 250 + unsigned done = 0; 251 + unsigned pg_idx = 0; 252 + 253 + while (done < total) { 254 + struct bio_vec bv = bio_iter_iovec(data->bio, data->iter); 255 + const unsigned int bytes = min3(bv.bv_len, total - done, 256 + (unsigned)(PAGE_SIZE - data->pg_off)); 257 + void *bv_buf = bvec_kmap_local(&bv); 258 + void *pg_buf = kmap_local_page(data->pages[pg_idx]); 259 + 260 + if (to_vm) 261 + memcpy(pg_buf + data->pg_off, bv_buf, bytes); 262 + else 263 + memcpy(bv_buf, pg_buf + data->pg_off, bytes); 264 + 265 + kunmap_local(pg_buf); 266 + kunmap_local(bv_buf); 267 + 268 + /* advance page array */ 269 + data->pg_off += bytes; 270 + if (data->pg_off == PAGE_SIZE) { 271 + pg_idx += 1; 272 + data->pg_off = 0; 273 + } 274 + 275 + done += bytes; 276 + 277 + /* advance bio */ 278 + bio_advance_iter_single(data->bio, &data->iter, bytes); 279 + if (!data->iter.bi_size) { 280 + data->bio = data->bio->bi_next; 281 + if (data->bio == NULL) 282 + break; 283 + data->iter = data->bio->bi_iter; 284 + } 285 + } 286 + 287 + return done; 288 + } 289 + 290 + static inline int ublk_copy_user_pages(struct ublk_map_data *data, 291 + bool to_vm) 292 + { 293 + const unsigned int gup_flags = to_vm ? FOLL_WRITE : 0; 294 + const unsigned long start_vm = data->io->addr; 295 + unsigned int done = 0; 296 + struct ublk_io_iter iter = { 297 + .pg_off = start_vm & (PAGE_SIZE - 1), 298 + .bio = data->rq->bio, 299 + .iter = data->rq->bio->bi_iter, 300 + }; 301 + const unsigned int nr_pages = round_up(data->max_bytes + 302 + (start_vm & (PAGE_SIZE - 1)), PAGE_SIZE) >> PAGE_SHIFT; 303 + 304 + while (done < nr_pages) { 305 + const unsigned to_pin = min_t(unsigned, UBLK_MAX_PIN_PAGES, 306 + nr_pages - done); 307 + unsigned i, len; 308 + 309 + iter.nr_pages = get_user_pages_fast(start_vm + 310 + (done << PAGE_SHIFT), to_pin, gup_flags, 311 + iter.pages); 312 + if (iter.nr_pages <= 0) 313 + return done == 0 ? iter.nr_pages : done; 314 + len = ublk_copy_io_pages(&iter, data->max_bytes, to_vm); 315 + for (i = 0; i < iter.nr_pages; i++) { 316 + if (to_vm) 317 + set_page_dirty(iter.pages[i]); 318 + put_page(iter.pages[i]); 319 + } 320 + data->max_bytes -= len; 321 + done += iter.nr_pages; 322 + } 323 + 324 + return done; 325 + } 326 + 327 + static int ublk_map_io(const struct ublk_queue *ubq, const struct request *req, 328 + struct ublk_io *io) 329 + { 330 + const unsigned int rq_bytes = blk_rq_bytes(req); 331 + /* 332 + * no zero copy, we delay copy WRITE request data into ublksrv 333 + * context and the big benefit is that pinning pages in current 334 + * context is pretty fast, see ublk_pin_user_pages 335 + */ 336 + if (req_op(req) != REQ_OP_WRITE && req_op(req) != REQ_OP_FLUSH) 337 + return rq_bytes; 338 + 339 + if (ublk_rq_has_data(req)) { 340 + struct ublk_map_data data = { 341 + .ubq = ubq, 342 + .rq = req, 343 + .io = io, 344 + .max_bytes = rq_bytes, 345 + }; 346 + 347 + ublk_copy_user_pages(&data, true); 348 + 349 + return rq_bytes - data.max_bytes; 350 + } 351 + return rq_bytes; 352 + } 353 + 354 + static int ublk_unmap_io(const struct ublk_queue *ubq, 355 + const struct request *req, 356 + struct ublk_io *io) 357 + { 358 + const unsigned int rq_bytes = blk_rq_bytes(req); 359 + 360 + if (req_op(req) == REQ_OP_READ && ublk_rq_has_data(req)) { 361 + struct ublk_map_data data = { 362 + .ubq = ubq, 363 + .rq = req, 364 + .io = io, 365 + .max_bytes = io->res, 366 + }; 367 + 368 + WARN_ON_ONCE(io->res > rq_bytes); 369 + 370 + ublk_copy_user_pages(&data, false); 371 + 372 + return io->res - data.max_bytes; 373 + } 374 + return rq_bytes; 375 + } 376 + 377 + static inline unsigned int ublk_req_build_flags(struct request *req) 378 + { 379 + unsigned flags = 0; 380 + 381 + if (req->cmd_flags & REQ_FAILFAST_DEV) 382 + flags |= UBLK_IO_F_FAILFAST_DEV; 383 + 384 + if (req->cmd_flags & REQ_FAILFAST_TRANSPORT) 385 + flags |= UBLK_IO_F_FAILFAST_TRANSPORT; 386 + 387 + if (req->cmd_flags & REQ_FAILFAST_DRIVER) 388 + flags |= UBLK_IO_F_FAILFAST_DRIVER; 389 + 390 + if (req->cmd_flags & REQ_META) 391 + flags |= UBLK_IO_F_META; 392 + 393 + if (req->cmd_flags & REQ_FUA) 394 + flags |= UBLK_IO_F_FUA; 395 + 396 + if (req->cmd_flags & REQ_NOUNMAP) 397 + flags |= UBLK_IO_F_NOUNMAP; 398 + 399 + if (req->cmd_flags & REQ_SWAP) 400 + flags |= UBLK_IO_F_SWAP; 401 + 402 + return flags; 403 + } 404 + 405 + static blk_status_t ublk_setup_iod(struct ublk_queue *ubq, struct request *req) 406 + { 407 + struct ublksrv_io_desc *iod = ublk_get_iod(ubq, req->tag); 408 + struct ublk_io *io = &ubq->ios[req->tag]; 409 + u32 ublk_op; 410 + 411 + switch (req_op(req)) { 412 + case REQ_OP_READ: 413 + ublk_op = UBLK_IO_OP_READ; 414 + break; 415 + case REQ_OP_WRITE: 416 + ublk_op = UBLK_IO_OP_WRITE; 417 + break; 418 + case REQ_OP_FLUSH: 419 + ublk_op = UBLK_IO_OP_FLUSH; 420 + break; 421 + case REQ_OP_DISCARD: 422 + ublk_op = UBLK_IO_OP_DISCARD; 423 + break; 424 + case REQ_OP_WRITE_ZEROES: 425 + ublk_op = UBLK_IO_OP_WRITE_ZEROES; 426 + break; 427 + default: 428 + return BLK_STS_IOERR; 429 + } 430 + 431 + /* need to translate since kernel may change */ 432 + iod->op_flags = ublk_op | ublk_req_build_flags(req); 433 + iod->nr_sectors = blk_rq_sectors(req); 434 + iod->start_sector = blk_rq_pos(req); 435 + iod->addr = io->addr; 436 + 437 + return BLK_STS_OK; 438 + } 439 + 440 + static inline struct ublk_uring_cmd_pdu *ublk_get_uring_cmd_pdu( 441 + struct io_uring_cmd *ioucmd) 442 + { 443 + return (struct ublk_uring_cmd_pdu *)&ioucmd->pdu; 444 + } 445 + 446 + static bool ubq_daemon_is_dying(struct ublk_queue *ubq) 447 + { 448 + return ubq->ubq_daemon->flags & PF_EXITING; 449 + } 450 + 451 + /* todo: handle partial completion */ 452 + static void ublk_complete_rq(struct request *req) 453 + { 454 + struct ublk_queue *ubq = req->mq_hctx->driver_data; 455 + struct ublk_io *io = &ubq->ios[req->tag]; 456 + unsigned int unmapped_bytes; 457 + 458 + /* failed read IO if nothing is read */ 459 + if (!io->res && req_op(req) == REQ_OP_READ) 460 + io->res = -EIO; 461 + 462 + if (io->res < 0) { 463 + blk_mq_end_request(req, errno_to_blk_status(io->res)); 464 + return; 465 + } 466 + 467 + /* 468 + * FLUSH or DISCARD usually won't return bytes returned, so end them 469 + * directly. 470 + * 471 + * Both the two needn't unmap. 472 + */ 473 + if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE) { 474 + blk_mq_end_request(req, BLK_STS_OK); 475 + return; 476 + } 477 + 478 + /* for READ request, writing data in iod->addr to rq buffers */ 479 + unmapped_bytes = ublk_unmap_io(ubq, req, io); 480 + 481 + /* 482 + * Extremely impossible since we got data filled in just before 483 + * 484 + * Re-read simply for this unlikely case. 485 + */ 486 + if (unlikely(unmapped_bytes < io->res)) 487 + io->res = unmapped_bytes; 488 + 489 + if (blk_update_request(req, BLK_STS_OK, io->res)) 490 + blk_mq_requeue_request(req, true); 491 + else 492 + __blk_mq_end_request(req, BLK_STS_OK); 493 + } 494 + 495 + /* 496 + * __ublk_fail_req() may be called from abort context or ->ubq_daemon 497 + * context during exiting, so lock is required. 498 + * 499 + * Also aborting may not be started yet, keep in mind that one failed 500 + * request may be issued by block layer again. 501 + */ 502 + static void __ublk_fail_req(struct ublk_io *io, struct request *req) 503 + { 504 + WARN_ON_ONCE(io->flags & UBLK_IO_FLAG_ACTIVE); 505 + 506 + if (!(io->flags & UBLK_IO_FLAG_ABORTED)) { 507 + io->flags |= UBLK_IO_FLAG_ABORTED; 508 + blk_mq_end_request(req, BLK_STS_IOERR); 509 + } 510 + } 511 + 512 + #define UBLK_REQUEUE_DELAY_MS 3 513 + 514 + static inline void __ublk_rq_task_work(struct request *req) 515 + { 516 + struct ublk_queue *ubq = req->mq_hctx->driver_data; 517 + struct ublk_device *ub = ubq->dev; 518 + int tag = req->tag; 519 + struct ublk_io *io = &ubq->ios[tag]; 520 + bool task_exiting = current != ubq->ubq_daemon || 521 + (current->flags & PF_EXITING); 522 + unsigned int mapped_bytes; 523 + 524 + pr_devel("%s: complete: op %d, qid %d tag %d io_flags %x addr %llx\n", 525 + __func__, io->cmd->cmd_op, ubq->q_id, req->tag, io->flags, 526 + ublk_get_iod(ubq, req->tag)->addr); 527 + 528 + if (unlikely(task_exiting)) { 529 + blk_mq_end_request(req, BLK_STS_IOERR); 530 + mod_delayed_work(system_wq, &ub->monitor_work, 0); 531 + return; 532 + } 533 + 534 + mapped_bytes = ublk_map_io(ubq, req, io); 535 + 536 + /* partially mapped, update io descriptor */ 537 + if (unlikely(mapped_bytes != blk_rq_bytes(req))) { 538 + /* 539 + * Nothing mapped, retry until we succeed. 540 + * 541 + * We may never succeed in mapping any bytes here because 542 + * of OOM. TODO: reserve one buffer with single page pinned 543 + * for providing forward progress guarantee. 544 + */ 545 + if (unlikely(!mapped_bytes)) { 546 + blk_mq_requeue_request(req, false); 547 + blk_mq_delay_kick_requeue_list(req->q, 548 + UBLK_REQUEUE_DELAY_MS); 549 + return; 550 + } 551 + 552 + ublk_get_iod(ubq, req->tag)->nr_sectors = 553 + mapped_bytes >> 9; 554 + } 555 + 556 + /* mark this cmd owned by ublksrv */ 557 + io->flags |= UBLK_IO_FLAG_OWNED_BY_SRV; 558 + 559 + /* 560 + * clear ACTIVE since we are done with this sqe/cmd slot 561 + * We can only accept io cmd in case of being not active. 562 + */ 563 + io->flags &= ~UBLK_IO_FLAG_ACTIVE; 564 + 565 + /* tell ublksrv one io request is coming */ 566 + io_uring_cmd_done(io->cmd, UBLK_IO_RES_OK, 0); 567 + } 568 + 569 + static void ublk_rq_task_work_cb(struct io_uring_cmd *cmd) 570 + { 571 + struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); 572 + 573 + __ublk_rq_task_work(pdu->req); 574 + } 575 + 576 + static void ublk_rq_task_work_fn(struct callback_head *work) 577 + { 578 + struct ublk_rq_data *data = container_of(work, 579 + struct ublk_rq_data, work); 580 + struct request *req = blk_mq_rq_from_pdu(data); 581 + 582 + __ublk_rq_task_work(req); 583 + } 584 + 585 + static blk_status_t ublk_queue_rq(struct blk_mq_hw_ctx *hctx, 586 + const struct blk_mq_queue_data *bd) 587 + { 588 + struct ublk_queue *ubq = hctx->driver_data; 589 + struct request *rq = bd->rq; 590 + blk_status_t res; 591 + 592 + /* fill iod to slot in io cmd buffer */ 593 + res = ublk_setup_iod(ubq, rq); 594 + if (unlikely(res != BLK_STS_OK)) 595 + return BLK_STS_IOERR; 596 + 597 + blk_mq_start_request(bd->rq); 598 + 599 + if (unlikely(ubq_daemon_is_dying(ubq))) { 600 + fail: 601 + mod_delayed_work(system_wq, &ubq->dev->monitor_work, 0); 602 + return BLK_STS_IOERR; 603 + } 604 + 605 + if (ublk_can_use_task_work(ubq)) { 606 + struct ublk_rq_data *data = blk_mq_rq_to_pdu(rq); 607 + enum task_work_notify_mode notify_mode = bd->last ? 608 + TWA_SIGNAL_NO_IPI : TWA_NONE; 609 + 610 + if (task_work_add(ubq->ubq_daemon, &data->work, notify_mode)) 611 + goto fail; 612 + } else { 613 + struct io_uring_cmd *cmd = ubq->ios[rq->tag].cmd; 614 + struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); 615 + 616 + pdu->req = rq; 617 + io_uring_cmd_complete_in_task(cmd, ublk_rq_task_work_cb); 618 + } 619 + 620 + return BLK_STS_OK; 621 + } 622 + 623 + static void ublk_commit_rqs(struct blk_mq_hw_ctx *hctx) 624 + { 625 + struct ublk_queue *ubq = hctx->driver_data; 626 + 627 + if (ublk_can_use_task_work(ubq)) 628 + __set_notify_signal(ubq->ubq_daemon); 629 + } 630 + 631 + static int ublk_init_hctx(struct blk_mq_hw_ctx *hctx, void *driver_data, 632 + unsigned int hctx_idx) 633 + { 634 + struct ublk_device *ub = driver_data; 635 + struct ublk_queue *ubq = ublk_get_queue(ub, hctx->queue_num); 636 + 637 + hctx->driver_data = ubq; 638 + return 0; 639 + } 640 + 641 + static int ublk_init_rq(struct blk_mq_tag_set *set, struct request *req, 642 + unsigned int hctx_idx, unsigned int numa_node) 643 + { 644 + struct ublk_rq_data *data = blk_mq_rq_to_pdu(req); 645 + 646 + init_task_work(&data->work, ublk_rq_task_work_fn); 647 + return 0; 648 + } 649 + 650 + static const struct blk_mq_ops ublk_mq_ops = { 651 + .queue_rq = ublk_queue_rq, 652 + .commit_rqs = ublk_commit_rqs, 653 + .init_hctx = ublk_init_hctx, 654 + .init_request = ublk_init_rq, 655 + }; 656 + 657 + static int ublk_ch_open(struct inode *inode, struct file *filp) 658 + { 659 + struct ublk_device *ub = container_of(inode->i_cdev, 660 + struct ublk_device, cdev); 661 + 662 + if (test_and_set_bit(UB_STATE_OPEN, &ub->state)) 663 + return -EBUSY; 664 + filp->private_data = ub; 665 + return 0; 666 + } 667 + 668 + static int ublk_ch_release(struct inode *inode, struct file *filp) 669 + { 670 + struct ublk_device *ub = filp->private_data; 671 + 672 + clear_bit(UB_STATE_OPEN, &ub->state); 673 + return 0; 674 + } 675 + 676 + /* map pre-allocated per-queue cmd buffer to ublksrv daemon */ 677 + static int ublk_ch_mmap(struct file *filp, struct vm_area_struct *vma) 678 + { 679 + struct ublk_device *ub = filp->private_data; 680 + size_t sz = vma->vm_end - vma->vm_start; 681 + unsigned max_sz = UBLK_MAX_QUEUE_DEPTH * sizeof(struct ublksrv_io_desc); 682 + unsigned long pfn, end, phys_off = vma->vm_pgoff << PAGE_SHIFT; 683 + int q_id, ret = 0; 684 + 685 + spin_lock(&ub->mm_lock); 686 + if (!ub->mm) 687 + ub->mm = current->mm; 688 + if (current->mm != ub->mm) 689 + ret = -EINVAL; 690 + spin_unlock(&ub->mm_lock); 691 + 692 + if (ret) 693 + return ret; 694 + 695 + if (vma->vm_flags & VM_WRITE) 696 + return -EPERM; 697 + 698 + end = UBLKSRV_CMD_BUF_OFFSET + ub->dev_info.nr_hw_queues * max_sz; 699 + if (phys_off < UBLKSRV_CMD_BUF_OFFSET || phys_off >= end) 700 + return -EINVAL; 701 + 702 + q_id = (phys_off - UBLKSRV_CMD_BUF_OFFSET) / max_sz; 703 + pr_devel("%s: qid %d, pid %d, addr %lx pg_off %lx sz %lu\n", 704 + __func__, q_id, current->pid, vma->vm_start, 705 + phys_off, (unsigned long)sz); 706 + 707 + if (sz != ublk_queue_cmd_buf_size(ub, q_id)) 708 + return -EINVAL; 709 + 710 + pfn = virt_to_phys(ublk_queue_cmd_buf(ub, q_id)) >> PAGE_SHIFT; 711 + return remap_pfn_range(vma, vma->vm_start, pfn, sz, vma->vm_page_prot); 712 + } 713 + 714 + static void ublk_commit_completion(struct ublk_device *ub, 715 + struct ublksrv_io_cmd *ub_cmd) 716 + { 717 + u32 qid = ub_cmd->q_id, tag = ub_cmd->tag; 718 + struct ublk_queue *ubq = ublk_get_queue(ub, qid); 719 + struct ublk_io *io = &ubq->ios[tag]; 720 + struct request *req; 721 + 722 + /* now this cmd slot is owned by nbd driver */ 723 + io->flags &= ~UBLK_IO_FLAG_OWNED_BY_SRV; 724 + io->res = ub_cmd->result; 725 + 726 + /* find the io request and complete */ 727 + req = blk_mq_tag_to_rq(ub->tag_set.tags[qid], tag); 728 + 729 + if (req && likely(!blk_should_fake_timeout(req->q))) 730 + ublk_complete_rq(req); 731 + } 732 + 733 + /* 734 + * When ->ubq_daemon is exiting, either new request is ended immediately, 735 + * or any queued io command is drained, so it is safe to abort queue 736 + * lockless 737 + */ 738 + static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq) 739 + { 740 + int i; 741 + 742 + if (!ublk_get_device(ub)) 743 + return; 744 + 745 + for (i = 0; i < ubq->q_depth; i++) { 746 + struct ublk_io *io = &ubq->ios[i]; 747 + 748 + if (!(io->flags & UBLK_IO_FLAG_ACTIVE)) { 749 + struct request *rq; 750 + 751 + /* 752 + * Either we fail the request or ublk_rq_task_work_fn 753 + * will do it 754 + */ 755 + rq = blk_mq_tag_to_rq(ub->tag_set.tags[ubq->q_id], i); 756 + if (rq) 757 + __ublk_fail_req(io, rq); 758 + } 759 + } 760 + ublk_put_device(ub); 761 + } 762 + 763 + static void ublk_daemon_monitor_work(struct work_struct *work) 764 + { 765 + struct ublk_device *ub = 766 + container_of(work, struct ublk_device, monitor_work.work); 767 + int i; 768 + 769 + for (i = 0; i < ub->dev_info.nr_hw_queues; i++) { 770 + struct ublk_queue *ubq = ublk_get_queue(ub, i); 771 + 772 + if (ubq_daemon_is_dying(ubq)) { 773 + schedule_work(&ub->stop_work); 774 + 775 + /* abort queue is for making forward progress */ 776 + ublk_abort_queue(ub, ubq); 777 + } 778 + } 779 + 780 + /* 781 + * We can't schedule monitor work after ublk_remove() is started. 782 + * 783 + * No need ub->mutex, monitor work are canceled after state is marked 784 + * as DEAD, so DEAD state is observed reliably. 785 + */ 786 + if (ub->dev_info.state != UBLK_S_DEV_DEAD) 787 + schedule_delayed_work(&ub->monitor_work, 788 + UBLK_DAEMON_MONITOR_PERIOD); 789 + } 790 + 791 + static void ublk_cancel_queue(struct ublk_queue *ubq) 792 + { 793 + int i; 794 + 795 + for (i = 0; i < ubq->q_depth; i++) { 796 + struct ublk_io *io = &ubq->ios[i]; 797 + 798 + if (io->flags & UBLK_IO_FLAG_ACTIVE) 799 + io_uring_cmd_done(io->cmd, UBLK_IO_RES_ABORT, 0); 800 + } 801 + } 802 + 803 + /* Cancel all pending commands, must be called after del_gendisk() returns */ 804 + static void ublk_cancel_dev(struct ublk_device *ub) 805 + { 806 + int i; 807 + 808 + for (i = 0; i < ub->dev_info.nr_hw_queues; i++) 809 + ublk_cancel_queue(ublk_get_queue(ub, i)); 810 + } 811 + 812 + static void ublk_stop_dev(struct ublk_device *ub) 813 + { 814 + mutex_lock(&ub->mutex); 815 + if (ub->dev_info.state != UBLK_S_DEV_LIVE) 816 + goto unlock; 817 + 818 + del_gendisk(ub->ub_disk); 819 + ub->dev_info.state = UBLK_S_DEV_DEAD; 820 + ub->dev_info.ublksrv_pid = -1; 821 + ublk_cancel_dev(ub); 822 + put_disk(ub->ub_disk); 823 + ub->ub_disk = NULL; 824 + unlock: 825 + mutex_unlock(&ub->mutex); 826 + cancel_delayed_work_sync(&ub->monitor_work); 827 + } 828 + 829 + static inline bool ublk_queue_ready(struct ublk_queue *ubq) 830 + { 831 + return ubq->nr_io_ready == ubq->q_depth; 832 + } 833 + 834 + /* device can only be started after all IOs are ready */ 835 + static void ublk_mark_io_ready(struct ublk_device *ub, struct ublk_queue *ubq) 836 + { 837 + mutex_lock(&ub->mutex); 838 + ubq->nr_io_ready++; 839 + if (ublk_queue_ready(ubq)) { 840 + ubq->ubq_daemon = current; 841 + get_task_struct(ubq->ubq_daemon); 842 + ub->nr_queues_ready++; 843 + } 844 + if (ub->nr_queues_ready == ub->dev_info.nr_hw_queues) 845 + complete_all(&ub->completion); 846 + mutex_unlock(&ub->mutex); 847 + } 848 + 849 + static int ublk_ch_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags) 850 + { 851 + struct ublksrv_io_cmd *ub_cmd = (struct ublksrv_io_cmd *)cmd->cmd; 852 + struct ublk_device *ub = cmd->file->private_data; 853 + struct ublk_queue *ubq; 854 + struct ublk_io *io; 855 + u32 cmd_op = cmd->cmd_op; 856 + unsigned tag = ub_cmd->tag; 857 + int ret = -EINVAL; 858 + 859 + pr_devel("%s: received: cmd op %d queue %d tag %d result %d\n", 860 + __func__, cmd->cmd_op, ub_cmd->q_id, tag, 861 + ub_cmd->result); 862 + 863 + if (!(issue_flags & IO_URING_F_SQE128)) 864 + goto out; 865 + 866 + if (ub_cmd->q_id >= ub->dev_info.nr_hw_queues) 867 + goto out; 868 + 869 + ubq = ublk_get_queue(ub, ub_cmd->q_id); 870 + if (!ubq || ub_cmd->q_id != ubq->q_id) 871 + goto out; 872 + 873 + if (ubq->ubq_daemon && ubq->ubq_daemon != current) 874 + goto out; 875 + 876 + if (tag >= ubq->q_depth) 877 + goto out; 878 + 879 + io = &ubq->ios[tag]; 880 + 881 + /* there is pending io cmd, something must be wrong */ 882 + if (io->flags & UBLK_IO_FLAG_ACTIVE) { 883 + ret = -EBUSY; 884 + goto out; 885 + } 886 + 887 + switch (cmd_op) { 888 + case UBLK_IO_FETCH_REQ: 889 + /* UBLK_IO_FETCH_REQ is only allowed before queue is setup */ 890 + if (ublk_queue_ready(ubq)) { 891 + ret = -EBUSY; 892 + goto out; 893 + } 894 + /* 895 + * The io is being handled by server, so COMMIT_RQ is expected 896 + * instead of FETCH_REQ 897 + */ 898 + if (io->flags & UBLK_IO_FLAG_OWNED_BY_SRV) 899 + goto out; 900 + /* FETCH_RQ has to provide IO buffer */ 901 + if (!ub_cmd->addr) 902 + goto out; 903 + io->cmd = cmd; 904 + io->flags |= UBLK_IO_FLAG_ACTIVE; 905 + io->addr = ub_cmd->addr; 906 + 907 + ublk_mark_io_ready(ub, ubq); 908 + break; 909 + case UBLK_IO_COMMIT_AND_FETCH_REQ: 910 + /* FETCH_RQ has to provide IO buffer */ 911 + if (!ub_cmd->addr) 912 + goto out; 913 + if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV)) 914 + goto out; 915 + io->addr = ub_cmd->addr; 916 + io->flags |= UBLK_IO_FLAG_ACTIVE; 917 + io->cmd = cmd; 918 + ublk_commit_completion(ub, ub_cmd); 919 + break; 920 + default: 921 + goto out; 922 + } 923 + return -EIOCBQUEUED; 924 + 925 + out: 926 + io_uring_cmd_done(cmd, ret, 0); 927 + pr_devel("%s: complete: cmd op %d, tag %d ret %x io_flags %x\n", 928 + __func__, cmd_op, tag, ret, io->flags); 929 + return -EIOCBQUEUED; 930 + } 931 + 932 + static const struct file_operations ublk_ch_fops = { 933 + .owner = THIS_MODULE, 934 + .open = ublk_ch_open, 935 + .release = ublk_ch_release, 936 + .llseek = no_llseek, 937 + .uring_cmd = ublk_ch_uring_cmd, 938 + .mmap = ublk_ch_mmap, 939 + }; 940 + 941 + static void ublk_deinit_queue(struct ublk_device *ub, int q_id) 942 + { 943 + int size = ublk_queue_cmd_buf_size(ub, q_id); 944 + struct ublk_queue *ubq = ublk_get_queue(ub, q_id); 945 + 946 + if (ubq->ubq_daemon) 947 + put_task_struct(ubq->ubq_daemon); 948 + if (ubq->io_cmd_buf) 949 + free_pages((unsigned long)ubq->io_cmd_buf, get_order(size)); 950 + } 951 + 952 + static int ublk_init_queue(struct ublk_device *ub, int q_id) 953 + { 954 + struct ublk_queue *ubq = ublk_get_queue(ub, q_id); 955 + gfp_t gfp_flags = GFP_KERNEL | __GFP_ZERO; 956 + void *ptr; 957 + int size; 958 + 959 + ubq->flags = ub->dev_info.flags; 960 + ubq->q_id = q_id; 961 + ubq->q_depth = ub->dev_info.queue_depth; 962 + size = ublk_queue_cmd_buf_size(ub, q_id); 963 + 964 + ptr = (void *) __get_free_pages(gfp_flags, get_order(size)); 965 + if (!ptr) 966 + return -ENOMEM; 967 + 968 + ubq->io_cmd_buf = ptr; 969 + ubq->dev = ub; 970 + return 0; 971 + } 972 + 973 + static void ublk_deinit_queues(struct ublk_device *ub) 974 + { 975 + int nr_queues = ub->dev_info.nr_hw_queues; 976 + int i; 977 + 978 + if (!ub->__queues) 979 + return; 980 + 981 + for (i = 0; i < nr_queues; i++) 982 + ublk_deinit_queue(ub, i); 983 + kfree(ub->__queues); 984 + } 985 + 986 + static int ublk_init_queues(struct ublk_device *ub) 987 + { 988 + int nr_queues = ub->dev_info.nr_hw_queues; 989 + int depth = ub->dev_info.queue_depth; 990 + int ubq_size = sizeof(struct ublk_queue) + depth * sizeof(struct ublk_io); 991 + int i, ret = -ENOMEM; 992 + 993 + ub->queue_size = ubq_size; 994 + ub->__queues = kcalloc(nr_queues, ubq_size, GFP_KERNEL); 995 + if (!ub->__queues) 996 + return ret; 997 + 998 + for (i = 0; i < nr_queues; i++) { 999 + if (ublk_init_queue(ub, i)) 1000 + goto fail; 1001 + } 1002 + 1003 + init_completion(&ub->completion); 1004 + return 0; 1005 + 1006 + fail: 1007 + ublk_deinit_queues(ub); 1008 + return ret; 1009 + } 1010 + 1011 + static int ublk_alloc_dev_number(struct ublk_device *ub, int idx) 1012 + { 1013 + int i = idx; 1014 + int err; 1015 + 1016 + spin_lock(&ublk_idr_lock); 1017 + /* allocate id, if @id >= 0, we're requesting that specific id */ 1018 + if (i >= 0) { 1019 + err = idr_alloc(&ublk_index_idr, ub, i, i + 1, GFP_NOWAIT); 1020 + if (err == -ENOSPC) 1021 + err = -EEXIST; 1022 + } else { 1023 + err = idr_alloc(&ublk_index_idr, ub, 0, 0, GFP_NOWAIT); 1024 + } 1025 + spin_unlock(&ublk_idr_lock); 1026 + 1027 + if (err >= 0) 1028 + ub->ub_number = err; 1029 + 1030 + return err; 1031 + } 1032 + 1033 + static void ublk_free_dev_number(struct ublk_device *ub) 1034 + { 1035 + spin_lock(&ublk_idr_lock); 1036 + idr_remove(&ublk_index_idr, ub->ub_number); 1037 + wake_up_all(&ublk_idr_wq); 1038 + spin_unlock(&ublk_idr_lock); 1039 + } 1040 + 1041 + static void ublk_cdev_rel(struct device *dev) 1042 + { 1043 + struct ublk_device *ub = container_of(dev, struct ublk_device, cdev_dev); 1044 + 1045 + blk_mq_free_tag_set(&ub->tag_set); 1046 + ublk_deinit_queues(ub); 1047 + ublk_free_dev_number(ub); 1048 + mutex_destroy(&ub->mutex); 1049 + kfree(ub); 1050 + } 1051 + 1052 + static int ublk_add_chdev(struct ublk_device *ub) 1053 + { 1054 + struct device *dev = &ub->cdev_dev; 1055 + int minor = ub->ub_number; 1056 + int ret; 1057 + 1058 + dev->parent = ublk_misc.this_device; 1059 + dev->devt = MKDEV(MAJOR(ublk_chr_devt), minor); 1060 + dev->class = ublk_chr_class; 1061 + dev->release = ublk_cdev_rel; 1062 + device_initialize(dev); 1063 + 1064 + ret = dev_set_name(dev, "ublkc%d", minor); 1065 + if (ret) 1066 + goto fail; 1067 + 1068 + cdev_init(&ub->cdev, &ublk_ch_fops); 1069 + ret = cdev_device_add(&ub->cdev, dev); 1070 + if (ret) 1071 + goto fail; 1072 + return 0; 1073 + fail: 1074 + put_device(dev); 1075 + return ret; 1076 + } 1077 + 1078 + static void ublk_stop_work_fn(struct work_struct *work) 1079 + { 1080 + struct ublk_device *ub = 1081 + container_of(work, struct ublk_device, stop_work); 1082 + 1083 + ublk_stop_dev(ub); 1084 + } 1085 + 1086 + /* align maximum I/O size to PAGE_SIZE */ 1087 + static void ublk_align_max_io_size(struct ublk_device *ub) 1088 + { 1089 + unsigned int max_rq_bytes = ub->dev_info.rq_max_blocks << ub->bs_shift; 1090 + 1091 + ub->dev_info.rq_max_blocks = 1092 + round_down(max_rq_bytes, PAGE_SIZE) >> ub->bs_shift; 1093 + } 1094 + 1095 + static int ublk_add_tag_set(struct ublk_device *ub) 1096 + { 1097 + ub->tag_set.ops = &ublk_mq_ops; 1098 + ub->tag_set.nr_hw_queues = ub->dev_info.nr_hw_queues; 1099 + ub->tag_set.queue_depth = ub->dev_info.queue_depth; 1100 + ub->tag_set.numa_node = NUMA_NO_NODE; 1101 + ub->tag_set.cmd_size = sizeof(struct ublk_rq_data); 1102 + ub->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; 1103 + ub->tag_set.driver_data = ub; 1104 + return blk_mq_alloc_tag_set(&ub->tag_set); 1105 + } 1106 + 1107 + static void ublk_remove(struct ublk_device *ub) 1108 + { 1109 + ublk_stop_dev(ub); 1110 + cancel_work_sync(&ub->stop_work); 1111 + cdev_device_del(&ub->cdev, &ub->cdev_dev); 1112 + put_device(&ub->cdev_dev); 1113 + } 1114 + 1115 + static struct ublk_device *ublk_get_device_from_id(int idx) 1116 + { 1117 + struct ublk_device *ub = NULL; 1118 + 1119 + if (idx < 0) 1120 + return NULL; 1121 + 1122 + spin_lock(&ublk_idr_lock); 1123 + ub = idr_find(&ublk_index_idr, idx); 1124 + if (ub) 1125 + ub = ublk_get_device(ub); 1126 + spin_unlock(&ublk_idr_lock); 1127 + 1128 + return ub; 1129 + } 1130 + 1131 + static int ublk_ctrl_start_dev(struct io_uring_cmd *cmd) 1132 + { 1133 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1134 + int ublksrv_pid = (int)header->data[0]; 1135 + unsigned long dev_blocks = header->data[1]; 1136 + struct ublk_device *ub; 1137 + struct gendisk *disk; 1138 + int ret = -EINVAL; 1139 + 1140 + if (ublksrv_pid <= 0) 1141 + return -EINVAL; 1142 + 1143 + ub = ublk_get_device_from_id(header->dev_id); 1144 + if (!ub) 1145 + return -EINVAL; 1146 + 1147 + wait_for_completion_interruptible(&ub->completion); 1148 + 1149 + schedule_delayed_work(&ub->monitor_work, UBLK_DAEMON_MONITOR_PERIOD); 1150 + 1151 + mutex_lock(&ub->mutex); 1152 + if (ub->dev_info.state == UBLK_S_DEV_LIVE || 1153 + test_bit(UB_STATE_USED, &ub->state)) { 1154 + ret = -EEXIST; 1155 + goto out_unlock; 1156 + } 1157 + 1158 + /* We may get disk size updated */ 1159 + if (dev_blocks) 1160 + ub->dev_info.dev_blocks = dev_blocks; 1161 + 1162 + disk = blk_mq_alloc_disk(&ub->tag_set, ub); 1163 + if (IS_ERR(disk)) { 1164 + ret = PTR_ERR(disk); 1165 + goto out_unlock; 1166 + } 1167 + sprintf(disk->disk_name, "ublkb%d", ub->ub_number); 1168 + disk->fops = &ub_fops; 1169 + disk->private_data = ub; 1170 + 1171 + blk_queue_logical_block_size(disk->queue, ub->dev_info.block_size); 1172 + blk_queue_physical_block_size(disk->queue, ub->dev_info.block_size); 1173 + blk_queue_io_min(disk->queue, ub->dev_info.block_size); 1174 + blk_queue_max_hw_sectors(disk->queue, 1175 + ub->dev_info.rq_max_blocks << (ub->bs_shift - 9)); 1176 + disk->queue->limits.discard_granularity = PAGE_SIZE; 1177 + blk_queue_max_discard_sectors(disk->queue, UINT_MAX >> 9); 1178 + blk_queue_max_write_zeroes_sectors(disk->queue, UINT_MAX >> 9); 1179 + 1180 + set_capacity(disk, ub->dev_info.dev_blocks << (ub->bs_shift - 9)); 1181 + 1182 + ub->dev_info.ublksrv_pid = ublksrv_pid; 1183 + ub->ub_disk = disk; 1184 + get_device(&ub->cdev_dev); 1185 + ret = add_disk(disk); 1186 + if (ret) { 1187 + put_disk(disk); 1188 + goto out_unlock; 1189 + } 1190 + set_bit(UB_STATE_USED, &ub->state); 1191 + ub->dev_info.state = UBLK_S_DEV_LIVE; 1192 + out_unlock: 1193 + mutex_unlock(&ub->mutex); 1194 + ublk_put_device(ub); 1195 + return ret; 1196 + } 1197 + 1198 + static int ublk_ctrl_get_queue_affinity(struct io_uring_cmd *cmd) 1199 + { 1200 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1201 + void __user *argp = (void __user *)(unsigned long)header->addr; 1202 + struct ublk_device *ub; 1203 + cpumask_var_t cpumask; 1204 + unsigned long queue; 1205 + unsigned int retlen; 1206 + unsigned int i; 1207 + int ret = -EINVAL; 1208 + 1209 + if (header->len * BITS_PER_BYTE < nr_cpu_ids) 1210 + return -EINVAL; 1211 + if (header->len & (sizeof(unsigned long)-1)) 1212 + return -EINVAL; 1213 + if (!header->addr) 1214 + return -EINVAL; 1215 + 1216 + ub = ublk_get_device_from_id(header->dev_id); 1217 + if (!ub) 1218 + return -EINVAL; 1219 + 1220 + queue = header->data[0]; 1221 + if (queue >= ub->dev_info.nr_hw_queues) 1222 + goto out_put_device; 1223 + 1224 + ret = -ENOMEM; 1225 + if (!zalloc_cpumask_var(&cpumask, GFP_KERNEL)) 1226 + goto out_put_device; 1227 + 1228 + for_each_possible_cpu(i) { 1229 + if (ub->tag_set.map[HCTX_TYPE_DEFAULT].mq_map[i] == queue) 1230 + cpumask_set_cpu(i, cpumask); 1231 + } 1232 + 1233 + ret = -EFAULT; 1234 + retlen = min_t(unsigned short, header->len, cpumask_size()); 1235 + if (copy_to_user(argp, cpumask, retlen)) 1236 + goto out_free_cpumask; 1237 + if (retlen != header->len && 1238 + clear_user(argp + retlen, header->len - retlen)) 1239 + goto out_free_cpumask; 1240 + 1241 + ret = 0; 1242 + out_free_cpumask: 1243 + free_cpumask_var(cpumask); 1244 + out_put_device: 1245 + ublk_put_device(ub); 1246 + return ret; 1247 + } 1248 + 1249 + static inline void ublk_dump_dev_info(struct ublksrv_ctrl_dev_info *info) 1250 + { 1251 + pr_devel("%s: dev id %d flags %llx\n", __func__, 1252 + info->dev_id, info->flags); 1253 + pr_devel("\t nr_hw_queues %d queue_depth %d block size %d dev_capacity %lld\n", 1254 + info->nr_hw_queues, info->queue_depth, 1255 + info->block_size, info->dev_blocks); 1256 + } 1257 + 1258 + static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd) 1259 + { 1260 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1261 + void __user *argp = (void __user *)(unsigned long)header->addr; 1262 + struct ublksrv_ctrl_dev_info info; 1263 + struct ublk_device *ub; 1264 + int ret = -EINVAL; 1265 + 1266 + if (header->len < sizeof(info) || !header->addr) 1267 + return -EINVAL; 1268 + if (header->queue_id != (u16)-1) { 1269 + pr_warn("%s: queue_id is wrong %x\n", 1270 + __func__, header->queue_id); 1271 + return -EINVAL; 1272 + } 1273 + if (copy_from_user(&info, argp, sizeof(info))) 1274 + return -EFAULT; 1275 + ublk_dump_dev_info(&info); 1276 + if (header->dev_id != info.dev_id) { 1277 + pr_warn("%s: dev id not match %u %u\n", 1278 + __func__, header->dev_id, info.dev_id); 1279 + return -EINVAL; 1280 + } 1281 + 1282 + ret = mutex_lock_killable(&ublk_ctl_mutex); 1283 + if (ret) 1284 + return ret; 1285 + 1286 + ret = -ENOMEM; 1287 + ub = kzalloc(sizeof(*ub), GFP_KERNEL); 1288 + if (!ub) 1289 + goto out_unlock; 1290 + mutex_init(&ub->mutex); 1291 + spin_lock_init(&ub->mm_lock); 1292 + INIT_WORK(&ub->stop_work, ublk_stop_work_fn); 1293 + INIT_DELAYED_WORK(&ub->monitor_work, ublk_daemon_monitor_work); 1294 + 1295 + ret = ublk_alloc_dev_number(ub, header->dev_id); 1296 + if (ret < 0) 1297 + goto out_free_ub; 1298 + 1299 + memcpy(&ub->dev_info, &info, sizeof(info)); 1300 + 1301 + /* update device id */ 1302 + ub->dev_info.dev_id = ub->ub_number; 1303 + 1304 + /* 1305 + * 64bit flags will be copied back to userspace as feature 1306 + * negotiation result, so have to clear flags which driver 1307 + * doesn't support yet, then userspace can get correct flags 1308 + * (features) to handle. 1309 + */ 1310 + ub->dev_info.flags &= UBLK_F_ALL; 1311 + 1312 + /* We are not ready to support zero copy */ 1313 + ub->dev_info.flags &= ~UBLK_F_SUPPORT_ZERO_COPY; 1314 + 1315 + ub->bs_shift = ilog2(ub->dev_info.block_size); 1316 + ub->dev_info.nr_hw_queues = min_t(unsigned int, 1317 + ub->dev_info.nr_hw_queues, nr_cpu_ids); 1318 + ublk_align_max_io_size(ub); 1319 + 1320 + ret = ublk_init_queues(ub); 1321 + if (ret) 1322 + goto out_free_dev_number; 1323 + 1324 + ret = ublk_add_tag_set(ub); 1325 + if (ret) 1326 + goto out_deinit_queues; 1327 + 1328 + ret = -EFAULT; 1329 + if (copy_to_user(argp, &ub->dev_info, sizeof(info))) 1330 + goto out_free_tag_set; 1331 + 1332 + /* 1333 + * Add the char dev so that ublksrv daemon can be setup. 1334 + * ublk_add_chdev() will cleanup everything if it fails. 1335 + */ 1336 + ret = ublk_add_chdev(ub); 1337 + goto out_unlock; 1338 + 1339 + out_free_tag_set: 1340 + blk_mq_free_tag_set(&ub->tag_set); 1341 + out_deinit_queues: 1342 + ublk_deinit_queues(ub); 1343 + out_free_dev_number: 1344 + ublk_free_dev_number(ub); 1345 + out_free_ub: 1346 + mutex_destroy(&ub->mutex); 1347 + kfree(ub); 1348 + out_unlock: 1349 + mutex_unlock(&ublk_ctl_mutex); 1350 + return ret; 1351 + } 1352 + 1353 + static inline bool ublk_idr_freed(int id) 1354 + { 1355 + void *ptr; 1356 + 1357 + spin_lock(&ublk_idr_lock); 1358 + ptr = idr_find(&ublk_index_idr, id); 1359 + spin_unlock(&ublk_idr_lock); 1360 + 1361 + return ptr == NULL; 1362 + } 1363 + 1364 + static int ublk_ctrl_del_dev(int idx) 1365 + { 1366 + struct ublk_device *ub; 1367 + int ret; 1368 + 1369 + ret = mutex_lock_killable(&ublk_ctl_mutex); 1370 + if (ret) 1371 + return ret; 1372 + 1373 + ub = ublk_get_device_from_id(idx); 1374 + if (ub) { 1375 + ublk_remove(ub); 1376 + ublk_put_device(ub); 1377 + ret = 0; 1378 + } else { 1379 + ret = -ENODEV; 1380 + } 1381 + 1382 + /* 1383 + * Wait until the idr is removed, then it can be reused after 1384 + * DEL_DEV command is returned. 1385 + */ 1386 + if (!ret) 1387 + wait_event(ublk_idr_wq, ublk_idr_freed(idx)); 1388 + mutex_unlock(&ublk_ctl_mutex); 1389 + 1390 + return ret; 1391 + } 1392 + 1393 + static inline void ublk_ctrl_cmd_dump(struct io_uring_cmd *cmd) 1394 + { 1395 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1396 + 1397 + pr_devel("%s: cmd_op %x, dev id %d qid %d data %llx buf %llx len %u\n", 1398 + __func__, cmd->cmd_op, header->dev_id, header->queue_id, 1399 + header->data[0], header->addr, header->len); 1400 + } 1401 + 1402 + static int ublk_ctrl_stop_dev(struct io_uring_cmd *cmd) 1403 + { 1404 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1405 + struct ublk_device *ub; 1406 + 1407 + ub = ublk_get_device_from_id(header->dev_id); 1408 + if (!ub) 1409 + return -EINVAL; 1410 + 1411 + ublk_stop_dev(ub); 1412 + cancel_work_sync(&ub->stop_work); 1413 + 1414 + ublk_put_device(ub); 1415 + return 0; 1416 + } 1417 + 1418 + static int ublk_ctrl_get_dev_info(struct io_uring_cmd *cmd) 1419 + { 1420 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1421 + void __user *argp = (void __user *)(unsigned long)header->addr; 1422 + struct ublk_device *ub; 1423 + int ret = 0; 1424 + 1425 + if (header->len < sizeof(struct ublksrv_ctrl_dev_info) || !header->addr) 1426 + return -EINVAL; 1427 + 1428 + ub = ublk_get_device_from_id(header->dev_id); 1429 + if (!ub) 1430 + return -EINVAL; 1431 + 1432 + if (copy_to_user(argp, &ub->dev_info, sizeof(ub->dev_info))) 1433 + ret = -EFAULT; 1434 + ublk_put_device(ub); 1435 + 1436 + return ret; 1437 + } 1438 + 1439 + static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd, 1440 + unsigned int issue_flags) 1441 + { 1442 + struct ublksrv_ctrl_cmd *header = (struct ublksrv_ctrl_cmd *)cmd->cmd; 1443 + int ret = -EINVAL; 1444 + 1445 + ublk_ctrl_cmd_dump(cmd); 1446 + 1447 + if (!(issue_flags & IO_URING_F_SQE128)) 1448 + goto out; 1449 + 1450 + ret = -EPERM; 1451 + if (!capable(CAP_SYS_ADMIN)) 1452 + goto out; 1453 + 1454 + ret = -ENODEV; 1455 + switch (cmd->cmd_op) { 1456 + case UBLK_CMD_START_DEV: 1457 + ret = ublk_ctrl_start_dev(cmd); 1458 + break; 1459 + case UBLK_CMD_STOP_DEV: 1460 + ret = ublk_ctrl_stop_dev(cmd); 1461 + break; 1462 + case UBLK_CMD_GET_DEV_INFO: 1463 + ret = ublk_ctrl_get_dev_info(cmd); 1464 + break; 1465 + case UBLK_CMD_ADD_DEV: 1466 + ret = ublk_ctrl_add_dev(cmd); 1467 + break; 1468 + case UBLK_CMD_DEL_DEV: 1469 + ret = ublk_ctrl_del_dev(header->dev_id); 1470 + break; 1471 + case UBLK_CMD_GET_QUEUE_AFFINITY: 1472 + ret = ublk_ctrl_get_queue_affinity(cmd); 1473 + break; 1474 + default: 1475 + break; 1476 + } 1477 + out: 1478 + io_uring_cmd_done(cmd, ret, 0); 1479 + pr_devel("%s: cmd done ret %d cmd_op %x, dev id %d qid %d\n", 1480 + __func__, ret, cmd->cmd_op, header->dev_id, header->queue_id); 1481 + return -EIOCBQUEUED; 1482 + } 1483 + 1484 + static const struct file_operations ublk_ctl_fops = { 1485 + .open = nonseekable_open, 1486 + .uring_cmd = ublk_ctrl_uring_cmd, 1487 + .owner = THIS_MODULE, 1488 + .llseek = noop_llseek, 1489 + }; 1490 + 1491 + static struct miscdevice ublk_misc = { 1492 + .minor = MISC_DYNAMIC_MINOR, 1493 + .name = "ublk-control", 1494 + .fops = &ublk_ctl_fops, 1495 + }; 1496 + 1497 + static int __init ublk_init(void) 1498 + { 1499 + int ret; 1500 + 1501 + init_waitqueue_head(&ublk_idr_wq); 1502 + 1503 + ret = misc_register(&ublk_misc); 1504 + if (ret) 1505 + return ret; 1506 + 1507 + ret = alloc_chrdev_region(&ublk_chr_devt, 0, UBLK_MINORS, "ublk-char"); 1508 + if (ret) 1509 + goto unregister_mis; 1510 + 1511 + ublk_chr_class = class_create(THIS_MODULE, "ublk-char"); 1512 + if (IS_ERR(ublk_chr_class)) { 1513 + ret = PTR_ERR(ublk_chr_class); 1514 + goto free_chrdev_region; 1515 + } 1516 + return 0; 1517 + 1518 + free_chrdev_region: 1519 + unregister_chrdev_region(ublk_chr_devt, UBLK_MINORS); 1520 + unregister_mis: 1521 + misc_deregister(&ublk_misc); 1522 + return ret; 1523 + } 1524 + 1525 + static void __exit ublk_exit(void) 1526 + { 1527 + struct ublk_device *ub; 1528 + int id; 1529 + 1530 + class_destroy(ublk_chr_class); 1531 + 1532 + misc_deregister(&ublk_misc); 1533 + 1534 + idr_for_each_entry(&ublk_index_idr, ub, id) 1535 + ublk_remove(ub); 1536 + 1537 + idr_destroy(&ublk_index_idr); 1538 + unregister_chrdev_region(ublk_chr_devt, UBLK_MINORS); 1539 + } 1540 + 1541 + module_init(ublk_init); 1542 + module_exit(ublk_exit); 1543 + 1544 + MODULE_AUTHOR("Ming Lei <ming.lei@redhat.com>"); 1545 + MODULE_LICENSE("GPL");
+1 -2
drivers/block/virtio_blk.c
··· 1089 1089 return 0; 1090 1090 1091 1091 out_cleanup_disk: 1092 - blk_cleanup_disk(vblk->disk); 1092 + put_disk(vblk->disk); 1093 1093 out_free_tags: 1094 1094 blk_mq_free_tag_set(&vblk->tag_set); 1095 1095 out_free_vq: ··· 1111 1111 flush_work(&vblk->config_work); 1112 1112 1113 1113 del_gendisk(vblk->disk); 1114 - blk_cleanup_queue(vblk->disk->queue); 1115 1114 blk_mq_free_tag_set(&vblk->tag_set); 1116 1115 1117 1116 mutex_lock(&vblk->vdev_mutex);
+3 -3
drivers/block/xen-blkback/blkback.c
··· 442 442 * Routines for managing virtual block devices (vbds). 443 443 */ 444 444 static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif, 445 - int operation) 445 + enum req_op operation) 446 446 { 447 447 struct xen_vbd *vbd = &blkif->vbd; 448 448 int rc = -EACCES; ··· 1193 1193 struct bio *bio = NULL; 1194 1194 struct bio **biolist = pending_req->biolist; 1195 1195 int i, nbio = 0; 1196 - int operation; 1197 - int operation_flags = 0; 1196 + enum req_op operation; 1197 + blk_opf_t operation_flags = 0; 1198 1198 struct blk_plug plug; 1199 1199 bool drain = false; 1200 1200 struct grant_page **pages = pending_req->segments;
+2 -2
drivers/block/xen-blkfront.c
··· 2397 2397 2398 2398 err = device_add_disk(&info->xbdev->dev, info->gd, NULL); 2399 2399 if (err) { 2400 - blk_cleanup_disk(info->gd); 2400 + put_disk(info->gd); 2401 2401 blk_mq_free_tag_set(&info->tag_set); 2402 2402 info->rq = NULL; 2403 2403 goto fail; ··· 2482 2482 blkif_free(info, 0); 2483 2483 if (info->gd) { 2484 2484 xlbd_release_minors(info->gd->first_minor, info->gd->minors); 2485 - blk_cleanup_disk(info->gd); 2485 + put_disk(info->gd); 2486 2486 blk_mq_free_tag_set(&info->tag_set); 2487 2487 } 2488 2488
+1 -2
drivers/block/z2ram.c
··· 337 337 z2ram_gendisk[minor] = disk; 338 338 err = add_disk(disk); 339 339 if (err) 340 - blk_cleanup_disk(disk); 340 + put_disk(disk); 341 341 return err; 342 342 } 343 343 ··· 384 384 385 385 for (i = 0; i < Z2MINOR_COUNT; i++) { 386 386 del_gendisk(z2ram_gendisk[i]); 387 - blk_cleanup_queue(z2ram_gendisk[i]->queue); 388 387 put_disk(z2ram_gendisk[i]); 389 388 } 390 389 blk_mq_free_tag_set(&tag_set);
+4 -4
drivers/block/zram/zram_drv.c
··· 1523 1523 * Returns 1 if IO request was successfully submitted. 1524 1524 */ 1525 1525 static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index, 1526 - int offset, unsigned int op, struct bio *bio) 1526 + int offset, enum req_op op, struct bio *bio) 1527 1527 { 1528 1528 int ret; 1529 1529 ··· 1631 1631 } 1632 1632 1633 1633 static int zram_rw_page(struct block_device *bdev, sector_t sector, 1634 - struct page *page, unsigned int op) 1634 + struct page *page, enum req_op op) 1635 1635 { 1636 1636 int offset, ret; 1637 1637 u32 index; ··· 1957 1957 return device_id; 1958 1958 1959 1959 out_cleanup_disk: 1960 - blk_cleanup_disk(zram->disk); 1960 + put_disk(zram->disk); 1961 1961 out_free_idr: 1962 1962 idr_remove(&zram_index_idr, device_id); 1963 1963 out_free_dev: ··· 2008 2008 */ 2009 2009 zram_reset_device(zram); 2010 2010 2011 - blk_cleanup_disk(zram->disk); 2011 + put_disk(zram->disk); 2012 2012 kfree(zram); 2013 2013 return 0; 2014 2014 }
+1 -2
drivers/cdrom/gdrom.c
··· 817 817 free_irq(HW_EVENT_GDROM_DMA, &gd); 818 818 free_irq(HW_EVENT_GDROM_CMD, &gd); 819 819 probe_fail_cleanup_disk: 820 - blk_cleanup_disk(gd.disk); 820 + put_disk(gd.disk); 821 821 probe_fail_free_tag_set: 822 822 blk_mq_free_tag_set(&gd.tag_set); 823 823 probe_fail_free_cd_info: ··· 831 831 832 832 static int remove_gdrom(struct platform_device *devptr) 833 833 { 834 - blk_cleanup_queue(gd.gdrom_rq); 835 834 blk_mq_free_tag_set(&gd.tag_set); 836 835 free_irq(HW_EVENT_GDROM_CMD, &gd); 837 836 free_irq(HW_EVENT_GDROM_DMA, &gd);
+1 -2
drivers/infiniband/ulp/srp/ib_srp.c
··· 1282 1282 int scsi_result; 1283 1283 }; 1284 1284 1285 - static bool srp_terminate_cmd(struct scsi_cmnd *scmnd, void *context_ptr, 1286 - bool reserved) 1285 + static bool srp_terminate_cmd(struct scsi_cmnd *scmnd, void *context_ptr) 1287 1286 { 1288 1287 struct srp_terminate_context *context = context_ptr; 1289 1288 struct srp_target_port *target = context->srp_target;
+13 -14
drivers/md/bcache/super.c
··· 414 414 up(&c->uuid_write_mutex); 415 415 } 416 416 417 - static void uuid_io(struct cache_set *c, int op, unsigned long op_flags, 418 - struct bkey *k, struct closure *parent) 417 + static void uuid_io(struct cache_set *c, blk_opf_t opf, struct bkey *k, 418 + struct closure *parent) 419 419 { 420 420 struct closure *cl = &c->uuid_write; 421 421 struct uuid_entry *u; ··· 429 429 for (i = 0; i < KEY_PTRS(k); i++) { 430 430 struct bio *bio = bch_bbio_alloc(c); 431 431 432 - bio->bi_opf = REQ_SYNC | REQ_META | op_flags; 432 + bio->bi_opf = opf | REQ_SYNC | REQ_META; 433 433 bio->bi_iter.bi_size = KEY_SIZE(k) << 9; 434 434 435 435 bio->bi_end_io = uuid_endio; 436 436 bio->bi_private = cl; 437 - bio_set_op_attrs(bio, op, REQ_SYNC|REQ_META|op_flags); 438 437 bch_bio_map(bio, c->uuids); 439 438 440 439 bch_submit_bbio(bio, c, k, i); 441 440 442 - if (op != REQ_OP_WRITE) 441 + if ((opf & REQ_OP_MASK) != REQ_OP_WRITE) 443 442 break; 444 443 } 445 444 446 445 bch_extent_to_text(buf, sizeof(buf), k); 447 - pr_debug("%s UUIDs at %s\n", op == REQ_OP_WRITE ? "wrote" : "read", buf); 446 + pr_debug("%s UUIDs at %s\n", (opf & REQ_OP_MASK) == REQ_OP_WRITE ? 447 + "wrote" : "read", buf); 448 448 449 449 for (u = c->uuids; u < c->uuids + c->nr_uuids; u++) 450 450 if (!bch_is_zero(u->uuid, 16)) ··· 463 463 return "bad uuid pointer"; 464 464 465 465 bkey_copy(&c->uuid_bucket, k); 466 - uuid_io(c, REQ_OP_READ, 0, k, cl); 466 + uuid_io(c, REQ_OP_READ, k, cl); 467 467 468 468 if (j->version < BCACHE_JSET_VERSION_UUIDv1) { 469 469 struct uuid_entry_v0 *u0 = (void *) c->uuids; ··· 511 511 512 512 size = meta_bucket_pages(&ca->sb) * PAGE_SECTORS; 513 513 SET_KEY_SIZE(&k.key, size); 514 - uuid_io(c, REQ_OP_WRITE, 0, &k.key, &cl); 514 + uuid_io(c, REQ_OP_WRITE, &k.key, &cl); 515 515 closure_sync(&cl); 516 516 517 517 /* Only one bucket used for uuid write */ ··· 587 587 closure_put(&ca->prio); 588 588 } 589 589 590 - static void prio_io(struct cache *ca, uint64_t bucket, int op, 591 - unsigned long op_flags) 590 + static void prio_io(struct cache *ca, uint64_t bucket, blk_opf_t opf) 592 591 { 593 592 struct closure *cl = &ca->prio; 594 593 struct bio *bio = bch_bbio_alloc(ca->set); ··· 600 601 601 602 bio->bi_end_io = prio_endio; 602 603 bio->bi_private = ca; 603 - bio_set_op_attrs(bio, op, REQ_SYNC|REQ_META|op_flags); 604 + bio->bi_opf = opf | REQ_SYNC | REQ_META; 604 605 bch_bio_map(bio, ca->disk_buckets); 605 606 606 607 closure_bio_submit(ca->set, bio, &ca->prio); ··· 660 661 BUG_ON(bucket == -1); 661 662 662 663 mutex_unlock(&ca->set->bucket_lock); 663 - prio_io(ca, bucket, REQ_OP_WRITE, 0); 664 + prio_io(ca, bucket, REQ_OP_WRITE); 664 665 mutex_lock(&ca->set->bucket_lock); 665 666 666 667 ca->prio_buckets[i] = bucket; ··· 704 705 ca->prio_last_buckets[bucket_nr] = bucket; 705 706 bucket_nr++; 706 707 707 - prio_io(ca, bucket, REQ_OP_READ, 0); 708 + prio_io(ca, bucket, REQ_OP_READ); 708 709 709 710 if (p->csum != 710 711 bch_crc64(&p->magic, meta_bucket_bytes(&ca->sb) - 8)) { ··· 883 884 if (disk) { 884 885 ida_simple_remove(&bcache_device_idx, 885 886 first_minor_to_idx(disk->first_minor)); 886 - blk_cleanup_disk(disk); 887 + put_disk(disk); 887 888 } 888 889 889 890 bioset_exit(&d->bio_split);
+12 -14
drivers/md/dm-bufio.c
··· 577 577 b->end_io(b, unlikely(error != 0) ? BLK_STS_IOERR : 0); 578 578 } 579 579 580 - static void use_dmio(struct dm_buffer *b, int rw, sector_t sector, 580 + static void use_dmio(struct dm_buffer *b, enum req_op op, sector_t sector, 581 581 unsigned n_sectors, unsigned offset) 582 582 { 583 583 int r; 584 584 struct dm_io_request io_req = { 585 - .bi_op = rw, 586 - .bi_op_flags = 0, 585 + .bi_opf = op, 587 586 .notify.fn = dmio_complete, 588 587 .notify.context = b, 589 588 .client = b->c->dm_io, ··· 615 616 b->end_io(b, status); 616 617 } 617 618 618 - static void use_bio(struct dm_buffer *b, int rw, sector_t sector, 619 + static void use_bio(struct dm_buffer *b, enum req_op op, sector_t sector, 619 620 unsigned n_sectors, unsigned offset) 620 621 { 621 622 struct bio *bio; ··· 629 630 bio = bio_kmalloc(vec_size, GFP_NOWAIT | __GFP_NORETRY | __GFP_NOWARN); 630 631 if (!bio) { 631 632 dmio: 632 - use_dmio(b, rw, sector, n_sectors, offset); 633 + use_dmio(b, op, sector, n_sectors, offset); 633 634 return; 634 635 } 635 - bio_init(bio, b->c->bdev, bio->bi_inline_vecs, vec_size, rw); 636 + bio_init(bio, b->c->bdev, bio->bi_inline_vecs, vec_size, op); 636 637 bio->bi_iter.bi_sector = sector; 637 638 bio->bi_end_io = bio_complete; 638 639 bio->bi_private = b; ··· 668 669 return sector; 669 670 } 670 671 671 - static void submit_io(struct dm_buffer *b, int rw, void (*end_io)(struct dm_buffer *, blk_status_t)) 672 + static void submit_io(struct dm_buffer *b, enum req_op op, 673 + void (*end_io)(struct dm_buffer *, blk_status_t)) 672 674 { 673 675 unsigned n_sectors; 674 676 sector_t sector; ··· 679 679 680 680 sector = block_to_sector(b->c, b->block); 681 681 682 - if (rw != REQ_OP_WRITE) { 682 + if (op != REQ_OP_WRITE) { 683 683 n_sectors = b->c->block_size >> SECTOR_SHIFT; 684 684 offset = 0; 685 685 } else { ··· 698 698 } 699 699 700 700 if (b->data_mode != DATA_MODE_VMALLOC) 701 - use_bio(b, rw, sector, n_sectors, offset); 701 + use_bio(b, op, sector, n_sectors, offset); 702 702 else 703 - use_dmio(b, rw, sector, n_sectors, offset); 703 + use_dmio(b, op, sector, n_sectors, offset); 704 704 } 705 705 706 706 /*---------------------------------------------------------------- ··· 1341 1341 int dm_bufio_issue_flush(struct dm_bufio_client *c) 1342 1342 { 1343 1343 struct dm_io_request io_req = { 1344 - .bi_op = REQ_OP_WRITE, 1345 - .bi_op_flags = REQ_PREFLUSH | REQ_SYNC, 1344 + .bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC, 1346 1345 .mem.type = DM_IO_KMEM, 1347 1346 .mem.ptr.addr = NULL, 1348 1347 .client = c->dm_io, ··· 1364 1365 int dm_bufio_issue_discard(struct dm_bufio_client *c, sector_t block, sector_t count) 1365 1366 { 1366 1367 struct dm_io_request io_req = { 1367 - .bi_op = REQ_OP_DISCARD, 1368 - .bi_op_flags = REQ_SYNC, 1368 + .bi_opf = REQ_OP_DISCARD | REQ_SYNC, 1369 1369 .mem.type = DM_IO_KMEM, 1370 1370 .mem.ptr.addr = NULL, 1371 1371 .client = c->dm_io,
+8 -7
drivers/md/dm-ebs-target.c
··· 61 61 * 62 62 * copy blocks between bufio blocks and bio vector's (partial/overlapping) pages. 63 63 */ 64 - static int __ebs_rw_bvec(struct ebs_c *ec, int rw, struct bio_vec *bv, struct bvec_iter *iter) 64 + static int __ebs_rw_bvec(struct ebs_c *ec, enum req_op op, struct bio_vec *bv, 65 + struct bvec_iter *iter) 65 66 { 66 67 int r = 0; 67 68 unsigned char *ba, *pa; ··· 82 81 cur_len = min(dm_bufio_get_block_size(ec->bufio) - buf_off, bv_len); 83 82 84 83 /* Avoid reading for writes in case bio vector's page overwrites block completely. */ 85 - if (rw == READ || buf_off || bv_len < dm_bufio_get_block_size(ec->bufio)) 84 + if (op == REQ_OP_READ || buf_off || bv_len < dm_bufio_get_block_size(ec->bufio)) 86 85 ba = dm_bufio_read(ec->bufio, block, &b); 87 86 else 88 87 ba = dm_bufio_new(ec->bufio, block, &b); ··· 96 95 } else { 97 96 /* Copy data to/from bio to buffer if read/new was successful above. */ 98 97 ba += buf_off; 99 - if (rw == READ) { 98 + if (op == REQ_OP_READ) { 100 99 memcpy(pa, ba, cur_len); 101 100 flush_dcache_page(bv->bv_page); 102 101 } else { ··· 118 117 } 119 118 120 119 /* READ/WRITE: iterate bio vector's copying between (partial) pages and bufio blocks. */ 121 - static int __ebs_rw_bio(struct ebs_c *ec, int rw, struct bio *bio) 120 + static int __ebs_rw_bio(struct ebs_c *ec, enum req_op op, struct bio *bio) 122 121 { 123 122 int r = 0, rr; 124 123 struct bio_vec bv; 125 124 struct bvec_iter iter; 126 125 127 126 bio_for_each_bvec(bv, bio, iter) { 128 - rr = __ebs_rw_bvec(ec, rw, &bv, &iter); 127 + rr = __ebs_rw_bvec(ec, op, &bv, &iter); 129 128 if (rr) 130 129 r = rr; 131 130 } ··· 206 205 bio_list_for_each(bio, &bios) { 207 206 r = -EIO; 208 207 if (bio_op(bio) == REQ_OP_READ) 209 - r = __ebs_rw_bio(ec, READ, bio); 208 + r = __ebs_rw_bio(ec, REQ_OP_READ, bio); 210 209 else if (bio_op(bio) == REQ_OP_WRITE) { 211 210 write = true; 212 - r = __ebs_rw_bio(ec, WRITE, bio); 211 + r = __ebs_rw_bio(ec, REQ_OP_WRITE, bio); 213 212 } else if (bio_op(bio) == REQ_OP_DISCARD) { 214 213 __ebs_forget_bio(ec, bio); 215 214 r = __ebs_discard_bio(ec, bio);
+6 -2
drivers/md/dm-flakey.c
··· 32 32 unsigned corrupt_bio_byte; 33 33 unsigned corrupt_bio_rw; 34 34 unsigned corrupt_bio_value; 35 - unsigned corrupt_bio_flags; 35 + blk_opf_t corrupt_bio_flags; 36 36 }; 37 37 38 38 enum feature_flag_bits { ··· 145 145 /* 146 146 * Only corrupt bios with these flags set. 147 147 */ 148 - r = dm_read_arg(_args + 3, as, &fc->corrupt_bio_flags, &ti->error); 148 + BUILD_BUG_ON(sizeof(fc->corrupt_bio_flags) != 149 + sizeof(unsigned int)); 150 + r = dm_read_arg(_args + 3, as, 151 + (__force unsigned *)&fc->corrupt_bio_flags, 152 + &ti->error); 149 153 if (r) 150 154 return r; 151 155 argc--;
+38 -38
drivers/md/dm-integrity.c
··· 298 298 struct work_struct work; 299 299 300 300 struct dm_integrity_c *ic; 301 - enum req_opf op; 301 + enum req_op op; 302 302 bool fua; 303 303 304 304 struct dm_integrity_range range; ··· 551 551 return 0; 552 552 } 553 553 554 - static int sync_rw_sb(struct dm_integrity_c *ic, int op, int op_flags) 554 + static int sync_rw_sb(struct dm_integrity_c *ic, blk_opf_t opf) 555 555 { 556 556 struct dm_io_request io_req; 557 557 struct dm_io_region io_loc; 558 + const enum req_op op = opf & REQ_OP_MASK; 558 559 int r; 559 560 560 - io_req.bi_op = op; 561 - io_req.bi_op_flags = op_flags; 561 + io_req.bi_opf = opf; 562 562 io_req.mem.type = DM_IO_KMEM; 563 563 io_req.mem.ptr.addr = ic->sb; 564 564 io_req.notify.fn = NULL; ··· 1050 1050 complete_journal_op(comp); 1051 1051 } 1052 1052 1053 - static void rw_journal_sectors(struct dm_integrity_c *ic, int op, int op_flags, 1054 - unsigned sector, unsigned n_sectors, struct journal_completion *comp) 1053 + static void rw_journal_sectors(struct dm_integrity_c *ic, blk_opf_t opf, 1054 + unsigned sector, unsigned n_sectors, 1055 + struct journal_completion *comp) 1055 1056 { 1056 1057 struct dm_io_request io_req; 1057 1058 struct dm_io_region io_loc; ··· 1068 1067 pl_index = sector >> (PAGE_SHIFT - SECTOR_SHIFT); 1069 1068 pl_offset = (sector << SECTOR_SHIFT) & (PAGE_SIZE - 1); 1070 1069 1071 - io_req.bi_op = op; 1072 - io_req.bi_op_flags = op_flags; 1070 + io_req.bi_opf = opf; 1073 1071 io_req.mem.type = DM_IO_PAGE_LIST; 1074 1072 if (ic->journal_io) 1075 1073 io_req.mem.ptr.pl = &ic->journal_io[pl_index]; ··· 1088 1088 1089 1089 r = dm_io(&io_req, 1, &io_loc, NULL); 1090 1090 if (unlikely(r)) { 1091 - dm_integrity_io_error(ic, op == REQ_OP_READ ? "reading journal" : "writing journal", r); 1091 + dm_integrity_io_error(ic, (opf & REQ_OP_MASK) == REQ_OP_READ ? 1092 + "reading journal" : "writing journal", r); 1092 1093 if (comp) { 1093 1094 WARN_ONCE(1, "asynchronous dm_io failed: %d", r); 1094 1095 complete_journal_io(-1UL, comp); ··· 1097 1096 } 1098 1097 } 1099 1098 1100 - static void rw_journal(struct dm_integrity_c *ic, int op, int op_flags, unsigned section, 1101 - unsigned n_sections, struct journal_completion *comp) 1099 + static void rw_journal(struct dm_integrity_c *ic, blk_opf_t opf, 1100 + unsigned section, unsigned n_sections, 1101 + struct journal_completion *comp) 1102 1102 { 1103 1103 unsigned sector, n_sectors; 1104 1104 1105 1105 sector = section * ic->journal_section_sectors; 1106 1106 n_sectors = n_sections * ic->journal_section_sectors; 1107 1107 1108 - rw_journal_sectors(ic, op, op_flags, sector, n_sectors, comp); 1108 + rw_journal_sectors(ic, opf, sector, n_sectors, comp); 1109 1109 } 1110 1110 1111 1111 static void write_journal(struct dm_integrity_c *ic, unsigned commit_start, unsigned commit_sections) ··· 1131 1129 for (i = 0; i < commit_sections; i++) 1132 1130 rw_section_mac(ic, commit_start + i, true); 1133 1131 } 1134 - rw_journal(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, commit_start, 1132 + rw_journal(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, commit_start, 1135 1133 commit_sections, &io_comp); 1136 1134 } else { 1137 1135 unsigned to_end; ··· 1143 1141 crypt_comp_1.in_flight = (atomic_t)ATOMIC_INIT(0); 1144 1142 encrypt_journal(ic, true, commit_start, to_end, &crypt_comp_1); 1145 1143 if (try_wait_for_completion(&crypt_comp_1.comp)) { 1146 - rw_journal(ic, REQ_OP_WRITE, REQ_FUA, commit_start, to_end, &io_comp); 1144 + rw_journal(ic, REQ_OP_WRITE | REQ_FUA, 1145 + commit_start, to_end, &io_comp); 1147 1146 reinit_completion(&crypt_comp_1.comp); 1148 1147 crypt_comp_1.in_flight = (atomic_t)ATOMIC_INIT(0); 1149 1148 encrypt_journal(ic, true, 0, commit_sections - to_end, &crypt_comp_1); ··· 1155 1152 crypt_comp_2.in_flight = (atomic_t)ATOMIC_INIT(0); 1156 1153 encrypt_journal(ic, true, 0, commit_sections - to_end, &crypt_comp_2); 1157 1154 wait_for_completion_io(&crypt_comp_1.comp); 1158 - rw_journal(ic, REQ_OP_WRITE, REQ_FUA, commit_start, to_end, &io_comp); 1155 + rw_journal(ic, REQ_OP_WRITE | REQ_FUA, commit_start, to_end, &io_comp); 1159 1156 wait_for_completion_io(&crypt_comp_2.comp); 1160 1157 } 1161 1158 } else { 1162 1159 for (i = 0; i < to_end; i++) 1163 1160 rw_section_mac(ic, commit_start + i, true); 1164 - rw_journal(ic, REQ_OP_WRITE, REQ_FUA, commit_start, to_end, &io_comp); 1161 + rw_journal(ic, REQ_OP_WRITE | REQ_FUA, commit_start, to_end, &io_comp); 1165 1162 for (i = 0; i < commit_sections - to_end; i++) 1166 1163 rw_section_mac(ic, i, true); 1167 1164 } 1168 - rw_journal(ic, REQ_OP_WRITE, REQ_FUA, 0, commit_sections - to_end, &io_comp); 1165 + rw_journal(ic, REQ_OP_WRITE | REQ_FUA, 0, commit_sections - to_end, &io_comp); 1169 1166 } 1170 1167 1171 1168 wait_for_completion_io(&io_comp.comp); ··· 1191 1188 pl_index = sector >> (PAGE_SHIFT - SECTOR_SHIFT); 1192 1189 pl_offset = (sector << SECTOR_SHIFT) & (PAGE_SIZE - 1); 1193 1190 1194 - io_req.bi_op = REQ_OP_WRITE; 1195 - io_req.bi_op_flags = 0; 1191 + io_req.bi_opf = REQ_OP_WRITE; 1196 1192 io_req.mem.type = DM_IO_PAGE_LIST; 1197 1193 io_req.mem.ptr.pl = &ic->journal[pl_index]; 1198 1194 io_req.mem.offset = pl_offset; ··· 1518 1516 if (!ic->meta_dev) 1519 1517 flush_data = false; 1520 1518 if (flush_data) { 1521 - fr.io_req.bi_op = REQ_OP_WRITE, 1522 - fr.io_req.bi_op_flags = REQ_PREFLUSH | REQ_SYNC, 1519 + fr.io_req.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC, 1523 1520 fr.io_req.mem.type = DM_IO_KMEM, 1524 1521 fr.io_req.mem.ptr.addr = NULL, 1525 1522 fr.io_req.notify.fn = flush_notify, ··· 2627 2626 if (dm_integrity_failed(ic)) 2628 2627 return; 2629 2628 2630 - r = sync_rw_sb(ic, REQ_OP_WRITE, 0); 2629 + r = sync_rw_sb(ic, REQ_OP_WRITE); 2631 2630 if (unlikely(r)) 2632 2631 dm_integrity_io_error(ic, "writing superblock", r); 2633 2632 } ··· 2707 2706 if (unlikely(dm_integrity_failed(ic))) 2708 2707 goto err; 2709 2708 2710 - io_req.bi_op = REQ_OP_READ; 2711 - io_req.bi_op_flags = 0; 2709 + io_req.bi_opf = REQ_OP_READ; 2712 2710 io_req.mem.type = DM_IO_VMA; 2713 2711 io_req.mem.ptr.addr = ic->recalc_buffer; 2714 2712 io_req.notify.fn = NULL; ··· 2800 2800 if (bio_list_empty(&waiting)) 2801 2801 return; 2802 2802 2803 - rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 2803 + rw_journal_sectors(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, 2804 2804 bbs->idx * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), 2805 2805 BITMAP_BLOCK_SIZE >> SECTOR_SHIFT, NULL); 2806 2806 ··· 2846 2846 block_bitmap_op(ic, ic->journal, 0, limit, BITMAP_OP_CLEAR); 2847 2847 block_bitmap_op(ic, ic->may_write_bitmap, 0, limit, BITMAP_OP_CLEAR); 2848 2848 2849 - rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 0, 2849 + rw_journal_sectors(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, 0, 2850 2850 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 2851 2851 2852 2852 spin_lock_irq(&ic->endio_wait.lock); ··· 2918 2918 2919 2919 if (!ic->just_formatted) { 2920 2920 DEBUG_print("reading journal\n"); 2921 - rw_journal(ic, REQ_OP_READ, 0, 0, ic->journal_sections, NULL); 2921 + rw_journal(ic, REQ_OP_READ, 0, ic->journal_sections, NULL); 2922 2922 if (ic->journal_io) 2923 2923 DEBUG_bytes(lowmem_page_address(ic->journal_io[0].page), 64, "read journal"); 2924 2924 if (ic->journal_io) { ··· 3113 3113 /* set to 0 to test bitmap replay code */ 3114 3114 init_journal(ic, 0, ic->journal_sections, 0); 3115 3115 ic->sb->flags &= ~cpu_to_le32(SB_FLAG_DIRTY_BITMAP); 3116 - r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); 3116 + r = sync_rw_sb(ic, REQ_OP_WRITE | REQ_FUA); 3117 3117 if (unlikely(r)) 3118 3118 dm_integrity_io_error(ic, "writing superblock", r); 3119 3119 #endif ··· 3136 3136 if (ic->provided_data_sectors > old_provided_data_sectors && 3137 3137 ic->mode == 'B' && 3138 3138 ic->sb->log2_blocks_per_bitmap_bit == ic->log2_blocks_per_bitmap_bit) { 3139 - rw_journal_sectors(ic, REQ_OP_READ, 0, 0, 3139 + rw_journal_sectors(ic, REQ_OP_READ, 0, 3140 3140 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 3141 3141 block_bitmap_op(ic, ic->journal, old_provided_data_sectors, 3142 3142 ic->provided_data_sectors - old_provided_data_sectors, BITMAP_OP_SET); 3143 - rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 0, 3143 + rw_journal_sectors(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, 0, 3144 3144 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 3145 3145 } 3146 3146 3147 3147 ic->sb->provided_data_sectors = cpu_to_le64(ic->provided_data_sectors); 3148 - r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); 3148 + r = sync_rw_sb(ic, REQ_OP_WRITE | REQ_FUA); 3149 3149 if (unlikely(r)) 3150 3150 dm_integrity_io_error(ic, "writing superblock", r); 3151 3151 } 3152 3152 3153 3153 if (ic->sb->flags & cpu_to_le32(SB_FLAG_DIRTY_BITMAP)) { 3154 3154 DEBUG_print("resume dirty_bitmap\n"); 3155 - rw_journal_sectors(ic, REQ_OP_READ, 0, 0, 3155 + rw_journal_sectors(ic, REQ_OP_READ, 0, 3156 3156 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 3157 3157 if (ic->mode == 'B') { 3158 3158 if (ic->sb->log2_blocks_per_bitmap_bit == ic->log2_blocks_per_bitmap_bit && ··· 3171 3171 block_bitmap_op(ic, ic->recalc_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_SET); 3172 3172 block_bitmap_op(ic, ic->may_write_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_SET); 3173 3173 block_bitmap_op(ic, ic->journal, 0, ic->provided_data_sectors, BITMAP_OP_SET); 3174 - rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 0, 3174 + rw_journal_sectors(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, 0, 3175 3175 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 3176 3176 ic->sb->flags |= cpu_to_le32(SB_FLAG_RECALCULATING); 3177 3177 ic->sb->recalc_sector = cpu_to_le64(0); ··· 3187 3187 replay_journal(ic); 3188 3188 ic->sb->flags &= ~cpu_to_le32(SB_FLAG_DIRTY_BITMAP); 3189 3189 } 3190 - r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); 3190 + r = sync_rw_sb(ic, REQ_OP_WRITE | REQ_FUA); 3191 3191 if (unlikely(r)) 3192 3192 dm_integrity_io_error(ic, "writing superblock", r); 3193 3193 } else { ··· 3199 3199 if (ic->mode == 'B') { 3200 3200 ic->sb->flags |= cpu_to_le32(SB_FLAG_DIRTY_BITMAP); 3201 3201 ic->sb->log2_blocks_per_bitmap_bit = ic->log2_blocks_per_bitmap_bit; 3202 - r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); 3202 + r = sync_rw_sb(ic, REQ_OP_WRITE | REQ_FUA); 3203 3203 if (unlikely(r)) 3204 3204 dm_integrity_io_error(ic, "writing superblock", r); 3205 3205 ··· 3215 3215 block_bitmap_op(ic, ic->may_write_bitmap, le64_to_cpu(ic->sb->recalc_sector), 3216 3216 ic->provided_data_sectors - le64_to_cpu(ic->sb->recalc_sector), BITMAP_OP_SET); 3217 3217 } 3218 - rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 0, 3218 + rw_journal_sectors(ic, REQ_OP_WRITE | REQ_FUA | REQ_SYNC, 0, 3219 3219 ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); 3220 3220 } 3221 3221 } ··· 4256 4256 goto bad; 4257 4257 } 4258 4258 4259 - r = sync_rw_sb(ic, REQ_OP_READ, 0); 4259 + r = sync_rw_sb(ic, REQ_OP_READ); 4260 4260 if (r) { 4261 4261 ti->error = "Error reading superblock"; 4262 4262 goto bad; ··· 4500 4500 ti->error = "Error initializing journal"; 4501 4501 goto bad; 4502 4502 } 4503 - r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); 4503 + r = sync_rw_sb(ic, REQ_OP_WRITE | REQ_FUA); 4504 4504 if (r) { 4505 4505 ti->error = "Error initializing superblock"; 4506 4506 goto bad;
+19 -19
drivers/md/dm-io.c
··· 293 293 /*----------------------------------------------------------------- 294 294 * IO routines that accept a list of pages. 295 295 *---------------------------------------------------------------*/ 296 - static void do_region(int op, int op_flags, unsigned region, 296 + static void do_region(const blk_opf_t opf, unsigned region, 297 297 struct dm_io_region *where, struct dpages *dp, 298 298 struct io *io) 299 299 { ··· 306 306 struct request_queue *q = bdev_get_queue(where->bdev); 307 307 sector_t num_sectors; 308 308 unsigned int special_cmd_max_sectors; 309 + const enum req_op op = opf & REQ_OP_MASK; 309 310 310 311 /* 311 312 * Reject unsupported discard and write same requests. ··· 340 339 (PAGE_SIZE >> SECTOR_SHIFT))); 341 340 } 342 341 343 - bio = bio_alloc_bioset(where->bdev, num_bvecs, op | op_flags, 344 - GFP_NOIO, &io->client->bios); 342 + bio = bio_alloc_bioset(where->bdev, num_bvecs, opf, GFP_NOIO, 343 + &io->client->bios); 345 344 bio->bi_iter.bi_sector = where->sector + (where->count - remaining); 346 345 bio->bi_end_io = endio; 347 346 store_io_and_region_in_bio(bio, io, region); ··· 369 368 } while (remaining); 370 369 } 371 370 372 - static void dispatch_io(int op, int op_flags, unsigned int num_regions, 371 + static void dispatch_io(blk_opf_t opf, unsigned int num_regions, 373 372 struct dm_io_region *where, struct dpages *dp, 374 373 struct io *io, int sync) 375 374 { ··· 379 378 BUG_ON(num_regions > DM_IO_MAX_REGIONS); 380 379 381 380 if (sync) 382 - op_flags |= REQ_SYNC; 381 + opf |= REQ_SYNC; 383 382 384 383 /* 385 384 * For multiple regions we need to be careful to rewind ··· 387 386 */ 388 387 for (i = 0; i < num_regions; i++) { 389 388 *dp = old_pages; 390 - if (where[i].count || (op_flags & REQ_PREFLUSH)) 391 - do_region(op, op_flags, i, where + i, dp, io); 389 + if (where[i].count || (opf & REQ_PREFLUSH)) 390 + do_region(opf, i, where + i, dp, io); 392 391 } 393 392 394 393 /* ··· 412 411 } 413 412 414 413 static int sync_io(struct dm_io_client *client, unsigned int num_regions, 415 - struct dm_io_region *where, int op, int op_flags, 416 - struct dpages *dp, unsigned long *error_bits) 414 + struct dm_io_region *where, blk_opf_t opf, struct dpages *dp, 415 + unsigned long *error_bits) 417 416 { 418 417 struct io *io; 419 418 struct sync_io sio; 420 419 421 - if (num_regions > 1 && !op_is_write(op)) { 420 + if (num_regions > 1 && !op_is_write(opf)) { 422 421 WARN_ON(1); 423 422 return -EIO; 424 423 } ··· 435 434 io->vma_invalidate_address = dp->vma_invalidate_address; 436 435 io->vma_invalidate_size = dp->vma_invalidate_size; 437 436 438 - dispatch_io(op, op_flags, num_regions, where, dp, io, 1); 437 + dispatch_io(opf, num_regions, where, dp, io, 1); 439 438 440 439 wait_for_completion_io(&sio.wait); 441 440 ··· 446 445 } 447 446 448 447 static int async_io(struct dm_io_client *client, unsigned int num_regions, 449 - struct dm_io_region *where, int op, int op_flags, 448 + struct dm_io_region *where, blk_opf_t opf, 450 449 struct dpages *dp, io_notify_fn fn, void *context) 451 450 { 452 451 struct io *io; 453 452 454 - if (num_regions > 1 && !op_is_write(op)) { 453 + if (num_regions > 1 && !op_is_write(opf)) { 455 454 WARN_ON(1); 456 455 fn(1, context); 457 456 return -EIO; ··· 467 466 io->vma_invalidate_address = dp->vma_invalidate_address; 468 467 io->vma_invalidate_size = dp->vma_invalidate_size; 469 468 470 - dispatch_io(op, op_flags, num_regions, where, dp, io, 0); 469 + dispatch_io(opf, num_regions, where, dp, io, 0); 471 470 return 0; 472 471 } 473 472 ··· 490 489 491 490 case DM_IO_VMA: 492 491 flush_kernel_vmap_range(io_req->mem.ptr.vma, size); 493 - if (io_req->bi_op == REQ_OP_READ) { 492 + if ((io_req->bi_opf & REQ_OP_MASK) == REQ_OP_READ) { 494 493 dp->vma_invalidate_address = io_req->mem.ptr.vma; 495 494 dp->vma_invalidate_size = size; 496 495 } ··· 520 519 521 520 if (!io_req->notify.fn) 522 521 return sync_io(io_req->client, num_regions, where, 523 - io_req->bi_op, io_req->bi_op_flags, &dp, 524 - sync_error_bits); 522 + io_req->bi_opf, &dp, sync_error_bits); 525 523 526 - return async_io(io_req->client, num_regions, where, io_req->bi_op, 527 - io_req->bi_op_flags, &dp, io_req->notify.fn, 524 + return async_io(io_req->client, num_regions, where, 525 + io_req->bi_opf, &dp, io_req->notify.fn, 528 526 io_req->notify.context); 529 527 } 530 528 EXPORT_SYMBOL(dm_io);
+13 -13
drivers/md/dm-kcopyd.c
··· 350 350 unsigned long write_err; 351 351 352 352 /* 353 - * Either READ or WRITE 353 + * REQ_OP_READ, REQ_OP_WRITE or REQ_OP_WRITE_ZEROES. 354 354 */ 355 - int rw; 355 + enum req_op op; 356 356 struct dm_io_region source; 357 357 358 358 /* ··· 418 418 * constraint and sequential writes that are at the right position. 419 419 */ 420 420 list_for_each_entry(job, jobs, list) { 421 - if (job->rw == READ || !(job->flags & BIT(DM_KCOPYD_WRITE_SEQ))) { 421 + if (job->op == REQ_OP_READ || 422 + !(job->flags & BIT(DM_KCOPYD_WRITE_SEQ))) { 422 423 list_del(&job->list); 423 424 return job; 424 425 } ··· 519 518 io_job_finish(kc->throttle); 520 519 521 520 if (error) { 522 - if (op_is_write(job->rw)) 521 + if (op_is_write(job->op)) 523 522 job->write_err |= error; 524 523 else 525 524 job->read_err = 1; ··· 531 530 } 532 531 } 533 532 534 - if (op_is_write(job->rw)) 533 + if (op_is_write(job->op)) 535 534 push(&kc->complete_jobs, job); 536 535 537 536 else { 538 - job->rw = WRITE; 537 + job->op = REQ_OP_WRITE; 539 538 push(&kc->io_jobs, job); 540 539 } 541 540 ··· 550 549 { 551 550 int r; 552 551 struct dm_io_request io_req = { 553 - .bi_op = job->rw, 554 - .bi_op_flags = 0, 552 + .bi_opf = job->op, 555 553 .mem.type = DM_IO_PAGE_LIST, 556 554 .mem.ptr.pl = job->pages, 557 555 .mem.offset = 0, ··· 571 571 572 572 io_job_start(job->kc->throttle); 573 573 574 - if (job->rw == READ) 574 + if (job->op == REQ_OP_READ) 575 575 r = dm_io(&io_req, 1, &job->source, NULL); 576 576 else 577 577 r = dm_io(&io_req, job->num_dests, job->dests, NULL); ··· 614 614 615 615 if (r < 0) { 616 616 /* error this rogue job */ 617 - if (op_is_write(job->rw)) 617 + if (op_is_write(job->op)) 618 618 job->write_err = (unsigned long) -1L; 619 619 else 620 620 job->read_err = 1; ··· 817 817 if (from) { 818 818 job->source = *from; 819 819 job->pages = NULL; 820 - job->rw = READ; 820 + job->op = REQ_OP_READ; 821 821 } else { 822 822 memset(&job->source, 0, sizeof job->source); 823 823 job->source.count = job->dests[0].count; ··· 826 826 /* 827 827 * Use WRITE ZEROES to optimize zeroing if all dests support it. 828 828 */ 829 - job->rw = REQ_OP_WRITE_ZEROES; 829 + job->op = REQ_OP_WRITE_ZEROES; 830 830 for (i = 0; i < job->num_dests; i++) 831 831 if (!bdev_write_zeroes_sectors(job->dests[i].bdev)) { 832 - job->rw = WRITE; 832 + job->op = REQ_OP_WRITE; 833 833 break; 834 834 } 835 835 }
+3 -5
drivers/md/dm-log.c
··· 291 291 core->nr_regions = le64_to_cpu(disk->nr_regions); 292 292 } 293 293 294 - static int rw_header(struct log_c *lc, int op) 294 + static int rw_header(struct log_c *lc, enum req_op op) 295 295 { 296 - lc->io_req.bi_op = op; 297 - lc->io_req.bi_op_flags = 0; 296 + lc->io_req.bi_opf = op; 298 297 299 298 return dm_io(&lc->io_req, 1, &lc->header_location, NULL); 300 299 } ··· 306 307 .count = 0, 307 308 }; 308 309 309 - lc->io_req.bi_op = REQ_OP_WRITE; 310 - lc->io_req.bi_op_flags = REQ_PREFLUSH; 310 + lc->io_req.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; 311 311 312 312 return dm_io(&lc->io_req, 1, &null_location, NULL); 313 313 }
+1 -1
drivers/md/dm-raid.c
··· 2038 2038 2039 2039 rdev->sb_loaded = 0; 2040 2040 2041 - if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, 0, true)) { 2041 + if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, true)) { 2042 2042 DMERR("Failed to read superblock of device at position %d", 2043 2043 rdev->raid_disk); 2044 2044 md_error(rdev->mddev, rdev);
+5 -7
drivers/md/dm-raid1.c
··· 260 260 struct dm_io_region io[MAX_NR_MIRRORS]; 261 261 struct mirror *m; 262 262 struct dm_io_request io_req = { 263 - .bi_op = REQ_OP_WRITE, 264 - .bi_op_flags = REQ_PREFLUSH | REQ_SYNC, 263 + .bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC, 265 264 .mem.type = DM_IO_KMEM, 266 265 .mem.ptr.addr = NULL, 267 266 .client = ms->io_client, ··· 534 535 { 535 536 struct dm_io_region io; 536 537 struct dm_io_request io_req = { 537 - .bi_op = REQ_OP_READ, 538 - .bi_op_flags = 0, 538 + .bi_opf = REQ_OP_READ, 539 539 .mem.type = DM_IO_BIO, 540 540 .mem.ptr.bio = bio, 541 541 .notify.fn = read_callback, ··· 646 648 unsigned int i; 647 649 struct dm_io_region io[MAX_NR_MIRRORS], *dest = io; 648 650 struct mirror *m; 651 + blk_opf_t op_flags = bio->bi_opf & (REQ_FUA | REQ_PREFLUSH); 649 652 struct dm_io_request io_req = { 650 - .bi_op = REQ_OP_WRITE, 651 - .bi_op_flags = bio->bi_opf & (REQ_FUA | REQ_PREFLUSH), 653 + .bi_opf = REQ_OP_WRITE | op_flags, 652 654 .mem.type = DM_IO_BIO, 653 655 .mem.ptr.bio = bio, 654 656 .notify.fn = write_callback, ··· 657 659 }; 658 660 659 661 if (bio_op(bio) == REQ_OP_DISCARD) { 660 - io_req.bi_op = REQ_OP_DISCARD; 662 + io_req.bi_opf = REQ_OP_DISCARD | op_flags; 661 663 io_req.mem.type = DM_IO_KMEM; 662 664 io_req.mem.ptr.addr = NULL; 663 665 }
+12 -13
drivers/md/dm-snap-persistent.c
··· 226 226 /* 227 227 * Read or write a chunk aligned and sized block of data from a device. 228 228 */ 229 - static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, int op, 230 - int op_flags, int metadata) 229 + static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, blk_opf_t opf, 230 + int metadata) 231 231 { 232 232 struct dm_io_region where = { 233 233 .bdev = dm_snap_cow(ps->store->snap)->bdev, ··· 235 235 .count = ps->store->chunk_size, 236 236 }; 237 237 struct dm_io_request io_req = { 238 - .bi_op = op, 239 - .bi_op_flags = op_flags, 238 + .bi_opf = opf, 240 239 .mem.type = DM_IO_VMA, 241 240 .mem.ptr.vma = area, 242 241 .client = ps->io_client, ··· 281 282 * Read or write a metadata area. Remembering to skip the first 282 283 * chunk which holds the header. 283 284 */ 284 - static int area_io(struct pstore *ps, int op, int op_flags) 285 + static int area_io(struct pstore *ps, blk_opf_t opf) 285 286 { 286 287 chunk_t chunk = area_location(ps, ps->current_area); 287 288 288 - return chunk_io(ps, ps->area, chunk, op, op_flags, 0); 289 + return chunk_io(ps, ps->area, chunk, opf, 0); 289 290 } 290 291 291 292 static void zero_memory_area(struct pstore *ps) ··· 296 297 static int zero_disk_area(struct pstore *ps, chunk_t area) 297 298 { 298 299 return chunk_io(ps, ps->zero_area, area_location(ps, area), 299 - REQ_OP_WRITE, 0, 0); 300 + REQ_OP_WRITE, 0); 300 301 } 301 302 302 303 static int read_header(struct pstore *ps, int *new_snapshot) ··· 328 329 if (r) 329 330 return r; 330 331 331 - r = chunk_io(ps, ps->header_area, 0, REQ_OP_READ, 0, 1); 332 + r = chunk_io(ps, ps->header_area, 0, REQ_OP_READ, 1); 332 333 if (r) 333 334 goto bad; 334 335 ··· 389 390 dh->version = cpu_to_le32(ps->version); 390 391 dh->chunk_size = cpu_to_le32(ps->store->chunk_size); 391 392 392 - return chunk_io(ps, ps->header_area, 0, REQ_OP_WRITE, 0, 1); 393 + return chunk_io(ps, ps->header_area, 0, REQ_OP_WRITE, 1); 393 394 } 394 395 395 396 /* ··· 733 734 /* 734 735 * Commit exceptions to disk. 735 736 */ 736 - if (ps->valid && area_io(ps, REQ_OP_WRITE, 737 - REQ_PREFLUSH | REQ_FUA | REQ_SYNC)) 737 + if (ps->valid && area_io(ps, REQ_OP_WRITE | REQ_PREFLUSH | REQ_FUA | 738 + REQ_SYNC)) 738 739 ps->valid = 0; 739 740 740 741 /* ··· 774 775 return 0; 775 776 776 777 ps->current_area--; 777 - r = area_io(ps, REQ_OP_READ, 0); 778 + r = area_io(ps, REQ_OP_READ); 778 779 if (r < 0) 779 780 return r; 780 781 ps->current_committed = ps->exceptions_per_area; ··· 811 812 for (i = 0; i < nr_merged; i++) 812 813 clear_exception(ps, ps->current_committed - 1 - i); 813 814 814 - r = area_io(ps, REQ_OP_WRITE, REQ_PREFLUSH | REQ_FUA); 815 + r = area_io(ps, REQ_OP_WRITE | REQ_PREFLUSH | REQ_FUA); 815 816 if (r < 0) 816 817 return r; 817 818
+2 -4
drivers/md/dm-table.c
··· 1620 1620 static int device_not_matches_zone_sectors(struct dm_target *ti, struct dm_dev *dev, 1621 1621 sector_t start, sector_t len, void *data) 1622 1622 { 1623 - struct request_queue *q = bdev_get_queue(dev->bdev); 1624 1623 unsigned int *zone_sectors = data; 1625 1624 1626 - if (!blk_queue_is_zoned(q)) 1625 + if (!bdev_is_zoned(dev->bdev)) 1627 1626 return 0; 1628 - 1629 - return blk_queue_zone_sectors(q) != *zone_sectors; 1627 + return bdev_zone_sectors(dev->bdev) != *zone_sectors; 1630 1628 } 1631 1629 1632 1630 /*
+4 -8
drivers/md/dm-writecache.c
··· 523 523 524 524 region.sector += wc->start_sector; 525 525 atomic_inc(&endio.count); 526 - req.bi_op = REQ_OP_WRITE; 527 - req.bi_op_flags = REQ_SYNC; 526 + req.bi_opf = REQ_OP_WRITE | REQ_SYNC; 528 527 req.mem.type = DM_IO_VMA; 529 528 req.mem.ptr.vma = (char *)wc->memory_map + (size_t)i * BITMAP_GRANULARITY; 530 529 req.client = wc->dm_io; ··· 561 562 562 563 region.sector += wc->start_sector; 563 564 564 - req.bi_op = REQ_OP_WRITE; 565 - req.bi_op_flags = REQ_SYNC | REQ_FUA; 565 + req.bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_FUA; 566 566 req.mem.type = DM_IO_VMA; 567 567 req.mem.ptr.vma = (char *)wc->memory_map; 568 568 req.client = wc->dm_io; ··· 590 592 region.bdev = dev->bdev; 591 593 region.sector = 0; 592 594 region.count = 0; 593 - req.bi_op = REQ_OP_WRITE; 594 - req.bi_op_flags = REQ_PREFLUSH; 595 + req.bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; 595 596 req.mem.type = DM_IO_KMEM; 596 597 req.mem.ptr.addr = NULL; 597 598 req.client = wc->dm_io; ··· 978 981 region.bdev = wc->ssd_dev->bdev; 979 982 region.sector = wc->start_sector; 980 983 region.count = n_sectors; 981 - req.bi_op = REQ_OP_READ; 982 - req.bi_op_flags = REQ_SYNC; 984 + req.bi_opf = REQ_OP_READ | REQ_SYNC; 983 985 req.mem.type = DM_IO_VMA; 984 986 req.mem.ptr.vma = (char *)wc->memory_map; 985 987 req.client = wc->dm_io;
+43 -45
drivers/md/dm-zone.c
··· 139 139 140 140 void dm_cleanup_zoned_dev(struct mapped_device *md) 141 141 { 142 - struct request_queue *q = md->queue; 143 - 144 - if (q) { 145 - kfree(q->conv_zones_bitmap); 146 - q->conv_zones_bitmap = NULL; 147 - kfree(q->seq_zones_wlock); 148 - q->seq_zones_wlock = NULL; 142 + if (md->disk) { 143 + kfree(md->disk->conv_zones_bitmap); 144 + md->disk->conv_zones_bitmap = NULL; 145 + kfree(md->disk->seq_zones_wlock); 146 + md->disk->seq_zones_wlock = NULL; 149 147 } 150 148 151 149 kvfree(md->zwp_offset); ··· 177 179 void *data) 178 180 { 179 181 struct mapped_device *md = data; 180 - struct request_queue *q = md->queue; 182 + struct gendisk *disk = md->disk; 181 183 182 184 switch (zone->type) { 183 185 case BLK_ZONE_TYPE_CONVENTIONAL: 184 - if (!q->conv_zones_bitmap) { 185 - q->conv_zones_bitmap = 186 - kcalloc(BITS_TO_LONGS(q->nr_zones), 186 + if (!disk->conv_zones_bitmap) { 187 + disk->conv_zones_bitmap = 188 + kcalloc(BITS_TO_LONGS(disk->nr_zones), 187 189 sizeof(unsigned long), GFP_NOIO); 188 - if (!q->conv_zones_bitmap) 190 + if (!disk->conv_zones_bitmap) 189 191 return -ENOMEM; 190 192 } 191 - set_bit(idx, q->conv_zones_bitmap); 193 + set_bit(idx, disk->conv_zones_bitmap); 192 194 break; 193 195 case BLK_ZONE_TYPE_SEQWRITE_REQ: 194 196 case BLK_ZONE_TYPE_SEQWRITE_PREF: 195 - if (!q->seq_zones_wlock) { 196 - q->seq_zones_wlock = 197 - kcalloc(BITS_TO_LONGS(q->nr_zones), 197 + if (!disk->seq_zones_wlock) { 198 + disk->seq_zones_wlock = 199 + kcalloc(BITS_TO_LONGS(disk->nr_zones), 198 200 sizeof(unsigned long), GFP_NOIO); 199 - if (!q->seq_zones_wlock) 201 + if (!disk->seq_zones_wlock) 200 202 return -ENOMEM; 201 203 } 202 204 if (!md->zwp_offset) { 203 205 md->zwp_offset = 204 - kvcalloc(q->nr_zones, sizeof(unsigned int), 206 + kvcalloc(disk->nr_zones, sizeof(unsigned int), 205 207 GFP_KERNEL); 206 208 if (!md->zwp_offset) 207 209 return -ENOMEM; ··· 226 228 */ 227 229 static int dm_revalidate_zones(struct mapped_device *md, struct dm_table *t) 228 230 { 229 - struct request_queue *q = md->queue; 231 + struct gendisk *disk = md->disk; 230 232 unsigned int noio_flag; 231 233 int ret; 232 234 ··· 234 236 * Check if something changed. If yes, cleanup the current resources 235 237 * and reallocate everything. 236 238 */ 237 - if (!q->nr_zones || q->nr_zones != md->nr_zones) 239 + if (!disk->nr_zones || disk->nr_zones != md->nr_zones) 238 240 dm_cleanup_zoned_dev(md); 239 241 if (md->nr_zones) 240 242 return 0; ··· 244 246 * operations in this context are done as if GFP_NOIO was specified. 245 247 */ 246 248 noio_flag = memalloc_noio_save(); 247 - ret = dm_blk_do_report_zones(md, t, 0, q->nr_zones, 249 + ret = dm_blk_do_report_zones(md, t, 0, disk->nr_zones, 248 250 dm_zone_revalidate_cb, md); 249 251 memalloc_noio_restore(noio_flag); 250 252 if (ret < 0) 251 253 goto err; 252 - if (ret != q->nr_zones) { 254 + if (ret != disk->nr_zones) { 253 255 ret = -EIO; 254 256 goto err; 255 257 } 256 258 257 - md->nr_zones = q->nr_zones; 259 + md->nr_zones = disk->nr_zones; 258 260 259 261 return 0; 260 262 ··· 268 270 struct dm_dev *dev, sector_t start, 269 271 sector_t len, void *data) 270 272 { 271 - return !blk_queue_is_zoned(bdev_get_queue(dev->bdev)); 273 + return !bdev_is_zoned(dev->bdev); 272 274 } 273 275 274 276 static bool dm_table_supports_zone_append(struct dm_table *t) ··· 299 301 * correct value to be exposed in sysfs queue/nr_zones. 300 302 */ 301 303 WARN_ON_ONCE(queue_is_mq(q)); 302 - q->nr_zones = blkdev_nr_zones(md->disk); 304 + md->disk->nr_zones = bdev_nr_zones(md->disk->part0); 303 305 304 306 /* Check if zone append is natively supported */ 305 307 if (dm_table_supports_zone_append(t)) { ··· 332 334 static int dm_update_zone_wp_offset(struct mapped_device *md, unsigned int zno, 333 335 unsigned int *wp_ofst) 334 336 { 335 - sector_t sector = zno * blk_queue_zone_sectors(md->queue); 337 + sector_t sector = zno * bdev_zone_sectors(md->disk->part0); 336 338 unsigned int noio_flag; 337 339 struct dm_table *t; 338 340 int srcu_idx, ret; ··· 359 361 } 360 362 361 363 struct orig_bio_details { 362 - unsigned int op; 364 + enum req_op op; 363 365 unsigned int nr_sectors; 364 366 }; 365 367 ··· 371 373 static bool dm_zone_map_bio_begin(struct mapped_device *md, 372 374 unsigned int zno, struct bio *clone) 373 375 { 374 - sector_t zsectors = blk_queue_zone_sectors(md->queue); 376 + sector_t zsectors = bdev_zone_sectors(md->disk->part0); 375 377 unsigned int zwp_offset = READ_ONCE(md->zwp_offset[zno]); 376 378 377 379 /* ··· 441 443 return BLK_STS_OK; 442 444 case REQ_OP_ZONE_FINISH: 443 445 WRITE_ONCE(md->zwp_offset[zno], 444 - blk_queue_zone_sectors(md->queue)); 446 + bdev_zone_sectors(md->disk->part0)); 445 447 return BLK_STS_OK; 446 448 case REQ_OP_WRITE_ZEROES: 447 449 case REQ_OP_WRITE: ··· 464 466 } 465 467 } 466 468 467 - static inline void dm_zone_lock(struct request_queue *q, 468 - unsigned int zno, struct bio *clone) 469 + static inline void dm_zone_lock(struct gendisk *disk, unsigned int zno, 470 + struct bio *clone) 469 471 { 470 472 if (WARN_ON_ONCE(bio_flagged(clone, BIO_ZONE_WRITE_LOCKED))) 471 473 return; 472 474 473 - wait_on_bit_lock_io(q->seq_zones_wlock, zno, TASK_UNINTERRUPTIBLE); 475 + wait_on_bit_lock_io(disk->seq_zones_wlock, zno, TASK_UNINTERRUPTIBLE); 474 476 bio_set_flag(clone, BIO_ZONE_WRITE_LOCKED); 475 477 } 476 478 477 - static inline void dm_zone_unlock(struct request_queue *q, 478 - unsigned int zno, struct bio *clone) 479 + static inline void dm_zone_unlock(struct gendisk *disk, unsigned int zno, 480 + struct bio *clone) 479 481 { 480 482 if (!bio_flagged(clone, BIO_ZONE_WRITE_LOCKED)) 481 483 return; 482 484 483 - WARN_ON_ONCE(!test_bit(zno, q->seq_zones_wlock)); 484 - clear_bit_unlock(zno, q->seq_zones_wlock); 485 + WARN_ON_ONCE(!test_bit(zno, disk->seq_zones_wlock)); 486 + clear_bit_unlock(zno, disk->seq_zones_wlock); 485 487 smp_mb__after_atomic(); 486 - wake_up_bit(q->seq_zones_wlock, zno); 488 + wake_up_bit(disk->seq_zones_wlock, zno); 487 489 488 490 bio_clear_flag(clone, BIO_ZONE_WRITE_LOCKED); 489 491 } ··· 518 520 struct dm_io *io = tio->io; 519 521 struct dm_target *ti = tio->ti; 520 522 struct mapped_device *md = io->md; 521 - struct request_queue *q = md->queue; 522 523 struct bio *clone = &tio->clone; 523 524 struct orig_bio_details orig_bio_details; 524 525 unsigned int zno; ··· 533 536 534 537 /* Lock the target zone */ 535 538 zno = bio_zone_no(clone); 536 - dm_zone_lock(q, zno, clone); 539 + dm_zone_lock(md->disk, zno, clone); 537 540 538 541 orig_bio_details.nr_sectors = bio_sectors(clone); 539 542 orig_bio_details.op = bio_op(clone); ··· 543 546 * both valid, and if the bio is a zone append, remap it to a write. 544 547 */ 545 548 if (!dm_zone_map_bio_begin(md, zno, clone)) { 546 - dm_zone_unlock(q, zno, clone); 549 + dm_zone_unlock(md->disk, zno, clone); 547 550 return DM_MAPIO_KILL; 548 551 } 549 552 ··· 567 570 sts = dm_zone_map_bio_end(md, zno, &orig_bio_details, 568 571 *tio->len_ptr); 569 572 if (sts != BLK_STS_OK) 570 - dm_zone_unlock(q, zno, clone); 573 + dm_zone_unlock(md->disk, zno, clone); 571 574 break; 572 575 case DM_MAPIO_REQUEUE: 573 576 case DM_MAPIO_KILL: 574 577 default: 575 - dm_zone_unlock(q, zno, clone); 578 + dm_zone_unlock(md->disk, zno, clone); 576 579 sts = BLK_STS_IOERR; 577 580 break; 578 581 } ··· 589 592 void dm_zone_endio(struct dm_io *io, struct bio *clone) 590 593 { 591 594 struct mapped_device *md = io->md; 592 - struct request_queue *q = md->queue; 595 + struct gendisk *disk = md->disk; 593 596 struct bio *orig_bio = io->orig_bio; 594 597 unsigned int zwp_offset; 595 598 unsigned int zno; ··· 605 608 */ 606 609 if (clone->bi_status == BLK_STS_OK && 607 610 bio_op(clone) == REQ_OP_ZONE_APPEND) { 608 - sector_t mask = (sector_t)blk_queue_zone_sectors(q) - 1; 611 + sector_t mask = 612 + (sector_t)bdev_zone_sectors(disk->part0) - 1; 609 613 610 614 orig_bio->bi_iter.bi_sector += 611 615 clone->bi_iter.bi_sector & mask; ··· 647 649 zwp_offset - bio_sectors(orig_bio); 648 650 } 649 651 650 - dm_zone_unlock(q, zno, clone); 652 + dm_zone_unlock(disk, zno, clone); 651 653 }
+3 -2
drivers/md/dm-zoned-metadata.c
··· 737 737 /* 738 738 * Read/write a metadata block. 739 739 */ 740 - static int dmz_rdwr_block(struct dmz_dev *dev, int op, 740 + static int dmz_rdwr_block(struct dmz_dev *dev, enum req_op op, 741 741 sector_t block, struct page *page) 742 742 { 743 743 struct bio *bio; ··· 2045 2045 * allocated and used to map the chunk. 2046 2046 * The zone returned will be set to the active state. 2047 2047 */ 2048 - struct dm_zone *dmz_get_chunk_mapping(struct dmz_metadata *zmd, unsigned int chunk, int op) 2048 + struct dm_zone *dmz_get_chunk_mapping(struct dmz_metadata *zmd, 2049 + unsigned int chunk, enum req_op op) 2049 2050 { 2050 2051 struct dmz_mblock *dmap_mblk = zmd->map_mblk[chunk >> DMZ_MAP_ENTRIES_SHIFT]; 2051 2052 struct dmz_map *dmap = (struct dmz_map *) dmap_mblk->data;
+12 -13
drivers/md/dm-zoned-target.c
··· 764 764 static int dmz_fixup_devices(struct dm_target *ti) 765 765 { 766 766 struct dmz_target *dmz = ti->private; 767 - struct dmz_dev *reg_dev, *zoned_dev; 768 - struct request_queue *q; 767 + struct dmz_dev *reg_dev = NULL; 769 768 sector_t zone_nr_sectors = 0; 770 769 int i; 771 770 ··· 779 780 return -EINVAL; 780 781 } 781 782 for (i = 1; i < dmz->nr_ddevs; i++) { 782 - zoned_dev = &dmz->dev[i]; 783 + struct dmz_dev *zoned_dev = &dmz->dev[i]; 784 + struct block_device *bdev = zoned_dev->bdev; 785 + 783 786 if (zoned_dev->flags & DMZ_BDEV_REGULAR) { 784 787 ti->error = "Secondary disk is not a zoned device"; 785 788 return -EINVAL; 786 789 } 787 - q = bdev_get_queue(zoned_dev->bdev); 788 790 if (zone_nr_sectors && 789 - zone_nr_sectors != blk_queue_zone_sectors(q)) { 791 + zone_nr_sectors != bdev_zone_sectors(bdev)) { 790 792 ti->error = "Zone nr sectors mismatch"; 791 793 return -EINVAL; 792 794 } 793 - zone_nr_sectors = blk_queue_zone_sectors(q); 795 + zone_nr_sectors = bdev_zone_sectors(bdev); 794 796 zoned_dev->zone_nr_sectors = zone_nr_sectors; 795 - zoned_dev->nr_zones = 796 - blkdev_nr_zones(zoned_dev->bdev->bd_disk); 797 + zoned_dev->nr_zones = bdev_nr_zones(bdev); 797 798 } 798 799 } else { 799 - reg_dev = NULL; 800 - zoned_dev = &dmz->dev[0]; 800 + struct dmz_dev *zoned_dev = &dmz->dev[0]; 801 + struct block_device *bdev = zoned_dev->bdev; 802 + 801 803 if (zoned_dev->flags & DMZ_BDEV_REGULAR) { 802 804 ti->error = "Disk is not a zoned device"; 803 805 return -EINVAL; 804 806 } 805 - q = bdev_get_queue(zoned_dev->bdev); 806 - zoned_dev->zone_nr_sectors = blk_queue_zone_sectors(q); 807 - zoned_dev->nr_zones = blkdev_nr_zones(zoned_dev->bdev->bd_disk); 807 + zoned_dev->zone_nr_sectors = bdev_zone_sectors(bdev); 808 + zoned_dev->nr_zones = bdev_nr_zones(bdev); 808 809 } 809 810 810 811 if (reg_dev) {
+1 -1
drivers/md/dm-zoned.h
··· 248 248 unsigned int dev_idx, bool idle); 249 249 250 250 struct dm_zone *dmz_get_chunk_mapping(struct dmz_metadata *zmd, 251 - unsigned int chunk, int op); 251 + unsigned int chunk, enum req_op op); 252 252 void dmz_put_chunk_mapping(struct dmz_metadata *zmd, struct dm_zone *zone); 253 253 struct dm_zone *dmz_get_chunk_buffer(struct dmz_metadata *zmd, 254 254 struct dm_zone *dzone);
+15 -18
drivers/md/dm.c
··· 716 716 } 717 717 718 718 static inline struct dm_table *dm_get_live_table_bio(struct mapped_device *md, 719 - int *srcu_idx, unsigned bio_opf) 719 + int *srcu_idx, blk_opf_t bio_opf) 720 720 { 721 721 if (bio_opf & REQ_NOWAIT) 722 722 return dm_get_live_table_fast(md); ··· 725 725 } 726 726 727 727 static inline void dm_put_live_table_bio(struct mapped_device *md, int srcu_idx, 728 - unsigned bio_opf) 728 + blk_opf_t bio_opf) 729 729 { 730 730 if (bio_opf & REQ_NOWAIT) 731 731 dm_put_live_table_fast(md); ··· 1033 1033 } 1034 1034 1035 1035 if (static_branch_unlikely(&zoned_enabled) && 1036 - unlikely(blk_queue_is_zoned(bdev_get_queue(bio->bi_bdev)))) 1036 + unlikely(bdev_is_zoned(bio->bi_bdev))) 1037 1037 dm_zone_endio(io, bio); 1038 1038 1039 1039 if (endio) { ··· 1086 1086 { 1087 1087 sector_t target_offset = dm_target_offset(ti, sector); 1088 1088 sector_t len = max_io_len_target_boundary(ti, target_offset); 1089 - sector_t max_len; 1090 1089 1091 1090 /* 1092 1091 * Does the target need to split IO even further? 1093 1092 * - varied (per target) IO splitting is a tenet of DM; this 1094 1093 * explains why stacked chunk_sectors based splitting via 1095 - * blk_max_size_offset() isn't possible here. So pass in 1096 - * ti->max_io_len to override stacked chunk_sectors. 1094 + * blk_queue_split() isn't possible here. 1097 1095 */ 1098 - if (ti->max_io_len) { 1099 - max_len = blk_max_size_offset(ti->table->md->queue, 1100 - target_offset, ti->max_io_len); 1101 - if (len > max_len) 1102 - len = max_len; 1103 - } 1104 - 1105 - return len; 1096 + if (!ti->max_io_len) 1097 + return len; 1098 + return min_t(sector_t, len, 1099 + min(queue_max_sectors(ti->table->md->queue), 1100 + blk_chunk_sectors_left(target_offset, ti->max_io_len))); 1106 1101 } 1107 1102 1108 1103 int dm_set_target_max_io_len(struct dm_target *ti, sector_t len) ··· 1511 1516 1512 1517 static bool is_abnormal_io(struct bio *bio) 1513 1518 { 1514 - unsigned int op = bio_op(bio); 1519 + enum req_op op = bio_op(bio); 1515 1520 1516 1521 if (op != REQ_OP_READ && op != REQ_OP_WRITE && op != REQ_OP_FLUSH) { 1517 1522 switch (op) { ··· 1541 1546 break; 1542 1547 case REQ_OP_WRITE_ZEROES: 1543 1548 num_bios = ti->num_write_zeroes_bios; 1549 + break; 1550 + default: 1544 1551 break; 1545 1552 } 1546 1553 ··· 1625 1628 * Only support bio polling for normal IO, and the target io is 1626 1629 * exactly inside the dm_io instance (verified in dm_poll_dm_io) 1627 1630 */ 1628 - ci->submit_as_polled = ci->bio->bi_opf & REQ_POLLED; 1631 + ci->submit_as_polled = !!(ci->bio->bi_opf & REQ_POLLED); 1629 1632 1630 1633 len = min_t(sector_t, max_io_len(ti, ci->sector), ci->sector_count); 1631 1634 setup_split_accounting(ci, len); ··· 1722 1725 struct mapped_device *md = bio->bi_bdev->bd_disk->private_data; 1723 1726 int srcu_idx; 1724 1727 struct dm_table *map; 1725 - unsigned bio_opf = bio->bi_opf; 1728 + blk_opf_t bio_opf = bio->bi_opf; 1726 1729 1727 1730 map = dm_get_live_table_bio(md, &srcu_idx, bio_opf); 1728 1731 ··· 1896 1899 del_gendisk(md->disk); 1897 1900 } 1898 1901 dm_queue_destroy_crypto_profile(md->queue); 1899 - blk_cleanup_disk(md->disk); 1902 + put_disk(md->disk); 1900 1903 } 1901 1904 1902 1905 if (md->pending_io) {
+3 -3
drivers/md/md-bitmap.c
··· 165 165 166 166 if (sync_page_io(rdev, target, 167 167 roundup(size, bdev_logical_block_size(rdev->bdev)), 168 - page, REQ_OP_READ, 0, true)) { 168 + page, REQ_OP_READ, true)) { 169 169 page->index = index; 170 170 return 0; 171 171 } ··· 302 302 atomic_inc(&bitmap->pending_writes); 303 303 set_buffer_locked(bh); 304 304 set_buffer_mapped(bh); 305 - submit_bh(REQ_OP_WRITE, REQ_SYNC, bh); 305 + submit_bh(REQ_OP_WRITE | REQ_SYNC, bh); 306 306 bh = bh->b_this_page; 307 307 } 308 308 ··· 394 394 atomic_inc(&bitmap->pending_writes); 395 395 set_buffer_locked(bh); 396 396 set_buffer_mapped(bh); 397 - submit_bh(REQ_OP_READ, 0, bh); 397 + submit_bh(REQ_OP_READ, bh); 398 398 } 399 399 blk_cur++; 400 400 bh = bh->b_this_page;
+8 -8
drivers/md/md.c
··· 993 993 } 994 994 995 995 int sync_page_io(struct md_rdev *rdev, sector_t sector, int size, 996 - struct page *page, int op, int op_flags, bool metadata_op) 996 + struct page *page, blk_opf_t opf, bool metadata_op) 997 997 { 998 998 struct bio bio; 999 999 struct bio_vec bvec; 1000 1000 1001 1001 if (metadata_op && rdev->meta_bdev) 1002 - bio_init(&bio, rdev->meta_bdev, &bvec, 1, op | op_flags); 1002 + bio_init(&bio, rdev->meta_bdev, &bvec, 1, opf); 1003 1003 else 1004 - bio_init(&bio, rdev->bdev, &bvec, 1, op | op_flags); 1004 + bio_init(&bio, rdev->bdev, &bvec, 1, opf); 1005 1005 1006 1006 if (metadata_op) 1007 1007 bio.bi_iter.bi_sector = sector + rdev->sb_start; ··· 1024 1024 if (rdev->sb_loaded) 1025 1025 return 0; 1026 1026 1027 - if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, 0, true)) 1027 + if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, true)) 1028 1028 goto fail; 1029 1029 rdev->sb_loaded = 1; 1030 1030 return 0; ··· 1722 1722 return -EINVAL; 1723 1723 bb_sector = (long long)offset; 1724 1724 if (!sync_page_io(rdev, bb_sector, sectors << 9, 1725 - rdev->bb_page, REQ_OP_READ, 0, true)) 1725 + rdev->bb_page, REQ_OP_READ, true)) 1726 1726 return -EIO; 1727 1727 bbp = (__le64 *)page_address(rdev->bb_page); 1728 1728 rdev->badblocks.shift = sb->bblog_shift; ··· 2438 2438 mdname(mddev), mddev->max_disks); 2439 2439 return -EBUSY; 2440 2440 } 2441 - bdevname(rdev->bdev,b); 2441 + snprintf(b, sizeof(b), "%pg", rdev->bdev); 2442 2442 strreplace(b, '/', '!'); 2443 2443 2444 2444 rdev->mddev = mddev; ··· 5579 5579 5580 5580 if (mddev->gendisk) { 5581 5581 del_gendisk(mddev->gendisk); 5582 - blk_cleanup_disk(mddev->gendisk); 5582 + put_disk(mddev->gendisk); 5583 5583 } 5584 5584 percpu_ref_exit(&mddev->writes_pending); 5585 5585 ··· 5718 5718 out_del_gendisk: 5719 5719 del_gendisk(disk); 5720 5720 out_cleanup_disk: 5721 - blk_cleanup_disk(disk); 5721 + put_disk(disk); 5722 5722 out_unlock_disks_mutex: 5723 5723 mutex_unlock(&disks_mutex); 5724 5724 mddev_put(mddev);
+1 -2
drivers/md/md.h
··· 738 738 sector_t sector, int size, struct page *page); 739 739 extern int md_super_wait(struct mddev *mddev); 740 740 extern int sync_page_io(struct md_rdev *rdev, sector_t sector, int size, 741 - struct page *page, int op, int op_flags, 742 - bool metadata_op); 741 + struct page *page, blk_opf_t opf, bool metadata_op); 743 742 extern void md_do_sync(struct md_thread *thread); 744 743 extern void md_new_event(void); 745 744 extern void md_allow_write(struct mddev *mddev);
+7 -7
drivers/md/raid1.c
··· 1220 1220 struct raid1_info *mirror; 1221 1221 struct bio *read_bio; 1222 1222 struct bitmap *bitmap = mddev->bitmap; 1223 - const int op = bio_op(bio); 1224 - const unsigned long do_sync = (bio->bi_opf & REQ_SYNC); 1223 + const enum req_op op = bio_op(bio); 1224 + const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC; 1225 1225 int max_sectors; 1226 1226 int rdisk; 1227 1227 bool r1bio_existed = !!r1_bio; ··· 1240 1240 rcu_read_lock(); 1241 1241 rdev = rcu_dereference(conf->mirrors[r1_bio->read_disk].rdev); 1242 1242 if (rdev) 1243 - bdevname(rdev->bdev, b); 1243 + snprintf(b, sizeof(b), "%pg", rdev->bdev); 1244 1244 else 1245 1245 strcpy(b, "???"); 1246 1246 rcu_read_unlock(); ··· 1988 1988 } 1989 1989 1990 1990 static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector, 1991 - int sectors, struct page *page, int rw) 1991 + int sectors, struct page *page, int rw) 1992 1992 { 1993 - if (sync_page_io(rdev, sector, sectors << 9, page, rw, 0, false)) 1993 + if (sync_page_io(rdev, sector, sectors << 9, page, rw, false)) 1994 1994 /* success */ 1995 1995 return 1; 1996 1996 if (rw == WRITE) { ··· 2057 2057 rdev = conf->mirrors[d].rdev; 2058 2058 if (sync_page_io(rdev, sect, s<<9, 2059 2059 pages[idx], 2060 - REQ_OP_READ, 0, false)) { 2060 + REQ_OP_READ, false)) { 2061 2061 success = 1; 2062 2062 break; 2063 2063 } ··· 2305 2305 atomic_inc(&rdev->nr_pending); 2306 2306 rcu_read_unlock(); 2307 2307 if (sync_page_io(rdev, sect, s<<9, 2308 - conf->tmppage, REQ_OP_READ, 0, false)) 2308 + conf->tmppage, REQ_OP_READ, false)) 2309 2309 success = 1; 2310 2310 rdev_dec_pending(rdev, mddev); 2311 2311 if (success)
+11 -11
drivers/md/raid10.c
··· 1136 1136 { 1137 1137 struct r10conf *conf = mddev->private; 1138 1138 struct bio *read_bio; 1139 - const int op = bio_op(bio); 1140 - const unsigned long do_sync = (bio->bi_opf & REQ_SYNC); 1139 + const enum req_op op = bio_op(bio); 1140 + const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC; 1141 1141 int max_sectors; 1142 1142 struct md_rdev *rdev; 1143 1143 char b[BDEVNAME_SIZE]; ··· 1164 1164 disk = r10_bio->devs[slot].devnum; 1165 1165 err_rdev = rcu_dereference(conf->mirrors[disk].rdev); 1166 1166 if (err_rdev) 1167 - bdevname(err_rdev->bdev, b); 1167 + snprintf(b, sizeof(b), "%pg", err_rdev->bdev); 1168 1168 else { 1169 1169 strcpy(b, "???"); 1170 1170 /* This never gets dereferenced */ ··· 1230 1230 struct bio *bio, bool replacement, 1231 1231 int n_copy) 1232 1232 { 1233 - const int op = bio_op(bio); 1234 - const unsigned long do_sync = (bio->bi_opf & REQ_SYNC); 1235 - const unsigned long do_fua = (bio->bi_opf & REQ_FUA); 1233 + const enum req_op op = bio_op(bio); 1234 + const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC; 1235 + const blk_opf_t do_fua = bio->bi_opf & REQ_FUA; 1236 1236 unsigned long flags; 1237 1237 struct blk_plug_cb *cb; 1238 1238 struct raid1_plug_cb *plug = NULL; ··· 2512 2512 addr, 2513 2513 s << 9, 2514 2514 pages[idx], 2515 - REQ_OP_READ, 0, false); 2515 + REQ_OP_READ, false); 2516 2516 if (ok) { 2517 2517 rdev = conf->mirrors[dw].rdev; 2518 2518 addr = r10_bio->devs[1].addr + sect; ··· 2520 2520 addr, 2521 2521 s << 9, 2522 2522 pages[idx], 2523 - REQ_OP_WRITE, 0, false); 2523 + REQ_OP_WRITE, false); 2524 2524 if (!ok) { 2525 2525 set_bit(WriteErrorSeen, &rdev->flags); 2526 2526 if (!test_and_set_bit(WantReplacement, ··· 2644 2644 if (is_badblock(rdev, sector, sectors, &first_bad, &bad_sectors) 2645 2645 && (rw == READ || test_bit(WriteErrorSeen, &rdev->flags))) 2646 2646 return -1; 2647 - if (sync_page_io(rdev, sector, sectors << 9, page, rw, 0, false)) 2647 + if (sync_page_io(rdev, sector, sectors << 9, page, rw, false)) 2648 2648 /* success */ 2649 2649 return 1; 2650 2650 if (rw == WRITE) { ··· 2726 2726 sect, 2727 2727 s<<9, 2728 2728 conf->tmppage, 2729 - REQ_OP_READ, 0, false); 2729 + REQ_OP_READ, false); 2730 2730 rdev_dec_pending(rdev, mddev); 2731 2731 rcu_read_lock(); 2732 2732 if (success) ··· 5107 5107 addr, 5108 5108 s << 9, 5109 5109 pages[idx], 5110 - REQ_OP_READ, 0, false); 5110 + REQ_OP_READ, false); 5111 5111 rdev_dec_pending(rdev, mddev); 5112 5112 rcu_read_lock(); 5113 5113 if (success)
+6 -6
drivers/md/raid5-cache.c
··· 1788 1788 mb = page_address(page); 1789 1789 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum, 1790 1790 mb, PAGE_SIZE)); 1791 - if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE, 1791 + if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE | 1792 1792 REQ_SYNC | REQ_FUA, false)) { 1793 1793 __free_page(page); 1794 1794 return -EIO; ··· 1898 1898 atomic_inc(&rdev->nr_pending); 1899 1899 rcu_read_unlock(); 1900 1900 sync_page_io(rdev, sh->sector, PAGE_SIZE, 1901 - sh->dev[disk_index].page, REQ_OP_WRITE, 0, 1901 + sh->dev[disk_index].page, REQ_OP_WRITE, 1902 1902 false); 1903 1903 rdev_dec_pending(rdev, rdev->mddev); 1904 1904 rcu_read_lock(); ··· 1908 1908 atomic_inc(&rrdev->nr_pending); 1909 1909 rcu_read_unlock(); 1910 1910 sync_page_io(rrdev, sh->sector, PAGE_SIZE, 1911 - sh->dev[disk_index].page, REQ_OP_WRITE, 0, 1911 + sh->dev[disk_index].page, REQ_OP_WRITE, 1912 1912 false); 1913 1913 rdev_dec_pending(rrdev, rrdev->mddev); 1914 1914 rcu_read_lock(); ··· 2394 2394 PAGE_SIZE)); 2395 2395 kunmap_atomic(addr); 2396 2396 sync_page_io(log->rdev, write_pos, PAGE_SIZE, 2397 - dev->page, REQ_OP_WRITE, 0, false); 2397 + dev->page, REQ_OP_WRITE, false); 2398 2398 write_pos = r5l_ring_add(log, write_pos, 2399 2399 BLOCK_SECTORS); 2400 2400 offset += sizeof(__le32) + ··· 2406 2406 mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum, 2407 2407 mb, PAGE_SIZE)); 2408 2408 sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page, 2409 - REQ_OP_WRITE, REQ_SYNC | REQ_FUA, false); 2409 + REQ_OP_WRITE | REQ_SYNC | REQ_FUA, false); 2410 2410 sh->log_start = ctx->pos; 2411 2411 list_add_tail(&sh->r5c, &log->stripe_in_journal_list); 2412 2412 atomic_inc(&log->stripe_in_journal_count); ··· 2971 2971 if (!page) 2972 2972 return -ENOMEM; 2973 2973 2974 - if (!sync_page_io(rdev, cp, PAGE_SIZE, page, REQ_OP_READ, 0, false)) { 2974 + if (!sync_page_io(rdev, cp, PAGE_SIZE, page, REQ_OP_READ, false)) { 2975 2975 ret = -EIO; 2976 2976 goto ioerr; 2977 2977 }
+6 -6
drivers/md/raid5-ppl.c
··· 897 897 __func__, indent, "", rdev->bdev, 898 898 (unsigned long long)sector); 899 899 if (!sync_page_io(rdev, sector, block_size, page2, 900 - REQ_OP_READ, 0, false)) { 900 + REQ_OP_READ, false)) { 901 901 md_error(mddev, rdev); 902 902 pr_debug("%s:%*s read failed!\n", __func__, 903 903 indent, ""); ··· 919 919 (unsigned long long)(ppl_sector + i)); 920 920 if (!sync_page_io(log->rdev, 921 921 ppl_sector - log->rdev->data_offset + i, 922 - block_size, page2, REQ_OP_READ, 0, 922 + block_size, page2, REQ_OP_READ, 923 923 false)) { 924 924 pr_debug("%s:%*s read failed!\n", __func__, 925 925 indent, ""); ··· 946 946 (unsigned long long)parity_sector, 947 947 parity_rdev->bdev); 948 948 if (!sync_page_io(parity_rdev, parity_sector, block_size, 949 - page1, REQ_OP_WRITE, 0, false)) { 949 + page1, REQ_OP_WRITE, false)) { 950 950 pr_debug("%s:%*s parity write error!\n", __func__, 951 951 indent, ""); 952 952 md_error(mddev, parity_rdev); ··· 998 998 int s = pp_size > PAGE_SIZE ? PAGE_SIZE : pp_size; 999 999 1000 1000 if (!sync_page_io(rdev, sector - rdev->data_offset, 1001 - s, page, REQ_OP_READ, 0, false)) { 1001 + s, page, REQ_OP_READ, false)) { 1002 1002 md_error(mddev, rdev); 1003 1003 ret = -EIO; 1004 1004 goto out; ··· 1062 1062 1063 1063 if (!sync_page_io(rdev, rdev->ppl.sector - rdev->data_offset, 1064 1064 PPL_HEADER_SIZE, page, REQ_OP_WRITE | REQ_SYNC | 1065 - REQ_FUA, 0, false)) { 1065 + REQ_FUA, false)) { 1066 1066 md_error(rdev->mddev, rdev); 1067 1067 ret = -EIO; 1068 1068 } ··· 1100 1100 if (!sync_page_io(rdev, 1101 1101 rdev->ppl.sector - rdev->data_offset + 1102 1102 pplhdr_offset, PAGE_SIZE, page, REQ_OP_READ, 1103 - 0, false)) { 1103 + false)) { 1104 1104 md_error(mddev, rdev); 1105 1105 ret = -EIO; 1106 1106 /* if not able to read - don't recover any PPL */
+2 -1
drivers/md/raid5.c
··· 1082 1082 should_defer = conf->batch_bio_dispatch && conf->group_cnt; 1083 1083 1084 1084 for (i = disks; i--; ) { 1085 - int op, op_flags = 0; 1085 + enum req_op op; 1086 + blk_opf_t op_flags = 0; 1086 1087 int replace_only = 0; 1087 1088 struct bio *bi, *rbi; 1088 1089 struct md_rdev *rdev, *rrdev = NULL;
+1 -2
drivers/memstick/core/ms_block.c
··· 2129 2129 return 0; 2130 2130 2131 2131 out_cleanup_disk: 2132 - blk_cleanup_disk(msb->disk); 2132 + put_disk(msb->disk); 2133 2133 out_free_tag_set: 2134 2134 blk_mq_free_tag_set(&msb->tag_set); 2135 2135 out_release_id: ··· 2187 2187 2188 2188 /* Remove the disk */ 2189 2189 del_gendisk(msb->disk); 2190 - blk_cleanup_queue(msb->queue); 2191 2190 blk_mq_free_tag_set(&msb->tag_set); 2192 2191 msb->queue = NULL; 2193 2192
+1 -2
drivers/memstick/core/mspro_block.c
··· 1209 1209 return 0; 1210 1210 1211 1211 out_cleanup_disk: 1212 - blk_cleanup_disk(msb->disk); 1212 + put_disk(msb->disk); 1213 1213 out_free_tag_set: 1214 1214 blk_mq_free_tag_set(&msb->tag_set); 1215 1215 out_release_id: ··· 1294 1294 del_gendisk(msb->disk); 1295 1295 dev_dbg(&card->dev, "mspro block remove\n"); 1296 1296 1297 - blk_cleanup_queue(msb->queue); 1298 1297 blk_mq_free_tag_set(&msb->tag_set); 1299 1298 msb->queue = NULL; 1300 1299
+3 -3
drivers/mmc/core/block.c
··· 2505 2505 dev_set_drvdata(&card->dev, md); 2506 2506 ret = device_add_disk(md->parent, md->disk, mmc_disk_attr_groups); 2507 2507 if (ret) 2508 - goto err_cleanup_queue; 2508 + goto err_put_disk; 2509 2509 return md; 2510 2510 2511 - err_cleanup_queue: 2512 - blk_cleanup_queue(md->disk->queue); 2511 + err_put_disk: 2512 + put_disk(md->disk); 2513 2513 blk_mq_free_tag_set(&md->queue.tag_set); 2514 2514 err_kfree: 2515 2515 kfree(md);
+1 -3
drivers/mmc/core/queue.c
··· 116 116 } 117 117 } 118 118 119 - static enum blk_eh_timer_return mmc_mq_timed_out(struct request *req, 120 - bool reserved) 119 + static enum blk_eh_timer_return mmc_mq_timed_out(struct request *req) 121 120 { 122 121 struct request_queue *q = req->q; 123 122 struct mmc_queue *mq = q->queuedata; ··· 493 494 if (blk_queue_quiesced(q)) 494 495 blk_mq_unquiesce_queue(q); 495 496 496 - blk_cleanup_queue(q); 497 497 blk_mq_free_tag_set(&mq->tag_set); 498 498 499 499 /*
+2 -2
drivers/mtd/mtd_blkdevs.c
··· 29 29 struct mtd_blktrans_dev *dev = 30 30 container_of(kref, struct mtd_blktrans_dev, ref); 31 31 32 - blk_cleanup_disk(dev->disk); 32 + put_disk(dev->disk); 33 33 blk_mq_free_tag_set(dev->tag_set); 34 34 kfree(dev->tag_set); 35 35 list_del(&dev->list); ··· 398 398 return 0; 399 399 400 400 out_cleanup_disk: 401 - blk_cleanup_disk(new->disk); 401 + put_disk(new->disk); 402 402 out_free_tag_set: 403 403 blk_mq_free_tag_set(new->tag_set); 404 404 out_kfree_tag_set:
+2 -2
drivers/mtd/ubi/block.c
··· 467 467 out_remove_minor: 468 468 idr_remove(&ubiblock_minor_idr, gd->first_minor); 469 469 out_cleanup_disk: 470 - blk_cleanup_disk(dev->gd); 470 + put_disk(dev->gd); 471 471 out_free_tags: 472 472 blk_mq_free_tag_set(&dev->tag_set); 473 473 out_free_dev: ··· 486 486 destroy_workqueue(dev->wq); 487 487 /* Finally destroy the blk queue */ 488 488 dev_info(disk_to_dev(dev->gd), "released"); 489 - blk_cleanup_disk(dev->gd); 489 + put_disk(dev->gd); 490 490 blk_mq_free_tag_set(&dev->tag_set); 491 491 idr_remove(&ubiblock_minor_idr, dev->gd->first_minor); 492 492 }
+4 -4
drivers/nvdimm/btt.c
··· 1422 1422 1423 1423 static int btt_do_bvec(struct btt *btt, struct bio_integrity_payload *bip, 1424 1424 struct page *page, unsigned int len, unsigned int off, 1425 - unsigned int op, sector_t sector) 1425 + enum req_op op, sector_t sector) 1426 1426 { 1427 1427 int ret; 1428 1428 ··· 1483 1483 } 1484 1484 1485 1485 static int btt_rw_page(struct block_device *bdev, sector_t sector, 1486 - struct page *page, unsigned int op) 1486 + struct page *page, enum req_op op) 1487 1487 { 1488 1488 struct btt *btt = bdev->bd_disk->private_data; 1489 1489 int rc; ··· 1548 1548 return 0; 1549 1549 1550 1550 out_cleanup_disk: 1551 - blk_cleanup_disk(btt->btt_disk); 1551 + put_disk(btt->btt_disk); 1552 1552 return rc; 1553 1553 } 1554 1554 1555 1555 static void btt_blk_cleanup(struct btt *btt) 1556 1556 { 1557 1557 del_gendisk(btt->btt_disk); 1558 - blk_cleanup_disk(btt->btt_disk); 1558 + put_disk(btt->btt_disk); 1559 1559 } 1560 1560 1561 1561 /**
+3 -3
drivers/nvdimm/pmem.c
··· 239 239 } 240 240 241 241 static int pmem_rw_page(struct block_device *bdev, sector_t sector, 242 - struct page *page, unsigned int op) 242 + struct page *page, enum req_op op) 243 243 { 244 244 struct pmem_device *pmem = bdev->bd_disk->private_data; 245 245 blk_status_t rc; ··· 450 450 put_dax(pmem->dax_dev); 451 451 del_gendisk(pmem->disk); 452 452 453 - blk_cleanup_disk(pmem->disk); 453 + put_disk(pmem->disk); 454 454 } 455 455 456 456 static int pmem_attach_disk(struct device *dev, ··· 596 596 kill_dax(pmem->dax_dev); 597 597 put_dax(pmem->dax_dev); 598 598 out: 599 - blk_cleanup_disk(pmem->disk); 599 + put_disk(pmem->disk); 600 600 return rc; 601 601 } 602 602
+2 -3
drivers/nvme/host/apple.c
··· 862 862 } 863 863 } 864 864 865 - static enum blk_eh_timer_return apple_nvme_timeout(struct request *req, 866 - bool reserved) 865 + static enum blk_eh_timer_return apple_nvme_timeout(struct request *req) 867 866 { 868 867 struct apple_nvme_iod *iod = blk_mq_rq_to_pdu(req); 869 868 struct apple_nvme_queue *q = iod->q; ··· 1501 1502 1502 1503 if (!blk_get_queue(anv->ctrl.admin_q)) { 1503 1504 nvme_start_admin_queue(&anv->ctrl); 1504 - blk_cleanup_queue(anv->ctrl.admin_q); 1505 + blk_mq_destroy_queue(anv->ctrl.admin_q); 1505 1506 anv->ctrl.admin_q = NULL; 1506 1507 ret = -ENODEV; 1507 1508 goto put_dev;
+2 -3
drivers/nvme/host/core.c
··· 418 418 } 419 419 EXPORT_SYMBOL_GPL(nvme_host_path_error); 420 420 421 - bool nvme_cancel_request(struct request *req, void *data, bool reserved) 421 + bool nvme_cancel_request(struct request *req, void *data) 422 422 { 423 423 dev_dbg_ratelimited(((struct nvme_ctrl *) data)->device, 424 424 "Cancelling I/O %d", req->tag); ··· 4061 4061 mutex_unlock(&ctrl->subsys->lock); 4062 4062 nvme_put_ns_head(ns->head); 4063 4063 out_cleanup_disk: 4064 - blk_cleanup_disk(disk); 4064 + put_disk(disk); 4065 4065 out_free_ns: 4066 4066 kfree(ns); 4067 4067 out_free_id: ··· 4103 4103 if (!nvme_ns_head_multipath(ns->head)) 4104 4104 nvme_cdev_del(&ns->cdev, &ns->cdev_device); 4105 4105 del_gendisk(ns->disk); 4106 - blk_cleanup_queue(ns->queue); 4107 4106 4108 4107 down_write(&ns->ctrl->namespaces_rwsem); 4109 4108 list_del_init(&ns->list);
+8 -10
drivers/nvme/host/fc.c
··· 2392 2392 unsigned long flags; 2393 2393 2394 2394 if (ctrl->ctrl.tagset) { 2395 - blk_cleanup_queue(ctrl->ctrl.connect_q); 2395 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 2396 2396 blk_mq_free_tag_set(&ctrl->tag_set); 2397 2397 } 2398 2398 ··· 2402 2402 spin_unlock_irqrestore(&ctrl->rport->lock, flags); 2403 2403 2404 2404 nvme_start_admin_queue(&ctrl->ctrl); 2405 - blk_cleanup_queue(ctrl->ctrl.admin_q); 2406 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 2405 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 2406 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 2407 2407 blk_mq_free_tag_set(&ctrl->admin_tag_set); 2408 2408 2409 2409 kfree(ctrl->queues); ··· 2456 2456 * status. The done path will return the io request back to the block 2457 2457 * layer with an error status. 2458 2458 */ 2459 - static bool 2460 - nvme_fc_terminate_exchange(struct request *req, void *data, bool reserved) 2459 + static bool nvme_fc_terminate_exchange(struct request *req, void *data) 2461 2460 { 2462 2461 struct nvme_ctrl *nctrl = data; 2463 2462 struct nvme_fc_ctrl *ctrl = to_fc_ctrl(nctrl); ··· 2564 2565 nvme_reset_ctrl(&ctrl->ctrl); 2565 2566 } 2566 2567 2567 - static enum blk_eh_timer_return 2568 - nvme_fc_timeout(struct request *rq, bool reserved) 2568 + static enum blk_eh_timer_return nvme_fc_timeout(struct request *rq) 2569 2569 { 2570 2570 struct nvme_fc_fcp_op *op = blk_mq_rq_to_pdu(rq); 2571 2571 struct nvme_fc_ctrl *ctrl = op->ctrl; ··· 2951 2953 out_delete_hw_queues: 2952 2954 nvme_fc_delete_hw_io_queues(ctrl); 2953 2955 out_cleanup_blk_queue: 2954 - blk_cleanup_queue(ctrl->ctrl.connect_q); 2956 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 2955 2957 out_free_tag_set: 2956 2958 blk_mq_free_tag_set(&ctrl->tag_set); 2957 2959 nvme_fc_free_io_queues(ctrl); ··· 3640 3642 return ERR_PTR(-EIO); 3641 3643 3642 3644 out_cleanup_admin_q: 3643 - blk_cleanup_queue(ctrl->ctrl.admin_q); 3645 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 3644 3646 out_cleanup_fabrics_q: 3645 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 3647 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 3646 3648 out_free_admin_tag_set: 3647 3649 blk_mq_free_tag_set(&ctrl->admin_tag_set); 3648 3650 out_free_queues:
+2 -2
drivers/nvme/host/ioctl.c
··· 68 68 struct nvme_command *cmd, void __user *ubuffer, 69 69 unsigned bufflen, void __user *meta_buffer, unsigned meta_len, 70 70 u32 meta_seed, void **metap, unsigned timeout, bool vec, 71 - unsigned int rq_flags, blk_mq_req_flags_t blk_flags) 71 + blk_opf_t rq_flags, blk_mq_req_flags_t blk_flags) 72 72 { 73 73 bool write = nvme_is_write(cmd); 74 74 struct nvme_ns *ns = q->queuedata; ··· 407 407 struct nvme_uring_data d; 408 408 struct nvme_command c; 409 409 struct request *req; 410 - unsigned int rq_flags = 0; 410 + blk_opf_t rq_flags = 0; 411 411 blk_mq_req_flags_t blk_flags = 0; 412 412 void *meta = NULL; 413 413
+2 -2
drivers/nvme/host/multipath.c
··· 830 830 ns->head->disk->queue); 831 831 #ifdef CONFIG_BLK_DEV_ZONED 832 832 if (blk_queue_is_zoned(ns->queue) && ns->head->disk) 833 - ns->head->disk->queue->nr_zones = ns->queue->nr_zones; 833 + ns->head->disk->nr_zones = ns->disk->nr_zones; 834 834 #endif 835 835 } 836 836 ··· 853 853 /* make sure all pending bios are cleaned up */ 854 854 kblockd_schedule_work(&head->requeue_work); 855 855 flush_work(&head->requeue_work); 856 - blk_cleanup_disk(head->disk); 856 + put_disk(head->disk); 857 857 } 858 858 859 859 void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl)
+2 -2
drivers/nvme/host/nvme.h
··· 698 698 } 699 699 700 700 blk_status_t nvme_host_path_error(struct request *req); 701 - bool nvme_cancel_request(struct request *req, void *data, bool reserved); 701 + bool nvme_cancel_request(struct request *req, void *data); 702 702 void nvme_cancel_tagset(struct nvme_ctrl *ctrl); 703 703 void nvme_cancel_admin_tagset(struct nvme_ctrl *ctrl); 704 704 bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, ··· 734 734 int nvme_wait_freeze_timeout(struct nvme_ctrl *ctrl, long timeout); 735 735 void nvme_start_freeze(struct nvme_ctrl *ctrl); 736 736 737 - static inline unsigned int nvme_req_op(struct nvme_command *cmd) 737 + static inline enum req_op nvme_req_op(struct nvme_command *cmd) 738 738 { 739 739 return nvme_is_write(cmd) ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN; 740 740 }
+2 -2
drivers/nvme/host/pci.c
··· 1344 1344 "Try \"nvme_core.default_ps_max_latency_us=0 pcie_aspm=off\" and report a bug\n"); 1345 1345 } 1346 1346 1347 - static enum blk_eh_timer_return nvme_timeout(struct request *req, bool reserved) 1347 + static enum blk_eh_timer_return nvme_timeout(struct request *req) 1348 1348 { 1349 1349 struct nvme_iod *iod = blk_mq_rq_to_pdu(req); 1350 1350 struct nvme_queue *nvmeq = iod->nvmeq; ··· 1760 1760 * queue to flush these to completion. 1761 1761 */ 1762 1762 nvme_start_admin_queue(&dev->ctrl); 1763 - blk_cleanup_queue(dev->ctrl.admin_q); 1763 + blk_mq_destroy_queue(dev->ctrl.admin_q); 1764 1764 blk_mq_free_tag_set(&dev->admin_tagset); 1765 1765 } 1766 1766 }
+7 -8
drivers/nvme/host/rdma.c
··· 840 840 bool remove) 841 841 { 842 842 if (remove) { 843 - blk_cleanup_queue(ctrl->ctrl.admin_q); 844 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 843 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 844 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 845 845 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset); 846 846 } 847 847 if (ctrl->async_event_sqe.data) { ··· 935 935 nvme_cancel_admin_tagset(&ctrl->ctrl); 936 936 out_cleanup_queue: 937 937 if (new) 938 - blk_cleanup_queue(ctrl->ctrl.admin_q); 938 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 939 939 out_cleanup_fabrics_q: 940 940 if (new) 941 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 941 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 942 942 out_free_tagset: 943 943 if (new) 944 944 blk_mq_free_tag_set(ctrl->ctrl.admin_tagset); ··· 957 957 bool remove) 958 958 { 959 959 if (remove) { 960 - blk_cleanup_queue(ctrl->ctrl.connect_q); 960 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 961 961 blk_mq_free_tag_set(ctrl->ctrl.tagset); 962 962 } 963 963 nvme_rdma_free_io_queues(ctrl); ··· 1012 1012 out_cleanup_connect_q: 1013 1013 nvme_cancel_tagset(&ctrl->ctrl); 1014 1014 if (new) 1015 - blk_cleanup_queue(ctrl->ctrl.connect_q); 1015 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 1016 1016 out_free_tag_set: 1017 1017 if (new) 1018 1018 blk_mq_free_tag_set(ctrl->ctrl.tagset); ··· 2021 2021 nvmf_complete_timed_out_request(rq); 2022 2022 } 2023 2023 2024 - static enum blk_eh_timer_return 2025 - nvme_rdma_timeout(struct request *rq, bool reserved) 2024 + static enum blk_eh_timer_return nvme_rdma_timeout(struct request *rq) 2026 2025 { 2027 2026 struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); 2028 2027 struct nvme_rdma_queue *queue = req->queue;
+7 -8
drivers/nvme/host/tcp.c
··· 1884 1884 { 1885 1885 nvme_tcp_stop_io_queues(ctrl); 1886 1886 if (remove) { 1887 - blk_cleanup_queue(ctrl->connect_q); 1887 + blk_mq_destroy_queue(ctrl->connect_q); 1888 1888 blk_mq_free_tag_set(ctrl->tagset); 1889 1889 } 1890 1890 nvme_tcp_free_io_queues(ctrl); ··· 1939 1939 out_cleanup_connect_q: 1940 1940 nvme_cancel_tagset(ctrl); 1941 1941 if (new) 1942 - blk_cleanup_queue(ctrl->connect_q); 1942 + blk_mq_destroy_queue(ctrl->connect_q); 1943 1943 out_free_tag_set: 1944 1944 if (new) 1945 1945 blk_mq_free_tag_set(ctrl->tagset); ··· 1952 1952 { 1953 1953 nvme_tcp_stop_queue(ctrl, 0); 1954 1954 if (remove) { 1955 - blk_cleanup_queue(ctrl->admin_q); 1956 - blk_cleanup_queue(ctrl->fabrics_q); 1955 + blk_mq_destroy_queue(ctrl->admin_q); 1956 + blk_mq_destroy_queue(ctrl->fabrics_q); 1957 1957 blk_mq_free_tag_set(ctrl->admin_tagset); 1958 1958 } 1959 1959 nvme_tcp_free_admin_queue(ctrl); ··· 2011 2011 nvme_cancel_admin_tagset(ctrl); 2012 2012 out_cleanup_queue: 2013 2013 if (new) 2014 - blk_cleanup_queue(ctrl->admin_q); 2014 + blk_mq_destroy_queue(ctrl->admin_q); 2015 2015 out_cleanup_fabrics_q: 2016 2016 if (new) 2017 - blk_cleanup_queue(ctrl->fabrics_q); 2017 + blk_mq_destroy_queue(ctrl->fabrics_q); 2018 2018 out_free_tagset: 2019 2019 if (new) 2020 2020 blk_mq_free_tag_set(ctrl->admin_tagset); ··· 2323 2323 nvmf_complete_timed_out_request(rq); 2324 2324 } 2325 2325 2326 - static enum blk_eh_timer_return 2327 - nvme_tcp_timeout(struct request *rq, bool reserved) 2326 + static enum blk_eh_timer_return nvme_tcp_timeout(struct request *rq) 2328 2327 { 2329 2328 struct nvme_tcp_request *req = blk_mq_rq_to_pdu(rq); 2330 2329 struct nvme_ctrl *ctrl = &req->queue->ctrl->ctrl;
+3 -3
drivers/nvme/host/zns.c
··· 109 109 goto free_data; 110 110 } 111 111 112 - blk_queue_set_zoned(ns->disk, BLK_ZONED_HM); 112 + disk_set_zoned(ns->disk, BLK_ZONED_HM); 113 113 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); 114 - blk_queue_max_open_zones(q, le32_to_cpu(id->mor) + 1); 115 - blk_queue_max_active_zones(q, le32_to_cpu(id->mar) + 1); 114 + disk_set_max_open_zones(ns->disk, le32_to_cpu(id->mor) + 1); 115 + disk_set_max_active_zones(ns->disk, le32_to_cpu(id->mar) + 1); 116 116 free_data: 117 117 kfree(id); 118 118 return status;
+9 -8
drivers/nvme/target/io-cmd-bdev.c
··· 246 246 struct scatterlist *sg; 247 247 struct blk_plug plug; 248 248 sector_t sector; 249 - int op, i, rc; 249 + blk_opf_t opf; 250 + int i, rc; 250 251 struct sg_mapping_iter prot_miter; 251 252 unsigned int iter_flags; 252 253 unsigned int total_len = nvmet_rw_data_len(req) + req->metadata_len; ··· 261 260 } 262 261 263 262 if (req->cmd->rw.opcode == nvme_cmd_write) { 264 - op = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; 263 + opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; 265 264 if (req->cmd->rw.control & cpu_to_le16(NVME_RW_FUA)) 266 - op |= REQ_FUA; 265 + opf |= REQ_FUA; 267 266 iter_flags = SG_MITER_TO_SG; 268 267 } else { 269 - op = REQ_OP_READ; 268 + opf = REQ_OP_READ; 270 269 iter_flags = SG_MITER_FROM_SG; 271 270 } 272 271 273 272 if (is_pci_p2pdma_page(sg_page(req->sg))) 274 - op |= REQ_NOMERGE; 273 + opf |= REQ_NOMERGE; 275 274 276 275 sector = nvmet_lba_to_sect(req->ns, req->cmd->rw.slba); 277 276 278 277 if (nvmet_use_inline_bvec(req)) { 279 278 bio = &req->b.inline_bio; 280 279 bio_init(bio, req->ns->bdev, req->inline_bvec, 281 - ARRAY_SIZE(req->inline_bvec), op); 280 + ARRAY_SIZE(req->inline_bvec), opf); 282 281 } else { 283 - bio = bio_alloc(req->ns->bdev, bio_max_segs(sg_cnt), op, 282 + bio = bio_alloc(req->ns->bdev, bio_max_segs(sg_cnt), opf, 284 283 GFP_KERNEL); 285 284 } 286 285 bio->bi_iter.bi_sector = sector; ··· 307 306 } 308 307 309 308 bio = bio_alloc(req->ns->bdev, bio_max_segs(sg_cnt), 310 - op, GFP_KERNEL); 309 + opf, GFP_KERNEL); 311 310 bio->bi_iter.bi_sector = sector; 312 311 313 312 bio_chain(bio, prev);
+6 -6
drivers/nvme/target/loop.c
··· 266 266 if (!test_and_clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags)) 267 267 return; 268 268 nvmet_sq_destroy(&ctrl->queues[0].nvme_sq); 269 - blk_cleanup_queue(ctrl->ctrl.admin_q); 270 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 269 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 270 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 271 271 blk_mq_free_tag_set(&ctrl->admin_tag_set); 272 272 } 273 273 ··· 283 283 mutex_unlock(&nvme_loop_ctrl_mutex); 284 284 285 285 if (nctrl->tagset) { 286 - blk_cleanup_queue(ctrl->ctrl.connect_q); 286 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 287 287 blk_mq_free_tag_set(&ctrl->tag_set); 288 288 } 289 289 kfree(ctrl->queues); ··· 410 410 411 411 out_cleanup_queue: 412 412 clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags); 413 - blk_cleanup_queue(ctrl->ctrl.admin_q); 413 + blk_mq_destroy_queue(ctrl->ctrl.admin_q); 414 414 out_cleanup_fabrics_q: 415 - blk_cleanup_queue(ctrl->ctrl.fabrics_q); 415 + blk_mq_destroy_queue(ctrl->ctrl.fabrics_q); 416 416 out_free_tagset: 417 417 blk_mq_free_tag_set(&ctrl->admin_tag_set); 418 418 out_free_sq: ··· 554 554 return 0; 555 555 556 556 out_cleanup_connect_q: 557 - blk_cleanup_queue(ctrl->ctrl.connect_q); 557 + blk_mq_destroy_queue(ctrl->ctrl.connect_q); 558 558 out_free_tagset: 559 559 blk_mq_free_tag_set(&ctrl->tag_set); 560 560 out_destroy_queues:
+12 -12
drivers/nvme/target/zns.c
··· 57 57 * zones, reject the device. Otherwise, use report zones to detect if 58 58 * the device has conventional zones. 59 59 */ 60 - if (ns->bdev->bd_disk->queue->conv_zones_bitmap) 60 + if (ns->bdev->bd_disk->conv_zones_bitmap) 61 61 return false; 62 62 63 - ret = blkdev_report_zones(ns->bdev, 0, blkdev_nr_zones(bd_disk), 63 + ret = blkdev_report_zones(ns->bdev, 0, bdev_nr_zones(ns->bdev), 64 64 validate_conv_zones_cb, NULL); 65 65 if (ret < 0) 66 66 return false; ··· 241 241 { 242 242 unsigned int sect = nvmet_lba_to_sect(req->ns, req->cmd->zmr.slba); 243 243 244 - return blkdev_nr_zones(req->ns->bdev->bd_disk) - 244 + return bdev_nr_zones(req->ns->bdev) - 245 245 (sect >> ilog2(bdev_zone_sectors(req->ns->bdev))); 246 246 } 247 247 ··· 308 308 queue_work(zbd_wq, &req->z.zmgmt_work); 309 309 } 310 310 311 - static inline enum req_opf zsa_req_op(u8 zsa) 311 + static inline enum req_op zsa_req_op(u8 zsa) 312 312 { 313 313 switch (zsa) { 314 314 case NVME_ZONE_OPEN: ··· 386 386 static u16 nvmet_bdev_zone_mgmt_emulate_all(struct nvmet_req *req) 387 387 { 388 388 struct block_device *bdev = req->ns->bdev; 389 - unsigned int nr_zones = blkdev_nr_zones(bdev->bd_disk); 389 + unsigned int nr_zones = bdev_nr_zones(bdev); 390 390 struct request_queue *q = bdev_get_queue(bdev); 391 391 struct bio *bio = NULL; 392 392 sector_t sector = 0; ··· 413 413 ret = 0; 414 414 } 415 415 416 - while (sector < get_capacity(bdev->bd_disk)) { 417 - if (test_bit(blk_queue_zone_no(q, sector), d.zbitmap)) { 416 + while (sector < bdev_nr_sectors(bdev)) { 417 + if (test_bit(disk_zone_no(bdev->bd_disk, sector), d.zbitmap)) { 418 418 bio = blk_next_bio(bio, bdev, 0, 419 419 zsa_req_op(req->cmd->zms.zsa) | REQ_SYNC, 420 420 GFP_KERNEL); ··· 422 422 /* This may take a while, so be nice to others */ 423 423 cond_resched(); 424 424 } 425 - sector += blk_queue_zone_sectors(q); 425 + sector += bdev_zone_sectors(bdev); 426 426 } 427 427 428 428 if (bio) { ··· 465 465 { 466 466 struct nvmet_req *req = container_of(w, struct nvmet_req, z.zmgmt_work); 467 467 sector_t sect = nvmet_lba_to_sect(req->ns, req->cmd->zms.slba); 468 - enum req_opf op = zsa_req_op(req->cmd->zms.zsa); 468 + enum req_op op = zsa_req_op(req->cmd->zms.zsa); 469 469 struct block_device *bdev = req->ns->bdev; 470 470 sector_t zone_sectors = bdev_zone_sectors(bdev); 471 471 u16 status = NVME_SC_SUCCESS; ··· 525 525 void nvmet_bdev_execute_zone_append(struct nvmet_req *req) 526 526 { 527 527 sector_t sect = nvmet_lba_to_sect(req->ns, req->cmd->rw.slba); 528 - const unsigned int op = REQ_OP_ZONE_APPEND | REQ_SYNC | REQ_IDLE; 528 + const blk_opf_t opf = REQ_OP_ZONE_APPEND | REQ_SYNC | REQ_IDLE; 529 529 u16 status = NVME_SC_SUCCESS; 530 530 unsigned int total_len = 0; 531 531 struct scatterlist *sg; ··· 556 556 if (nvmet_use_inline_bvec(req)) { 557 557 bio = &req->z.inline_bio; 558 558 bio_init(bio, req->ns->bdev, req->inline_bvec, 559 - ARRAY_SIZE(req->inline_bvec), op); 559 + ARRAY_SIZE(req->inline_bvec), opf); 560 560 } else { 561 - bio = bio_alloc(req->ns->bdev, req->sg_cnt, op, GFP_KERNEL); 561 + bio = bio_alloc(req->ns->bdev, req->sg_cnt, opf, GFP_KERNEL); 562 562 } 563 563 564 564 bio->bi_end_io = nvmet_bdev_zone_append_bio_done;
+2 -2
drivers/s390/block/dasd.c
··· 3145 3145 * BLK_EH_DONE if the request is handled or terminated 3146 3146 * by the driver. 3147 3147 */ 3148 - enum blk_eh_timer_return dasd_times_out(struct request *req, bool reserved) 3148 + enum blk_eh_timer_return dasd_times_out(struct request *req) 3149 3149 { 3150 3150 struct dasd_block *block = req->q->queuedata; 3151 3151 struct dasd_device *device; ··· 3280 3280 static void dasd_free_queue(struct dasd_block *block) 3281 3281 { 3282 3282 if (block->request_queue) { 3283 - blk_cleanup_queue(block->request_queue); 3283 + blk_mq_destroy_queue(block->request_queue); 3284 3284 blk_mq_free_tag_set(&block->tag_set); 3285 3285 block->request_queue = NULL; 3286 3286 }
+2 -2
drivers/s390/block/dasd_genhd.c
··· 41 41 if (base->devindex >= DASD_PER_MAJOR) 42 42 return -EBUSY; 43 43 44 - gdp = __alloc_disk_node(block->request_queue, NUMA_NO_NODE, 45 - &dasd_bio_compl_lkclass); 44 + gdp = blk_mq_alloc_disk_for_queue(block->request_queue, 45 + &dasd_bio_compl_lkclass); 46 46 if (!gdp) 47 47 return -ENOMEM; 48 48
+1 -1
drivers/s390/block/dasd_int.h
··· 795 795 struct dasd_block *dasd_alloc_block(void); 796 796 void dasd_free_block(struct dasd_block *); 797 797 798 - enum blk_eh_timer_return dasd_times_out(struct request *req, bool reserved); 798 + enum blk_eh_timer_return dasd_times_out(struct request *req); 799 799 800 800 void dasd_enable_device(struct dasd_device *); 801 801 void dasd_set_target_state(struct dasd_device *, int);
+4 -4
drivers/s390/block/dcssblk.c
··· 414 414 kill_dax(dev_info->dax_dev); 415 415 put_dax(dev_info->dax_dev); 416 416 del_gendisk(dev_info->gd); 417 - blk_cleanup_disk(dev_info->gd); 417 + put_disk(dev_info->gd); 418 418 up_write(&dcssblk_devices_sem); 419 419 420 420 if (device_remove_file_self(dev, attr)) { ··· 712 712 put_dax(dev_info->dax_dev); 713 713 put_dev: 714 714 list_del(&dev_info->lh); 715 - blk_cleanup_disk(dev_info->gd); 715 + put_disk(dev_info->gd); 716 716 list_for_each_entry(seg_info, &dev_info->seg_list, lh) { 717 717 segment_unload(seg_info->segment_name); 718 718 } ··· 722 722 dev_list_del: 723 723 list_del(&dev_info->lh); 724 724 release_gd: 725 - blk_cleanup_disk(dev_info->gd); 725 + put_disk(dev_info->gd); 726 726 up_write(&dcssblk_devices_sem); 727 727 seg_list_del: 728 728 if (dev_info == NULL) ··· 790 790 kill_dax(dev_info->dax_dev); 791 791 put_dax(dev_info->dax_dev); 792 792 del_gendisk(dev_info->gd); 793 - blk_cleanup_disk(dev_info->gd); 793 + put_disk(dev_info->gd); 794 794 795 795 /* unload all related segments */ 796 796 list_for_each_entry(entry, &dev_info->seg_list, lh)
+2 -2
drivers/s390/block/scm_blk.c
··· 501 501 return 0; 502 502 503 503 out_cleanup_disk: 504 - blk_cleanup_disk(bdev->gendisk); 504 + put_disk(bdev->gendisk); 505 505 out_tag: 506 506 blk_mq_free_tag_set(&bdev->tag_set); 507 507 out: ··· 512 512 void scm_blk_dev_cleanup(struct scm_blk_dev *bdev) 513 513 { 514 514 del_gendisk(bdev->gendisk); 515 - blk_cleanup_disk(bdev->gendisk); 515 + put_disk(bdev->gendisk); 516 516 blk_mq_free_tag_set(&bdev->tag_set); 517 517 } 518 518
+1 -1
drivers/scsi/aacraid/comminit.c
··· 272 272 q->entries = qsize; 273 273 } 274 274 275 - static bool wait_for_io_iter(struct scsi_cmnd *cmd, void *data, bool rsvd) 275 + static bool wait_for_io_iter(struct scsi_cmnd *cmd, void *data) 276 276 { 277 277 int *active = data; 278 278
+1 -1
drivers/scsi/aacraid/linit.c
··· 633 633 int krlcnt; 634 634 }; 635 635 636 - static bool fib_count_iter(struct scsi_cmnd *scmnd, void *data, bool reserved) 636 + static bool fib_count_iter(struct scsi_cmnd *scmnd, void *data) 637 637 { 638 638 struct fib_count_data *fib_count = data; 639 639
+2 -2
drivers/scsi/device_handler/scsi_dh_alua.c
··· 127 127 int bufflen, struct scsi_sense_hdr *sshdr, int flags) 128 128 { 129 129 u8 cdb[MAX_COMMAND_SIZE]; 130 - int req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 130 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 131 131 REQ_FAILFAST_DRIVER; 132 132 133 133 /* Prepare the command. */ ··· 157 157 u8 cdb[MAX_COMMAND_SIZE]; 158 158 unsigned char stpg_data[8]; 159 159 int stpg_len = 8; 160 - int req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 160 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 161 161 REQ_FAILFAST_DRIVER; 162 162 163 163 /* Prepare the data buffer */
+1 -1
drivers/scsi/device_handler/scsi_dh_emc.c
··· 239 239 unsigned char cdb[MAX_COMMAND_SIZE]; 240 240 int err, res = SCSI_DH_OK, len; 241 241 struct scsi_sense_hdr sshdr; 242 - u64 req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 242 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 243 243 REQ_FAILFAST_DRIVER; 244 244 245 245 if (csdev->flags & CLARIION_SHORT_TRESPASS) {
+2 -2
drivers/scsi/device_handler/scsi_dh_hp_sw.c
··· 83 83 unsigned char cmd[6] = { TEST_UNIT_READY }; 84 84 struct scsi_sense_hdr sshdr; 85 85 int ret = SCSI_DH_OK, res; 86 - u64 req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 86 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 87 87 REQ_FAILFAST_DRIVER; 88 88 89 89 retry: ··· 121 121 struct scsi_device *sdev = h->sdev; 122 122 int res, rc = SCSI_DH_OK; 123 123 int retry_cnt = HP_SW_RETRIES; 124 - u64 req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 124 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 125 125 REQ_FAILFAST_DRIVER; 126 126 127 127 retry:
+1 -1
drivers/scsi/device_handler/scsi_dh_rdac.c
··· 536 536 unsigned char cdb[MAX_COMMAND_SIZE]; 537 537 struct scsi_sense_hdr sshdr; 538 538 unsigned int data_size; 539 - u64 req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 539 + blk_opf_t req_flags = REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 540 540 REQ_FAILFAST_DRIVER; 541 541 542 542 spin_lock(&ctlr->ms_lock);
+4 -10
drivers/scsi/fnic/fnic_scsi.c
··· 1350 1350 return wq_work_done; 1351 1351 } 1352 1352 1353 - static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data, 1354 - bool reserved) 1353 + static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data) 1355 1354 { 1356 1355 const int tag = scsi_cmd_to_rq(sc)->tag; 1357 1356 struct fnic *fnic = data; ··· 1547 1548 int term_cnt; 1548 1549 }; 1549 1550 1550 - static bool fnic_rport_abort_io_iter(struct scsi_cmnd *sc, void *data, 1551 - bool reserved) 1551 + static bool fnic_rport_abort_io_iter(struct scsi_cmnd *sc, void *data) 1552 1552 { 1553 1553 struct fnic_rport_abort_io_iter_data *iter_data = data; 1554 1554 struct fnic *fnic = iter_data->fnic; ··· 2001 2003 int ret; 2002 2004 }; 2003 2005 2004 - static bool fnic_pending_aborts_iter(struct scsi_cmnd *sc, 2005 - void *data, bool reserved) 2006 + static bool fnic_pending_aborts_iter(struct scsi_cmnd *sc, void *data) 2006 2007 { 2007 2008 struct fnic_pending_aborts_iter_data *iter_data = data; 2008 2009 struct fnic *fnic = iter_data->fnic; ··· 2015 2018 enum fnic_ioreq_state old_ioreq_state; 2016 2019 2017 2020 if (sc == iter_data->lr_sc || sc->device != lun_dev) 2018 - return true; 2019 - if (reserved) 2020 2021 return true; 2021 2022 2022 2023 io_lock = fnic_io_lock_tag(fnic, abt_tag); ··· 2665 2670 2666 2671 } 2667 2672 2668 - static bool fnic_abts_pending_iter(struct scsi_cmnd *sc, void *data, 2669 - bool reserved) 2673 + static bool fnic_abts_pending_iter(struct scsi_cmnd *sc, void *data) 2670 2674 { 2671 2675 struct fnic_pending_aborts_iter_data *iter_data = data; 2672 2676 struct fnic *fnic = iter_data->fnic;
+6 -8
drivers/scsi/hosts.c
··· 566 566 } 567 567 EXPORT_SYMBOL(scsi_host_get); 568 568 569 - static bool scsi_host_check_in_flight(struct request *rq, void *data, 570 - bool reserved) 569 + static bool scsi_host_check_in_flight(struct request *rq, void *data) 571 570 { 572 571 int *count = data; 573 572 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq); ··· 661 662 } 662 663 EXPORT_SYMBOL_GPL(scsi_flush_work); 663 664 664 - static bool complete_all_cmds_iter(struct request *rq, void *data, bool rsvd) 665 + static bool complete_all_cmds_iter(struct request *rq, void *data) 665 666 { 666 667 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); 667 668 enum scsi_host_status status = *(enum scsi_host_status *)data; ··· 692 693 EXPORT_SYMBOL_GPL(scsi_host_complete_all_commands); 693 694 694 695 struct scsi_host_busy_iter_data { 695 - bool (*fn)(struct scsi_cmnd *, void *, bool); 696 + bool (*fn)(struct scsi_cmnd *, void *); 696 697 void *priv; 697 698 }; 698 699 699 - static bool __scsi_host_busy_iter_fn(struct request *req, void *priv, 700 - bool reserved) 700 + static bool __scsi_host_busy_iter_fn(struct request *req, void *priv) 701 701 { 702 702 struct scsi_host_busy_iter_data *iter_data = priv; 703 703 struct scsi_cmnd *sc = blk_mq_rq_to_pdu(req); 704 704 705 - return iter_data->fn(sc, iter_data->priv, reserved); 705 + return iter_data->fn(sc, iter_data->priv); 706 706 } 707 707 708 708 /** ··· 714 716 * ithas to be provided by the caller 715 717 **/ 716 718 void scsi_host_busy_iter(struct Scsi_Host *shost, 717 - bool (*fn)(struct scsi_cmnd *, void *, bool), 719 + bool (*fn)(struct scsi_cmnd *, void *), 718 720 void *priv) 719 721 { 720 722 struct scsi_host_busy_iter_data iter_data = {
+4 -12
drivers/scsi/mpi3mr/mpi3mr_os.c
··· 381 381 * mpi3mr_print_scmd - print individual SCSI command 382 382 * @rq: Block request 383 383 * @data: Adapter instance reference 384 - * @reserved: N/A. Currently not used 385 384 * 386 385 * Print the SCSI command details if it is in LLD scope. 387 386 * 388 387 * Return: true always. 389 388 */ 390 - static bool mpi3mr_print_scmd(struct request *rq, 391 - void *data, bool reserved) 389 + static bool mpi3mr_print_scmd(struct request *rq, void *data) 392 390 { 393 391 struct mpi3mr_ioc *mrioc = (struct mpi3mr_ioc *)data; 394 392 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); ··· 410 412 * mpi3mr_flush_scmd - Flush individual SCSI command 411 413 * @rq: Block request 412 414 * @data: Adapter instance reference 413 - * @reserved: N/A. Currently not used 414 415 * 415 416 * Return the SCSI command to the upper layers if it is in LLD 416 417 * scope. ··· 417 420 * Return: true always. 418 421 */ 419 422 420 - static bool mpi3mr_flush_scmd(struct request *rq, 421 - void *data, bool reserved) 423 + static bool mpi3mr_flush_scmd(struct request *rq, void *data) 422 424 { 423 425 struct mpi3mr_ioc *mrioc = (struct mpi3mr_ioc *)data; 424 426 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); ··· 447 451 * mpi3mr_count_dev_pending - Count commands pending for a lun 448 452 * @rq: Block request 449 453 * @data: SCSI device reference 450 - * @reserved: Unused 451 454 * 452 455 * This is an iterator function called for each SCSI command in 453 456 * a host and if the command is pending in the LLD for the ··· 456 461 * Return: true always. 457 462 */ 458 463 459 - static bool mpi3mr_count_dev_pending(struct request *rq, 460 - void *data, bool reserved) 464 + static bool mpi3mr_count_dev_pending(struct request *rq, void *data) 461 465 { 462 466 struct scsi_device *sdev = (struct scsi_device *)data; 463 467 struct mpi3mr_sdev_priv_data *sdev_priv_data = sdev->hostdata; ··· 479 485 * mpi3mr_count_tgt_pending - Count commands pending for target 480 486 * @rq: Block request 481 487 * @data: SCSI target reference 482 - * @reserved: Unused 483 488 * 484 489 * This is an iterator function called for each SCSI command in 485 490 * a host and if the command is pending in the LLD for the ··· 488 495 * Return: true always. 489 496 */ 490 497 491 - static bool mpi3mr_count_tgt_pending(struct request *rq, 492 - void *data, bool reserved) 498 + static bool mpi3mr_count_tgt_pending(struct request *rq, void *data) 493 499 { 494 500 struct scsi_target *starget = (struct scsi_target *)data; 495 501 struct mpi3mr_stgt_priv_data *stgt_priv_data = starget->hostdata;
+11 -11
drivers/scsi/scsi_error.c
··· 139 139 * 140 140 * Note: this function must be called only for a command that has timed out. 141 141 * Because the block layer marks a request as complete before it calls 142 - * scsi_times_out(), a .scsi_done() call from the LLD for a command that has 142 + * scsi_timeout(), a .scsi_done() call from the LLD for a command that has 143 143 * timed out do not have any effect. Hence it is safe to call 144 144 * scsi_finish_command() from this function. 145 145 */ ··· 316 316 } 317 317 318 318 /** 319 - * scsi_times_out - Timeout function for normal scsi commands. 319 + * scsi_timeout - Timeout function for normal scsi commands. 320 320 * @req: request that is timing out. 321 321 * 322 322 * Notes: ··· 325 325 * normal completion function determines that the timer has already 326 326 * fired, then it mustn't do anything. 327 327 */ 328 - enum blk_eh_timer_return scsi_times_out(struct request *req) 328 + enum blk_eh_timer_return scsi_timeout(struct request *req) 329 329 { 330 330 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); 331 331 enum blk_eh_timer_return rtn = BLK_EH_DONE; ··· 1779 1779 * scsi_noretry_cmd - determine if command should be failed fast 1780 1780 * @scmd: SCSI cmd to examine. 1781 1781 */ 1782 - int scsi_noretry_cmd(struct scsi_cmnd *scmd) 1782 + bool scsi_noretry_cmd(struct scsi_cmnd *scmd) 1783 1783 { 1784 1784 struct request *req = scsi_cmd_to_rq(scmd); 1785 1785 ··· 1789 1789 case DID_TIME_OUT: 1790 1790 goto check_type; 1791 1791 case DID_BUS_BUSY: 1792 - return req->cmd_flags & REQ_FAILFAST_TRANSPORT; 1792 + return !!(req->cmd_flags & REQ_FAILFAST_TRANSPORT); 1793 1793 case DID_PARITY: 1794 - return req->cmd_flags & REQ_FAILFAST_DEV; 1794 + return !!(req->cmd_flags & REQ_FAILFAST_DEV); 1795 1795 case DID_ERROR: 1796 1796 if (get_status_byte(scmd) == SAM_STAT_RESERVATION_CONFLICT) 1797 - return 0; 1797 + return false; 1798 1798 fallthrough; 1799 1799 case DID_SOFT_ERROR: 1800 - return req->cmd_flags & REQ_FAILFAST_DRIVER; 1800 + return !!(req->cmd_flags & REQ_FAILFAST_DRIVER); 1801 1801 } 1802 1802 1803 1803 if (!scsi_status_is_check_condition(scmd->result)) 1804 - return 0; 1804 + return false; 1805 1805 1806 1806 check_type: 1807 1807 /* ··· 1809 1809 * the check condition was retryable. 1810 1810 */ 1811 1811 if (req->cmd_flags & REQ_FAILFAST_DEV || blk_rq_is_passthrough(req)) 1812 - return 1; 1812 + return true; 1813 1813 1814 - return 0; 1814 + return false; 1815 1815 } 1816 1816 1817 1817 /**
+9 -17
drivers/scsi/scsi_lib.c
··· 163 163 * Requeue this command. It will go before all other commands 164 164 * that are already in the queue. Schedule requeue work under 165 165 * lock such that the kblockd_schedule_work() call happens 166 - * before blk_cleanup_queue() finishes. 166 + * before blk_mq_destroy_queue() finishes. 167 167 */ 168 168 cmd->result = 0; 169 169 ··· 209 209 int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, 210 210 int data_direction, void *buffer, unsigned bufflen, 211 211 unsigned char *sense, struct scsi_sense_hdr *sshdr, 212 - int timeout, int retries, u64 flags, req_flags_t rq_flags, 213 - int *resid) 212 + int timeout, int retries, blk_opf_t flags, 213 + req_flags_t rq_flags, int *resid) 214 214 { 215 215 struct request *req; 216 216 struct scsi_cmnd *scmd; ··· 424 424 * it and the queue. Mitigate by taking a reference to the 425 425 * queue and never touching the sdev again after we drop the 426 426 * host lock. Note: if __scsi_remove_device() invokes 427 - * blk_cleanup_queue() before the queue is run from this 427 + * blk_mq_destroy_queue() before the queue is run from this 428 428 * function then blk_run_queue() will return immediately since 429 - * blk_cleanup_queue() marks the queue with QUEUE_FLAG_DYING. 429 + * blk_mq_destroy_queue() marks the queue with QUEUE_FLAG_DYING. 430 430 */ 431 431 slq = sdev->request_queue; 432 432 if (!blk_get_queue(slq)) ··· 633 633 */ 634 634 static unsigned int scsi_rq_err_bytes(const struct request *rq) 635 635 { 636 - unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK; 636 + blk_opf_t ff = rq->cmd_flags & REQ_FAILFAST_MASK; 637 637 unsigned int bytes = 0; 638 638 struct bio *bio; 639 639 ··· 1125 1125 cmd->retries = 0; 1126 1126 } 1127 1127 1128 - struct request *scsi_alloc_request(struct request_queue *q, 1129 - unsigned int op, blk_mq_req_flags_t flags) 1128 + struct request *scsi_alloc_request(struct request_queue *q, blk_opf_t opf, 1129 + blk_mq_req_flags_t flags) 1130 1130 { 1131 1131 struct request *rq; 1132 1132 1133 - rq = blk_mq_alloc_request(q, op, flags); 1133 + rq = blk_mq_alloc_request(q, opf, flags); 1134 1134 if (!IS_ERR(rq)) 1135 1135 scsi_initialize_rq(rq); 1136 1136 return rq; ··· 1788 1788 break; 1789 1789 } 1790 1790 return ret; 1791 - } 1792 - 1793 - static enum blk_eh_timer_return scsi_timeout(struct request *req, 1794 - bool reserved) 1795 - { 1796 - if (reserved) 1797 - return BLK_EH_RESET_TIMER; 1798 - return scsi_times_out(req); 1799 1791 } 1800 1792 1801 1793 static int scsi_mq_init_request(struct blk_mq_tag_set *set, struct request *rq,
+2 -2
drivers/scsi/scsi_priv.h
··· 72 72 73 73 /* scsi_error.c */ 74 74 extern void scmd_eh_abort_handler(struct work_struct *work); 75 - extern enum blk_eh_timer_return scsi_times_out(struct request *req); 75 + extern enum blk_eh_timer_return scsi_timeout(struct request *req); 76 76 extern int scsi_error_handler(void *host); 77 77 extern enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *cmd); 78 78 extern void scsi_eh_wakeup(struct Scsi_Host *shost); ··· 82 82 struct list_head *done_q); 83 83 int scsi_eh_get_sense(struct list_head *work_q, 84 84 struct list_head *done_q); 85 - int scsi_noretry_cmd(struct scsi_cmnd *scmd); 85 + bool scsi_noretry_cmd(struct scsi_cmnd *scmd); 86 86 void scsi_eh_done(struct scsi_cmnd *scmd); 87 87 88 88 /* scsi_lib.c */
+1 -1
drivers/scsi/scsi_sysfs.c
··· 1475 1475 scsi_device_set_state(sdev, SDEV_DEL); 1476 1476 mutex_unlock(&sdev->state_mutex); 1477 1477 1478 - blk_cleanup_queue(sdev->request_queue); 1478 + blk_mq_destroy_queue(sdev->request_queue); 1479 1479 cancel_work_sync(&sdev->requeue_work); 1480 1480 1481 1481 if (sdev->host->hostt->slave_destroy)
+5 -5
drivers/scsi/sd.c
··· 2934 2934 2935 2935 if (sdkp->device->type == TYPE_ZBC) { 2936 2936 /* Host-managed */ 2937 - blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HM); 2937 + disk_set_zoned(sdkp->disk, BLK_ZONED_HM); 2938 2938 } else { 2939 2939 sdkp->zoned = zoned; 2940 2940 if (sdkp->zoned == 1) { 2941 2941 /* Host-aware */ 2942 - blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HA); 2942 + disk_set_zoned(sdkp->disk, BLK_ZONED_HA); 2943 2943 } else { 2944 2944 /* Regular disk or drive managed disk */ 2945 - blk_queue_set_zoned(sdkp->disk, BLK_ZONED_NONE); 2945 + disk_set_zoned(sdkp->disk, BLK_ZONED_NONE); 2946 2946 } 2947 2947 } 2948 2948 ··· 3440 3440 if (!sdkp) 3441 3441 goto out; 3442 3442 3443 - gd = __alloc_disk_node(sdp->request_queue, NUMA_NO_NODE, 3444 - &sd_bio_compl_lkclass); 3443 + gd = blk_mq_alloc_disk_for_queue(sdp->request_queue, 3444 + &sd_bio_compl_lkclass); 3445 3445 if (!gd) 3446 3446 goto out_free; 3447 3447
+6 -6
drivers/scsi/sd_zbc.c
··· 529 529 struct request *rq = scsi_cmd_to_rq(cmd); 530 530 struct scsi_disk *sdkp = scsi_disk(rq->q->disk); 531 531 unsigned int zno = blk_rq_zone_no(rq); 532 - enum req_opf op = req_op(rq); 532 + enum req_op op = req_op(rq); 533 533 unsigned long flags; 534 534 535 535 /* ··· 855 855 856 856 if (sdkp->zone_info.zone_blocks == zone_blocks && 857 857 sdkp->zone_info.nr_zones == nr_zones && 858 - disk->queue->nr_zones == nr_zones) 858 + disk->nr_zones == nr_zones) 859 859 goto unlock; 860 860 861 861 flags = memalloc_noio_save(); ··· 929 929 /* 930 930 * This can happen for a host aware disk with partitions. 931 931 * The block device zone model was already cleared by 932 - * blk_queue_set_zoned(). Only free the scsi disk zone 932 + * disk_set_zoned(). Only free the scsi disk zone 933 933 * information and exit early. 934 934 */ 935 935 sd_zbc_free_zone_info(sdkp); ··· 950 950 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); 951 951 blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE); 952 952 if (sdkp->zones_max_open == U32_MAX) 953 - blk_queue_max_open_zones(q, 0); 953 + disk_set_max_open_zones(disk, 0); 954 954 else 955 - blk_queue_max_open_zones(q, sdkp->zones_max_open); 956 - blk_queue_max_active_zones(q, 0); 955 + disk_set_max_open_zones(disk, sdkp->zones_max_open); 956 + disk_set_max_active_zones(disk, 0); 957 957 nr_zones = round_up(sdkp->capacity, zone_blocks) >> ilog2(zone_blocks); 958 958 959 959 /*
+2 -2
drivers/scsi/sr.c
··· 624 624 if (!cd) 625 625 goto fail; 626 626 627 - disk = __alloc_disk_node(sdev->request_queue, NUMA_NO_NODE, 628 - &sr_bio_compl_lkclass); 627 + disk = blk_mq_alloc_disk_for_queue(sdev->request_queue, 628 + &sr_bio_compl_lkclass); 629 629 if (!disk) 630 630 goto fail_free; 631 631 mutex_init(&cd->lock);
+2 -2
drivers/target/target_core_iblock.c
··· 343 343 } 344 344 345 345 static struct bio *iblock_get_bio(struct se_cmd *cmd, sector_t lba, u32 sg_num, 346 - unsigned int opf) 346 + blk_opf_t opf) 347 347 { 348 348 struct iblock_dev *ib_dev = IBLOCK_DEV(cmd->se_dev); 349 349 struct bio *bio; ··· 723 723 struct bio_list list; 724 724 struct scatterlist *sg; 725 725 u32 sg_num = sgl_nents; 726 - unsigned int opf; 726 + blk_opf_t opf; 727 727 unsigned bio_cnt; 728 728 int i, rc; 729 729 struct sg_mapping_iter prot_miter;
+2 -2
drivers/ufs/core/ufshcd.c
··· 9509 9509 ufs_bsg_remove(hba); 9510 9510 ufshpb_remove(hba); 9511 9511 ufs_sysfs_remove_nodes(hba->dev); 9512 - blk_cleanup_queue(hba->tmf_queue); 9512 + blk_mq_destroy_queue(hba->tmf_queue); 9513 9513 blk_mq_free_tag_set(&hba->tmf_tag_set); 9514 9514 scsi_remove_host(hba->host); 9515 9515 /* disable interrupts */ ··· 9805 9805 return 0; 9806 9806 9807 9807 free_tmf_queue: 9808 - blk_cleanup_queue(hba->tmf_queue); 9808 + blk_mq_destroy_queue(hba->tmf_queue); 9809 9809 free_tmf_tag_set: 9810 9810 blk_mq_free_tag_set(&hba->tmf_tag_set); 9811 9811 out_remove_scsi_host:
+3 -4
drivers/ufs/core/ufshpb.c
··· 433 433 return 0; 434 434 } 435 435 436 - static struct ufshpb_req *ufshpb_get_req(struct ufshpb_lu *hpb, 437 - int rgn_idx, enum req_opf dir, 438 - bool atomic) 436 + static struct ufshpb_req *ufshpb_get_req(struct ufshpb_lu *hpb, int rgn_idx, 437 + enum req_op op, bool atomic) 439 438 { 440 439 struct ufshpb_req *rq; 441 440 struct request *req; ··· 445 446 return NULL; 446 447 447 448 retry: 448 - req = blk_mq_alloc_request(hpb->sdev_ufs_lu->request_queue, dir, 449 + req = blk_mq_alloc_request(hpb->sdev_ufs_lu->request_queue, op, 449 450 BLK_MQ_REQ_NOWAIT); 450 451 451 452 if (!atomic && (PTR_ERR(req) == -EWOULDBLOCK) && (--retries > 0)) {
+2 -2
fs/btrfs/check-integrity.c
··· 152 152 struct btrfsic_block *next_in_same_bio; 153 153 void *orig_bio_private; 154 154 bio_end_io_t *orig_bio_end_io; 155 - int submit_bio_bh_rw; 155 + blk_opf_t submit_bio_bh_rw; 156 156 u64 flush_gen; /* only valid if !never_written */ 157 157 }; 158 158 ··· 1681 1681 u64 dev_bytenr, char **mapped_datav, 1682 1682 unsigned int num_pages, 1683 1683 struct bio *bio, int *bio_is_patched, 1684 - int submit_bio_bh_rw) 1684 + blk_opf_t submit_bio_bh_rw) 1685 1685 { 1686 1686 int is_metadata; 1687 1687 struct btrfsic_block *block;
+3 -3
fs/btrfs/compression.c
··· 455 455 456 456 457 457 static struct bio *alloc_compressed_bio(struct compressed_bio *cb, u64 disk_bytenr, 458 - unsigned int opf, bio_end_io_t endio_func, 458 + blk_opf_t opf, bio_end_io_t endio_func, 459 459 u64 *next_stripe_start) 460 460 { 461 461 struct btrfs_fs_info *fs_info = btrfs_sb(cb->inode->i_sb); ··· 505 505 unsigned int compressed_len, 506 506 struct page **compressed_pages, 507 507 unsigned int nr_pages, 508 - unsigned int write_flags, 508 + blk_opf_t write_flags, 509 509 struct cgroup_subsys_state *blkcg_css, 510 510 bool writeback) 511 511 { ··· 517 517 blk_status_t ret; 518 518 int skip_sum = inode->flags & BTRFS_INODE_NODATASUM; 519 519 const bool use_append = btrfs_use_zone_append(inode, disk_start); 520 - const unsigned int bio_op = use_append ? REQ_OP_ZONE_APPEND : REQ_OP_WRITE; 520 + const enum req_op bio_op = use_append ? REQ_OP_ZONE_APPEND : REQ_OP_WRITE; 521 521 522 522 ASSERT(IS_ALIGNED(start, fs_info->sectorsize) && 523 523 IS_ALIGNED(len, fs_info->sectorsize));
+1 -1
fs/btrfs/compression.h
··· 99 99 unsigned int compressed_len, 100 100 struct page **compressed_pages, 101 101 unsigned int nr_pages, 102 - unsigned int write_flags, 102 + blk_opf_t write_flags, 103 103 struct cgroup_subsys_state *blkcg_css, 104 104 bool writeback); 105 105 void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
+9 -9
fs/btrfs/extent_io.c
··· 3359 3359 static int alloc_new_bio(struct btrfs_inode *inode, 3360 3360 struct btrfs_bio_ctrl *bio_ctrl, 3361 3361 struct writeback_control *wbc, 3362 - unsigned int opf, 3362 + blk_opf_t opf, 3363 3363 bio_end_io_t end_io_func, 3364 3364 u64 disk_bytenr, u32 offset, u64 file_offset, 3365 3365 enum btrfs_compression_type compress_type) ··· 3439 3439 * @prev_bio_flags: flags of previous bio to see if we can merge the current one 3440 3440 * @compress_type: compress type for current bio 3441 3441 */ 3442 - static int submit_extent_page(unsigned int opf, 3442 + static int submit_extent_page(blk_opf_t opf, 3443 3443 struct writeback_control *wbc, 3444 3444 struct btrfs_bio_ctrl *bio_ctrl, 3445 3445 struct page *page, u64 disk_bytenr, ··· 3617 3617 */ 3618 3618 static int btrfs_do_readpage(struct page *page, struct extent_map **em_cached, 3619 3619 struct btrfs_bio_ctrl *bio_ctrl, 3620 - unsigned int read_flags, u64 *prev_em_start) 3620 + blk_opf_t read_flags, u64 *prev_em_start) 3621 3621 { 3622 3622 struct inode *inode = page->mapping->host; 3623 3623 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); ··· 3985 3985 int saved_ret = 0; 3986 3986 int ret = 0; 3987 3987 int nr = 0; 3988 - u32 opf = REQ_OP_WRITE; 3989 - const unsigned int write_flags = wbc_to_write_flags(wbc); 3988 + enum req_op op = REQ_OP_WRITE; 3989 + const blk_opf_t write_flags = wbc_to_write_flags(wbc); 3990 3990 bool has_error = false; 3991 3991 bool compressed; 3992 3992 ··· 4060 4060 iosize = min(min(em_end, end + 1), dirty_range_end) - cur; 4061 4061 4062 4062 if (btrfs_use_zone_append(inode, em->block_start)) 4063 - opf = REQ_OP_ZONE_APPEND; 4063 + op = REQ_OP_ZONE_APPEND; 4064 4064 4065 4065 free_extent_map(em); 4066 4066 em = NULL; ··· 4096 4096 */ 4097 4097 btrfs_page_clear_dirty(fs_info, page, cur, iosize); 4098 4098 4099 - ret = submit_extent_page(opf | write_flags, wbc, 4099 + ret = submit_extent_page(op | write_flags, wbc, 4100 4100 &epd->bio_ctrl, page, 4101 4101 disk_bytenr, iosize, 4102 4102 cur - page_offset(page), ··· 4577 4577 { 4578 4578 struct btrfs_fs_info *fs_info = eb->fs_info; 4579 4579 struct page *page = eb->pages[0]; 4580 - unsigned int write_flags = wbc_to_write_flags(wbc) | REQ_META; 4580 + blk_opf_t write_flags = wbc_to_write_flags(wbc) | REQ_META; 4581 4581 bool no_dirty_ebs = false; 4582 4582 int ret; 4583 4583 ··· 4622 4622 { 4623 4623 u64 disk_bytenr = eb->start; 4624 4624 int i, num_pages; 4625 - unsigned int write_flags = wbc_to_write_flags(wbc) | REQ_META; 4625 + blk_opf_t write_flags = wbc_to_write_flags(wbc) | REQ_META; 4626 4626 int ret = 0; 4627 4627 4628 4628 prepare_eb_write(eb);
+2 -2
fs/btrfs/inode.c
··· 485 485 struct page *locked_page; 486 486 u64 start; 487 487 u64 end; 488 - unsigned int write_flags; 488 + blk_opf_t write_flags; 489 489 struct list_head extents; 490 490 struct cgroup_subsys_state *blkcg_css; 491 491 struct btrfs_work work; ··· 1435 1435 int i; 1436 1436 bool should_compress; 1437 1437 unsigned nofs_flag; 1438 - const unsigned int write_flags = wbc_to_write_flags(wbc); 1438 + const blk_opf_t write_flags = wbc_to_write_flags(wbc); 1439 1439 1440 1440 unlock_extent(&inode->io_tree, start, end); 1441 1441
+2 -2
fs/btrfs/raid56.c
··· 1136 1136 unsigned int stripe_nr, 1137 1137 unsigned int sector_nr, 1138 1138 unsigned long bio_max_len, 1139 - unsigned int opf) 1139 + enum req_op op) 1140 1140 { 1141 1141 const u32 sectorsize = rbio->bioc->fs_info->sectorsize; 1142 1142 struct bio *last = bio_list->tail; ··· 1181 1181 1182 1182 /* put a new bio on the list */ 1183 1183 bio = bio_alloc(stripe->dev->bdev, max(bio_max_len >> PAGE_SHIFT, 1UL), 1184 - opf, GFP_NOFS); 1184 + op, GFP_NOFS); 1185 1185 bio->bi_iter.bi_sector = disk_start >> 9; 1186 1186 bio->bi_private = rbio; 1187 1187
+31 -30
fs/buffer.c
··· 52 52 #include "internal.h" 53 53 54 54 static int fsync_buffers_list(spinlock_t *lock, struct list_head *list); 55 - static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, 55 + static int submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh, 56 56 struct writeback_control *wbc); 57 57 58 58 #define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers) ··· 562 562 struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize); 563 563 if (bh) { 564 564 if (buffer_dirty(bh)) 565 - ll_rw_block(REQ_OP_WRITE, 0, 1, &bh); 565 + ll_rw_block(REQ_OP_WRITE, 1, &bh); 566 566 put_bh(bh); 567 567 } 568 568 } ··· 1174 1174 } else { 1175 1175 get_bh(bh); 1176 1176 bh->b_end_io = end_buffer_read_sync; 1177 - submit_bh(REQ_OP_READ, 0, bh); 1177 + submit_bh(REQ_OP_READ, bh); 1178 1178 wait_on_buffer(bh); 1179 1179 if (buffer_uptodate(bh)) 1180 1180 return bh; ··· 1342 1342 { 1343 1343 struct buffer_head *bh = __getblk(bdev, block, size); 1344 1344 if (likely(bh)) { 1345 - ll_rw_block(REQ_OP_READ, REQ_RAHEAD, 1, &bh); 1345 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD, 1, &bh); 1346 1346 brelse(bh); 1347 1347 } 1348 1348 } ··· 1353 1353 { 1354 1354 struct buffer_head *bh = __getblk_gfp(bdev, block, size, gfp); 1355 1355 if (likely(bh)) { 1356 - ll_rw_block(REQ_OP_READ, REQ_RAHEAD, 1, &bh); 1356 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD, 1, &bh); 1357 1357 brelse(bh); 1358 1358 } 1359 1359 } ··· 1716 1716 struct buffer_head *bh, *head; 1717 1717 unsigned int blocksize, bbits; 1718 1718 int nr_underway = 0; 1719 - int write_flags = wbc_to_write_flags(wbc); 1719 + blk_opf_t write_flags = wbc_to_write_flags(wbc); 1720 1720 1721 1721 head = create_page_buffers(page, inode, 1722 1722 (1 << BH_Dirty)|(1 << BH_Uptodate)); ··· 1804 1804 do { 1805 1805 struct buffer_head *next = bh->b_this_page; 1806 1806 if (buffer_async_write(bh)) { 1807 - submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, wbc); 1807 + submit_bh_wbc(REQ_OP_WRITE | write_flags, bh, wbc); 1808 1808 nr_underway++; 1809 1809 } 1810 1810 bh = next; ··· 1858 1858 struct buffer_head *next = bh->b_this_page; 1859 1859 if (buffer_async_write(bh)) { 1860 1860 clear_buffer_dirty(bh); 1861 - submit_bh_wbc(REQ_OP_WRITE, write_flags, bh, wbc); 1861 + submit_bh_wbc(REQ_OP_WRITE | write_flags, bh, wbc); 1862 1862 nr_underway++; 1863 1863 } 1864 1864 bh = next; ··· 2033 2033 if (!buffer_uptodate(bh) && !buffer_delay(bh) && 2034 2034 !buffer_unwritten(bh) && 2035 2035 (block_start < from || block_end > to)) { 2036 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 2036 + ll_rw_block(REQ_OP_READ, 1, &bh); 2037 2037 *wait_bh++=bh; 2038 2038 } 2039 2039 } ··· 2334 2334 if (buffer_uptodate(bh)) 2335 2335 end_buffer_async_read(bh, 1); 2336 2336 else 2337 - submit_bh(REQ_OP_READ, 0, bh); 2337 + submit_bh(REQ_OP_READ, bh); 2338 2338 } 2339 2339 return 0; 2340 2340 } ··· 2665 2665 if (block_start < from || block_end > to) { 2666 2666 lock_buffer(bh); 2667 2667 bh->b_end_io = end_buffer_read_nobh; 2668 - submit_bh(REQ_OP_READ, 0, bh); 2668 + submit_bh(REQ_OP_READ, bh); 2669 2669 nr_reads++; 2670 2670 } 2671 2671 } ··· 2915 2915 2916 2916 if (!buffer_uptodate(bh) && !buffer_delay(bh) && !buffer_unwritten(bh)) { 2917 2917 err = -EIO; 2918 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 2918 + ll_rw_block(REQ_OP_READ, 1, &bh); 2919 2919 wait_on_buffer(bh); 2920 2920 /* Uhhuh. Read error. Complain and punt. */ 2921 2921 if (!buffer_uptodate(bh)) ··· 2994 2994 bio_put(bio); 2995 2995 } 2996 2996 2997 - static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, 2997 + static int submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh, 2998 2998 struct writeback_control *wbc) 2999 2999 { 3000 + const enum req_op op = opf & REQ_OP_MASK; 3000 3001 struct bio *bio; 3001 3002 3002 3003 BUG_ON(!buffer_locked(bh)); ··· 3013 3012 clear_buffer_write_io_error(bh); 3014 3013 3015 3014 if (buffer_meta(bh)) 3016 - op_flags |= REQ_META; 3015 + opf |= REQ_META; 3017 3016 if (buffer_prio(bh)) 3018 - op_flags |= REQ_PRIO; 3017 + opf |= REQ_PRIO; 3019 3018 3020 - bio = bio_alloc(bh->b_bdev, 1, op | op_flags, GFP_NOIO); 3019 + bio = bio_alloc(bh->b_bdev, 1, opf, GFP_NOIO); 3021 3020 3022 3021 fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO); 3023 3022 ··· 3041 3040 return 0; 3042 3041 } 3043 3042 3044 - int submit_bh(int op, int op_flags, struct buffer_head *bh) 3043 + int submit_bh(blk_opf_t opf, struct buffer_head *bh) 3045 3044 { 3046 - return submit_bh_wbc(op, op_flags, bh, NULL); 3045 + return submit_bh_wbc(opf, bh, NULL); 3047 3046 } 3048 3047 EXPORT_SYMBOL(submit_bh); 3049 3048 3050 3049 /** 3051 3050 * ll_rw_block: low-level access to block devices (DEPRECATED) 3052 - * @op: whether to %READ or %WRITE 3053 - * @op_flags: req_flag_bits 3051 + * @opf: block layer request operation and flags. 3054 3052 * @nr: number of &struct buffer_heads in the array 3055 3053 * @bhs: array of pointers to &struct buffer_head 3056 3054 * 3057 3055 * ll_rw_block() takes an array of pointers to &struct buffer_heads, and 3058 3056 * requests an I/O operation on them, either a %REQ_OP_READ or a %REQ_OP_WRITE. 3059 - * @op_flags contains flags modifying the detailed I/O behavior, most notably 3057 + * @opf contains flags modifying the detailed I/O behavior, most notably 3060 3058 * %REQ_RAHEAD. 3061 3059 * 3062 3060 * This function drops any buffer that it cannot get a lock on (with the ··· 3072 3072 * All of the buffers must be for the same device, and must also be a 3073 3073 * multiple of the current approved size for the device. 3074 3074 */ 3075 - void ll_rw_block(int op, int op_flags, int nr, struct buffer_head *bhs[]) 3075 + void ll_rw_block(const blk_opf_t opf, int nr, struct buffer_head *bhs[]) 3076 3076 { 3077 + const enum req_op op = opf & REQ_OP_MASK; 3077 3078 int i; 3078 3079 3079 3080 for (i = 0; i < nr; i++) { ··· 3082 3081 3083 3082 if (!trylock_buffer(bh)) 3084 3083 continue; 3085 - if (op == WRITE) { 3084 + if (op == REQ_OP_WRITE) { 3086 3085 if (test_clear_buffer_dirty(bh)) { 3087 3086 bh->b_end_io = end_buffer_write_sync; 3088 3087 get_bh(bh); 3089 - submit_bh(op, op_flags, bh); 3088 + submit_bh(opf, bh); 3090 3089 continue; 3091 3090 } 3092 3091 } else { 3093 3092 if (!buffer_uptodate(bh)) { 3094 3093 bh->b_end_io = end_buffer_read_sync; 3095 3094 get_bh(bh); 3096 - submit_bh(op, op_flags, bh); 3095 + submit_bh(opf, bh); 3097 3096 continue; 3098 3097 } 3099 3098 } ··· 3102 3101 } 3103 3102 EXPORT_SYMBOL(ll_rw_block); 3104 3103 3105 - void write_dirty_buffer(struct buffer_head *bh, int op_flags) 3104 + void write_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags) 3106 3105 { 3107 3106 lock_buffer(bh); 3108 3107 if (!test_clear_buffer_dirty(bh)) { ··· 3111 3110 } 3112 3111 bh->b_end_io = end_buffer_write_sync; 3113 3112 get_bh(bh); 3114 - submit_bh(REQ_OP_WRITE, op_flags, bh); 3113 + submit_bh(REQ_OP_WRITE | op_flags, bh); 3115 3114 } 3116 3115 EXPORT_SYMBOL(write_dirty_buffer); 3117 3116 ··· 3120 3119 * and then start new I/O and then wait upon it. The caller must have a ref on 3121 3120 * the buffer_head. 3122 3121 */ 3123 - int __sync_dirty_buffer(struct buffer_head *bh, int op_flags) 3122 + int __sync_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags) 3124 3123 { 3125 3124 int ret = 0; 3126 3125 ··· 3138 3137 3139 3138 get_bh(bh); 3140 3139 bh->b_end_io = end_buffer_write_sync; 3141 - ret = submit_bh(REQ_OP_WRITE, op_flags, bh); 3140 + ret = submit_bh(REQ_OP_WRITE | op_flags, bh); 3142 3141 wait_on_buffer(bh); 3143 3142 if (!ret && !buffer_uptodate(bh)) 3144 3143 ret = -EIO; ··· 3366 3365 3367 3366 get_bh(bh); 3368 3367 bh->b_end_io = end_buffer_read_sync; 3369 - submit_bh(REQ_OP_READ, 0, bh); 3368 + submit_bh(REQ_OP_READ, bh); 3370 3369 wait_on_buffer(bh); 3371 3370 if (buffer_uptodate(bh)) 3372 3371 return 0;
+23 -17
fs/direct-io.c
··· 117 117 /* dio_state communicated between submission path and end_io */ 118 118 struct dio { 119 119 int flags; /* doesn't change */ 120 - int op; 121 - int op_flags; 120 + blk_opf_t opf; /* request operation type and flags */ 122 121 struct gendisk *bio_disk; 123 122 struct inode *inode; 124 123 loff_t i_size; /* i_size when submitted */ ··· 166 167 */ 167 168 static inline int dio_refill_pages(struct dio *dio, struct dio_submit *sdio) 168 169 { 170 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 169 171 ssize_t ret; 170 172 171 173 ret = iov_iter_get_pages(sdio->iter, dio->pages, LONG_MAX, DIO_PAGES, 172 174 &sdio->from); 173 175 174 - if (ret < 0 && sdio->blocks_available && (dio->op == REQ_OP_WRITE)) { 176 + if (ret < 0 && sdio->blocks_available && dio_op == REQ_OP_WRITE) { 175 177 struct page *page = ZERO_PAGE(0); 176 178 /* 177 179 * A memory fault, but the filesystem has some outstanding ··· 234 234 */ 235 235 static ssize_t dio_complete(struct dio *dio, ssize_t ret, unsigned int flags) 236 236 { 237 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 237 238 loff_t offset = dio->iocb->ki_pos; 238 239 ssize_t transferred = 0; 239 240 int err; ··· 252 251 transferred = dio->result; 253 252 254 253 /* Check for short read case */ 255 - if ((dio->op == REQ_OP_READ) && 254 + if (dio_op == REQ_OP_READ && 256 255 ((offset + transferred) > dio->i_size)) 257 256 transferred = dio->i_size - offset; 258 257 /* ignore EFAULT if some IO has been done */ ··· 287 286 * zeros from unwritten extents. 288 287 */ 289 288 if (flags & DIO_COMPLETE_INVALIDATE && 290 - ret > 0 && dio->op == REQ_OP_WRITE && 289 + ret > 0 && dio_op == REQ_OP_WRITE && 291 290 dio->inode->i_mapping->nrpages) { 292 291 err = invalidate_inode_pages2_range(dio->inode->i_mapping, 293 292 offset >> PAGE_SHIFT, ··· 306 305 */ 307 306 dio->iocb->ki_pos += transferred; 308 307 309 - if (ret > 0 && dio->op == REQ_OP_WRITE) 308 + if (ret > 0 && dio_op == REQ_OP_WRITE) 310 309 ret = generic_write_sync(dio->iocb, ret); 311 310 dio->iocb->ki_complete(dio->iocb, ret); 312 311 } ··· 330 329 static void dio_bio_end_aio(struct bio *bio) 331 330 { 332 331 struct dio *dio = bio->bi_private; 332 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 333 333 unsigned long remaining; 334 334 unsigned long flags; 335 335 bool defer_completion = false; ··· 355 353 */ 356 354 if (dio->result) 357 355 defer_completion = dio->defer_completion || 358 - (dio->op == REQ_OP_WRITE && 356 + (dio_op == REQ_OP_WRITE && 359 357 dio->inode->i_mapping->nrpages); 360 358 if (defer_completion) { 361 359 INIT_WORK(&dio->complete_work, dio_aio_complete_work); ··· 398 396 * bio_alloc() is guaranteed to return a bio when allowed to sleep and 399 397 * we request a valid number of vectors. 400 398 */ 401 - bio = bio_alloc(bdev, nr_vecs, dio->op | dio->op_flags, GFP_KERNEL); 399 + bio = bio_alloc(bdev, nr_vecs, dio->opf, GFP_KERNEL); 402 400 bio->bi_iter.bi_sector = first_sector; 403 401 if (dio->is_async) 404 402 bio->bi_end_io = dio_bio_end_aio; ··· 417 415 */ 418 416 static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio) 419 417 { 418 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 420 419 struct bio *bio = sdio->bio; 421 420 unsigned long flags; 422 421 ··· 429 426 dio->refcount++; 430 427 spin_unlock_irqrestore(&dio->bio_lock, flags); 431 428 432 - if (dio->is_async && dio->op == REQ_OP_READ && dio->should_dirty) 429 + if (dio->is_async && dio_op == REQ_OP_READ && dio->should_dirty) 433 430 bio_set_pages_dirty(bio); 434 431 435 432 dio->bio_disk = bio->bi_bdev->bd_disk; ··· 495 492 static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio) 496 493 { 497 494 blk_status_t err = bio->bi_status; 498 - bool should_dirty = dio->op == REQ_OP_READ && dio->should_dirty; 495 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 496 + bool should_dirty = dio_op == REQ_OP_READ && dio->should_dirty; 499 497 500 498 if (err) { 501 499 if (err == BLK_STS_AGAIN && (bio->bi_opf & REQ_NOWAIT)) ··· 623 619 static int get_more_blocks(struct dio *dio, struct dio_submit *sdio, 624 620 struct buffer_head *map_bh) 625 621 { 622 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 626 623 int ret; 627 624 sector_t fs_startblk; /* Into file, in filesystem-sized blocks */ 628 625 sector_t fs_endblk; /* Into file, in filesystem-sized blocks */ ··· 658 653 * which may decide to handle it or also return an unmapped 659 654 * buffer head. 660 655 */ 661 - create = dio->op == REQ_OP_WRITE; 656 + create = dio_op == REQ_OP_WRITE; 662 657 if (dio->flags & DIO_SKIP_HOLES) { 663 658 i_size = i_size_read(dio->inode); 664 659 if (i_size && fs_startblk <= (i_size - 1) >> i_blkbits) ··· 806 801 unsigned offset, unsigned len, sector_t blocknr, 807 802 struct buffer_head *map_bh) 808 803 { 804 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 809 805 int ret = 0; 810 806 int boundary = sdio->boundary; /* dio_send_cur_page may clear it */ 811 807 812 - if (dio->op == REQ_OP_WRITE) { 808 + if (dio_op == REQ_OP_WRITE) { 813 809 /* 814 810 * Read accounting is performed in submit_bio() 815 811 */ ··· 923 917 static int do_direct_IO(struct dio *dio, struct dio_submit *sdio, 924 918 struct buffer_head *map_bh) 925 919 { 920 + const enum req_op dio_op = dio->opf & REQ_OP_MASK; 926 921 const unsigned blkbits = sdio->blkbits; 927 922 const unsigned i_blkbits = blkbits + sdio->blkfactor; 928 923 int ret = 0; ··· 999 992 loff_t i_size_aligned; 1000 993 1001 994 /* AKPM: eargh, -ENOTBLK is a hack */ 1002 - if (dio->op == REQ_OP_WRITE) { 995 + if (dio_op == REQ_OP_WRITE) { 1003 996 put_page(page); 1004 997 return -ENOTBLK; 1005 998 } ··· 1203 1196 1204 1197 dio->inode = inode; 1205 1198 if (iov_iter_rw(iter) == WRITE) { 1206 - dio->op = REQ_OP_WRITE; 1207 - dio->op_flags = REQ_SYNC | REQ_IDLE; 1199 + dio->opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE; 1208 1200 if (iocb->ki_flags & IOCB_NOWAIT) 1209 - dio->op_flags |= REQ_NOWAIT; 1201 + dio->opf |= REQ_NOWAIT; 1210 1202 } else { 1211 - dio->op = REQ_OP_READ; 1203 + dio->opf = REQ_OP_READ; 1212 1204 } 1213 1205 1214 1206 /*
+4 -4
fs/ext4/ext4.h
··· 3058 3058 3059 3059 /* super.c */ 3060 3060 extern struct buffer_head *ext4_sb_bread(struct super_block *sb, 3061 - sector_t block, int op_flags); 3061 + sector_t block, blk_opf_t op_flags); 3062 3062 extern struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb, 3063 3063 sector_t block); 3064 - extern void ext4_read_bh_nowait(struct buffer_head *bh, int op_flags, 3064 + extern void ext4_read_bh_nowait(struct buffer_head *bh, blk_opf_t op_flags, 3065 3065 bh_end_io_t *end_io); 3066 - extern int ext4_read_bh(struct buffer_head *bh, int op_flags, 3066 + extern int ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, 3067 3067 bh_end_io_t *end_io); 3068 - extern int ext4_read_bh_lock(struct buffer_head *bh, int op_flags, bool wait); 3068 + extern int ext4_read_bh_lock(struct buffer_head *bh, blk_opf_t op_flags, bool wait); 3069 3069 extern void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block); 3070 3070 extern int ext4_seq_options_show(struct seq_file *seq, void *offset); 3071 3071 extern int ext4_calculate_overhead(struct super_block *sb);
+2 -2
fs/ext4/fast_commit.c
··· 658 658 659 659 static void ext4_fc_submit_bh(struct super_block *sb, bool is_tail) 660 660 { 661 - int write_flags = REQ_SYNC; 661 + blk_opf_t write_flags = REQ_SYNC; 662 662 struct buffer_head *bh = EXT4_SB(sb)->s_fc_bh; 663 663 664 664 /* Add REQ_FUA | REQ_PREFLUSH only its tail */ ··· 668 668 set_buffer_dirty(bh); 669 669 set_buffer_uptodate(bh); 670 670 bh->b_end_io = ext4_end_buffer_io_sync; 671 - submit_bh(REQ_OP_WRITE, write_flags, bh); 671 + submit_bh(REQ_OP_WRITE | write_flags, bh); 672 672 EXT4_SB(sb)->s_fc_bh = NULL; 673 673 } 674 674
+6 -5
fs/ext4/mmp.c
··· 52 52 lock_buffer(bh); 53 53 bh->b_end_io = end_buffer_write_sync; 54 54 get_bh(bh); 55 - submit_bh(REQ_OP_WRITE, REQ_SYNC | REQ_META | REQ_PRIO, bh); 55 + submit_bh(REQ_OP_WRITE | REQ_SYNC | REQ_META | REQ_PRIO, bh); 56 56 wait_on_buffer(bh); 57 57 sb_end_write(sb); 58 58 if (unlikely(!buffer_uptodate(bh))) ··· 150 150 mmp_check_interval = max(EXT4_MMP_CHECK_MULT * mmp_update_interval, 151 151 EXT4_MMP_MIN_CHECK_INTERVAL); 152 152 mmp->mmp_check_interval = cpu_to_le16(mmp_check_interval); 153 - BUILD_BUG_ON(sizeof(mmp->mmp_bdevname) < BDEVNAME_SIZE); 154 - bdevname(bh->b_bdev, mmp->mmp_bdevname); 155 153 156 154 memcpy(mmp->mmp_nodename, init_utsname()->nodename, 157 155 sizeof(mmp->mmp_nodename)); ··· 370 372 371 373 EXT4_SB(sb)->s_mmp_bh = bh; 372 374 375 + BUILD_BUG_ON(sizeof(mmp->mmp_bdevname) < BDEVNAME_SIZE); 376 + snprintf(mmp->mmp_bdevname, sizeof(mmp->mmp_bdevname), 377 + "%pg", bh->b_bdev); 378 + 373 379 /* 374 380 * Start a kernel thread to update the MMP block periodically. 375 381 */ 376 382 EXT4_SB(sb)->s_mmp_tsk = kthread_run(kmmpd, sb, "kmmpd-%.*s", 377 383 (int)sizeof(mmp->mmp_bdevname), 378 - bdevname(bh->b_bdev, 379 - mmp->mmp_bdevname)); 384 + mmp->mmp_bdevname); 380 385 if (IS_ERR(EXT4_SB(sb)->s_mmp_tsk)) { 381 386 EXT4_SB(sb)->s_mmp_tsk = NULL; 382 387 ext4_warning(sb, "Unable to create kmmpd thread for %s.",
+10 -10
fs/ext4/super.c
··· 159 159 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type) 160 160 161 161 162 - static inline void __ext4_read_bh(struct buffer_head *bh, int op_flags, 162 + static inline void __ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, 163 163 bh_end_io_t *end_io) 164 164 { 165 165 /* ··· 171 171 172 172 bh->b_end_io = end_io ? end_io : end_buffer_read_sync; 173 173 get_bh(bh); 174 - submit_bh(REQ_OP_READ, op_flags, bh); 174 + submit_bh(REQ_OP_READ | op_flags, bh); 175 175 } 176 176 177 - void ext4_read_bh_nowait(struct buffer_head *bh, int op_flags, 177 + void ext4_read_bh_nowait(struct buffer_head *bh, blk_opf_t op_flags, 178 178 bh_end_io_t *end_io) 179 179 { 180 180 BUG_ON(!buffer_locked(bh)); ··· 186 186 __ext4_read_bh(bh, op_flags, end_io); 187 187 } 188 188 189 - int ext4_read_bh(struct buffer_head *bh, int op_flags, bh_end_io_t *end_io) 189 + int ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, bh_end_io_t *end_io) 190 190 { 191 191 BUG_ON(!buffer_locked(bh)); 192 192 ··· 203 203 return -EIO; 204 204 } 205 205 206 - int ext4_read_bh_lock(struct buffer_head *bh, int op_flags, bool wait) 206 + int ext4_read_bh_lock(struct buffer_head *bh, blk_opf_t op_flags, bool wait) 207 207 { 208 208 if (trylock_buffer(bh)) { 209 209 if (wait) ··· 227 227 * return. 228 228 */ 229 229 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb, 230 - sector_t block, int op_flags, 231 - gfp_t gfp) 230 + sector_t block, 231 + blk_opf_t op_flags, gfp_t gfp) 232 232 { 233 233 struct buffer_head *bh; 234 234 int ret; ··· 248 248 } 249 249 250 250 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block, 251 - int op_flags) 251 + blk_opf_t op_flags) 252 252 { 253 253 return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE); 254 254 } ··· 5939 5939 /* Clear potential dirty bit if it was journalled update */ 5940 5940 clear_buffer_dirty(sbh); 5941 5941 sbh->b_end_io = end_buffer_write_sync; 5942 - submit_bh(REQ_OP_WRITE, 5943 - REQ_SYNC | (test_opt(sb, BARRIER) ? REQ_FUA : 0), sbh); 5942 + submit_bh(REQ_OP_WRITE | REQ_SYNC | 5943 + (test_opt(sb, BARRIER) ? REQ_FUA : 0), sbh); 5944 5944 wait_on_buffer(sbh); 5945 5945 if (buffer_write_io_error(sbh)) { 5946 5946 ext4_msg(sb, KERN_ERR, "I/O error while writing "
+6 -5
fs/f2fs/data.c
··· 387 387 return 0; 388 388 } 389 389 390 - static unsigned int f2fs_io_flags(struct f2fs_io_info *fio) 390 + static blk_opf_t f2fs_io_flags(struct f2fs_io_info *fio) 391 391 { 392 392 unsigned int temp_mask = (1 << NR_TEMP_TYPE) - 1; 393 393 unsigned int fua_flag, meta_flag, io_flag; 394 - unsigned int op_flags = 0; 394 + blk_opf_t op_flags = 0; 395 395 396 396 if (fio->op != REQ_OP_WRITE) 397 397 return 0; ··· 999 999 } 1000 1000 1001 1001 static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr, 1002 - unsigned nr_pages, unsigned op_flag, 1002 + unsigned nr_pages, blk_opf_t op_flag, 1003 1003 pgoff_t first_idx, bool for_write) 1004 1004 { 1005 1005 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); ··· 1047 1047 1048 1048 /* This can handle encryption stuffs */ 1049 1049 static int f2fs_submit_page_read(struct inode *inode, struct page *page, 1050 - block_t blkaddr, int op_flags, bool for_write) 1050 + block_t blkaddr, blk_opf_t op_flags, 1051 + bool for_write) 1051 1052 { 1052 1053 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1053 1054 struct bio *bio; ··· 1182 1181 } 1183 1182 1184 1183 struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index, 1185 - int op_flags, bool for_write) 1184 + blk_opf_t op_flags, bool for_write) 1186 1185 { 1187 1186 struct address_space *mapping = inode->i_mapping; 1188 1187 struct dnode_of_data dn;
+3 -3
fs/f2fs/f2fs.h
··· 1183 1183 nid_t ino; /* inode number */ 1184 1184 enum page_type type; /* contains DATA/NODE/META/META_FLUSH */ 1185 1185 enum temp_type temp; /* contains HOT/WARM/COLD */ 1186 - int op; /* contains REQ_OP_ */ 1187 - int op_flags; /* req_flag_bits */ 1186 + enum req_op op; /* contains REQ_OP_ */ 1187 + blk_opf_t op_flags; /* req_flag_bits */ 1188 1188 block_t new_blkaddr; /* new block address to be written */ 1189 1189 block_t old_blkaddr; /* old block address before Cow */ 1190 1190 struct page *page; /* page to be written */ ··· 3741 3741 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index); 3742 3742 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index); 3743 3743 struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index, 3744 - int op_flags, bool for_write); 3744 + blk_opf_t op_flags, bool for_write); 3745 3745 struct page *f2fs_find_data_page(struct inode *inode, pgoff_t index); 3746 3746 struct page *f2fs_get_lock_data_page(struct inode *inode, pgoff_t index, 3747 3747 bool for_write);
+1 -1
fs/f2fs/node.c
··· 1327 1327 * 0: f2fs_put_page(page, 0) 1328 1328 * LOCKED_PAGE or error: f2fs_put_page(page, 1) 1329 1329 */ 1330 - static int read_node_page(struct page *page, int op_flags) 1330 + static int read_node_page(struct page *page, blk_opf_t op_flags) 1331 1331 { 1332 1332 struct f2fs_sb_info *sbi = F2FS_P_SB(page); 1333 1333 struct node_info ni;
+1 -1
fs/f2fs/segment.c
··· 1082 1082 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; 1083 1083 struct list_head *wait_list = (dpolicy->type == DPOLICY_FSTRIM) ? 1084 1084 &(dcc->fstrim_list) : &(dcc->wait_list); 1085 - int flag = dpolicy->sync ? REQ_SYNC : 0; 1085 + blk_opf_t flag = dpolicy->sync ? REQ_SYNC : 0; 1086 1086 block_t lstart, start, len, total_len; 1087 1087 int err = 0; 1088 1088
+2 -3
fs/gfs2/bmap.c
··· 310 310 if (trylock_buffer(rabh)) { 311 311 if (!buffer_uptodate(rabh)) { 312 312 rabh->b_end_io = end_buffer_read_sync; 313 - submit_bh(REQ_OP_READ, 314 - REQ_RAHEAD | REQ_META | REQ_PRIO, 315 - rabh); 313 + submit_bh(REQ_OP_READ | REQ_RAHEAD | REQ_META | 314 + REQ_PRIO, rabh); 316 315 continue; 317 316 } 318 317 unlock_buffer(rabh);
+2 -3
fs/gfs2/dir.c
··· 1508 1508 continue; 1509 1509 } 1510 1510 bh->b_end_io = end_buffer_read_sync; 1511 - submit_bh(REQ_OP_READ, 1512 - REQ_RAHEAD | REQ_META | REQ_PRIO, 1513 - bh); 1511 + submit_bh(REQ_OP_READ | REQ_RAHEAD | REQ_META | 1512 + REQ_PRIO, bh); 1514 1513 continue; 1515 1514 } 1516 1515 brelse(bh);
+2 -2
fs/gfs2/log.c
··· 823 823 824 824 void gfs2_write_log_header(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd, 825 825 u64 seq, u32 tail, u32 lblock, u32 flags, 826 - int op_flags) 826 + blk_opf_t op_flags) 827 827 { 828 828 struct gfs2_log_header *lh; 829 829 u32 hash, crc; ··· 905 905 906 906 static void log_write_header(struct gfs2_sbd *sdp, u32 flags) 907 907 { 908 - int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC; 908 + blk_opf_t op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC; 909 909 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); 910 910 911 911 gfs2_assert_withdraw(sdp, (state != SFS_FROZEN));
+1 -1
fs/gfs2/log.h
··· 82 82 unsigned int *extra_revokes); 83 83 extern void gfs2_write_log_header(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd, 84 84 u64 seq, u32 tail, u32 lblock, u32 flags, 85 - int op_flags); 85 + blk_opf_t op_flags); 86 86 extern void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, 87 87 u32 type); 88 88 extern void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *trans);
+2 -2
fs/gfs2/lops.c
··· 238 238 * there is no pending bio, then this is a no-op. 239 239 */ 240 240 241 - void gfs2_log_submit_bio(struct bio **biop, int opf) 241 + void gfs2_log_submit_bio(struct bio **biop, blk_opf_t opf) 242 242 { 243 243 struct bio *bio = *biop; 244 244 if (bio) { ··· 292 292 */ 293 293 294 294 static struct bio *gfs2_log_get_bio(struct gfs2_sbd *sdp, u64 blkno, 295 - struct bio **biop, int op, 295 + struct bio **biop, enum req_op op, 296 296 bio_end_io_t *end_io, bool flush) 297 297 { 298 298 struct bio *bio = *biop;
+1 -1
fs/gfs2/lops.h
··· 16 16 extern void gfs2_log_write(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd, 17 17 struct page *page, unsigned size, unsigned offset, 18 18 u64 blkno); 19 - extern void gfs2_log_submit_bio(struct bio **biop, int opf); 19 + extern void gfs2_log_submit_bio(struct bio **biop, blk_opf_t opf); 20 20 extern void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh); 21 21 extern int gfs2_find_jhead(struct gfs2_jdesc *jd, 22 22 struct gfs2_log_header_host *head, bool keep_cache);
+8 -10
fs/gfs2/meta_io.c
··· 34 34 { 35 35 struct buffer_head *bh, *head; 36 36 int nr_underway = 0; 37 - int write_flags = REQ_META | REQ_PRIO | wbc_to_write_flags(wbc); 37 + blk_opf_t write_flags = REQ_META | REQ_PRIO | wbc_to_write_flags(wbc); 38 38 39 39 BUG_ON(!PageLocked(page)); 40 40 BUG_ON(!page_has_buffers(page)); ··· 75 75 do { 76 76 struct buffer_head *next = bh->b_this_page; 77 77 if (buffer_async_write(bh)) { 78 - submit_bh(REQ_OP_WRITE, write_flags, bh); 78 + submit_bh(REQ_OP_WRITE | write_flags, bh); 79 79 nr_underway++; 80 80 } 81 81 bh = next; ··· 217 217 * Submit several consecutive buffer head I/O requests as a single bio I/O 218 218 * request. (See submit_bh_wbc.) 219 219 */ 220 - static void gfs2_submit_bhs(int op, int op_flags, struct buffer_head *bhs[], 221 - int num) 220 + static void gfs2_submit_bhs(blk_opf_t opf, struct buffer_head *bhs[], int num) 222 221 { 223 222 while (num > 0) { 224 223 struct buffer_head *bh = *bhs; 225 224 struct bio *bio; 226 225 227 - bio = bio_alloc(bh->b_bdev, num, op | op_flags, GFP_NOIO); 226 + bio = bio_alloc(bh->b_bdev, num, opf, GFP_NOIO); 228 227 bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9); 229 228 while (num > 0) { 230 229 bh = *bhs; ··· 287 288 } 288 289 } 289 290 290 - gfs2_submit_bhs(REQ_OP_READ, REQ_META | REQ_PRIO, bhs, num); 291 + gfs2_submit_bhs(REQ_OP_READ | REQ_META | REQ_PRIO, bhs, num); 291 292 if (!(flags & DIO_WAIT)) 292 293 return 0; 293 294 ··· 526 527 if (buffer_uptodate(first_bh)) 527 528 goto out; 528 529 if (!buffer_locked(first_bh)) 529 - ll_rw_block(REQ_OP_READ, REQ_META | REQ_PRIO, 1, &first_bh); 530 + ll_rw_block(REQ_OP_READ | REQ_META | REQ_PRIO, 1, &first_bh); 530 531 531 532 dblock++; 532 533 extlen--; ··· 535 536 bh = gfs2_getbuf(gl, dblock, CREATE); 536 537 537 538 if (!buffer_uptodate(bh) && !buffer_locked(bh)) 538 - ll_rw_block(REQ_OP_READ, 539 - REQ_RAHEAD | REQ_META | REQ_PRIO, 540 - 1, &bh); 539 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD | REQ_META | 540 + REQ_PRIO, 1, &bh); 541 541 brelse(bh); 542 542 dblock++; 543 543 extlen--;
+1 -1
fs/gfs2/quota.c
··· 746 746 if (PageUptodate(page)) 747 747 set_buffer_uptodate(bh); 748 748 if (!buffer_uptodate(bh)) { 749 - ll_rw_block(REQ_OP_READ, REQ_META | REQ_PRIO, 1, &bh); 749 + ll_rw_block(REQ_OP_READ | REQ_META | REQ_PRIO, 1, &bh); 750 750 wait_on_buffer(bh); 751 751 if (!buffer_uptodate(bh)) 752 752 goto unlock_out;
+1 -1
fs/hfsplus/hfsplus_fs.h
··· 525 525 526 526 /* wrapper.c */ 527 527 int hfsplus_submit_bio(struct super_block *sb, sector_t sector, void *buf, 528 - void **data, int op, int op_flags); 528 + void **data, blk_opf_t opf); 529 529 int hfsplus_read_wrapper(struct super_block *sb); 530 530 531 531 /*
+2 -3
fs/hfsplus/part_tbl.c
··· 112 112 if ((u8 *)pm - (u8 *)buf >= buf_size) { 113 113 res = hfsplus_submit_bio(sb, 114 114 *part_start + HFS_PMAP_BLK + i, 115 - buf, (void **)&pm, REQ_OP_READ, 116 - 0); 115 + buf, (void **)&pm, REQ_OP_READ); 117 116 if (res) 118 117 return res; 119 118 } ··· 136 137 return -ENOMEM; 137 138 138 139 res = hfsplus_submit_bio(sb, *part_start + HFS_PMAP_BLK, 139 - buf, &data, REQ_OP_READ, 0); 140 + buf, &data, REQ_OP_READ); 140 141 if (res) 141 142 goto out; 142 143
+2 -2
fs/hfsplus/super.c
··· 221 221 222 222 error2 = hfsplus_submit_bio(sb, 223 223 sbi->part_start + HFSPLUS_VOLHEAD_SECTOR, 224 - sbi->s_vhdr_buf, NULL, REQ_OP_WRITE, 224 + sbi->s_vhdr_buf, NULL, REQ_OP_WRITE | 225 225 REQ_SYNC); 226 226 if (!error) 227 227 error = error2; ··· 230 230 231 231 error2 = hfsplus_submit_bio(sb, 232 232 sbi->part_start + sbi->sect_count - 2, 233 - sbi->s_backup_vhdr_buf, NULL, REQ_OP_WRITE, 233 + sbi->s_backup_vhdr_buf, NULL, REQ_OP_WRITE | 234 234 REQ_SYNC); 235 235 if (!error) 236 236 error2 = error;
+6 -6
fs/hfsplus/wrapper.c
··· 45 45 * will work correctly. 46 46 */ 47 47 int hfsplus_submit_bio(struct super_block *sb, sector_t sector, 48 - void *buf, void **data, int op, int op_flags) 48 + void *buf, void **data, blk_opf_t opf) 49 49 { 50 + const enum req_op op = opf & REQ_OP_MASK; 50 51 struct bio *bio; 51 52 int ret = 0; 52 53 u64 io_size; ··· 64 63 offset = start & (io_size - 1); 65 64 sector &= ~((io_size >> HFSPLUS_SECTOR_SHIFT) - 1); 66 65 67 - bio = bio_alloc(sb->s_bdev, 1, op | op_flags, GFP_NOIO); 66 + bio = bio_alloc(sb->s_bdev, 1, opf, GFP_NOIO); 68 67 bio->bi_iter.bi_sector = sector; 69 68 70 - if (op != WRITE && data) 69 + if (op != REQ_OP_WRITE && data) 71 70 *data = (u8 *)buf + offset; 72 71 73 72 while (io_size > 0) { ··· 185 184 reread: 186 185 error = hfsplus_submit_bio(sb, part_start + HFSPLUS_VOLHEAD_SECTOR, 187 186 sbi->s_vhdr_buf, (void **)&sbi->s_vhdr, 188 - REQ_OP_READ, 0); 187 + REQ_OP_READ); 189 188 if (error) 190 189 goto out_free_backup_vhdr; 191 190 ··· 217 216 218 217 error = hfsplus_submit_bio(sb, part_start + part_size - 2, 219 218 sbi->s_backup_vhdr_buf, 220 - (void **)&sbi->s_backup_vhdr, REQ_OP_READ, 221 - 0); 219 + (void **)&sbi->s_backup_vhdr, REQ_OP_READ); 222 220 if (error) 223 221 goto out_free_backup_vhdr; 224 222
+6 -6
fs/iomap/direct-io.c
··· 52 52 }; 53 53 54 54 static struct bio *iomap_dio_alloc_bio(const struct iomap_iter *iter, 55 - struct iomap_dio *dio, unsigned short nr_vecs, unsigned int opf) 55 + struct iomap_dio *dio, unsigned short nr_vecs, blk_opf_t opf) 56 56 { 57 57 if (dio->dops && dio->dops->bio_set) 58 58 return bio_alloc_bioset(iter->iomap.bdev, nr_vecs, opf, ··· 212 212 * mapping, and whether or not we want FUA. Note that we can end up 213 213 * clearing the WRITE_FUA flag in the dio request. 214 214 */ 215 - static inline unsigned int iomap_dio_bio_opflags(struct iomap_dio *dio, 215 + static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, 216 216 const struct iomap *iomap, bool use_fua) 217 217 { 218 - unsigned int opflags = REQ_SYNC | REQ_IDLE; 218 + blk_opf_t opflags = REQ_SYNC | REQ_IDLE; 219 219 220 220 if (!(dio->flags & IOMAP_DIO_WRITE)) { 221 221 WARN_ON_ONCE(iomap->flags & IOMAP_F_ZONE_APPEND); ··· 242 242 struct inode *inode = iter->inode; 243 243 unsigned int blkbits = blksize_bits(bdev_logical_block_size(iomap->bdev)); 244 244 unsigned int fs_block_size = i_blocksize(inode), pad; 245 - unsigned int align = iov_iter_alignment(dio->submit.iter); 246 245 loff_t length = iomap_length(iter); 247 246 loff_t pos = iter->pos; 248 - unsigned int bio_opf; 247 + blk_opf_t bio_opf; 249 248 struct bio *bio; 250 249 bool need_zeroout = false; 251 250 bool use_fua = false; ··· 252 253 size_t copied = 0; 253 254 size_t orig_count; 254 255 255 - if ((pos | length | align) & ((1 << blkbits) - 1)) 256 + if ((pos | length) & ((1 << blkbits) - 1) || 257 + !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter)) 256 258 return -EINVAL; 257 259 258 260 if (iomap->type == IOMAP_UNWRITTEN) {
+1 -1
fs/isofs/compress.c
··· 82 82 return 0; 83 83 } 84 84 haveblocks = isofs_get_blocks(inode, blocknum, bhs, needblocks); 85 - ll_rw_block(REQ_OP_READ, 0, haveblocks, bhs); 85 + ll_rw_block(REQ_OP_READ, haveblocks, bhs); 86 86 87 87 curbh = 0; 88 88 curpage = 0;
+4 -4
fs/jbd2/commit.c
··· 155 155 156 156 if (journal->j_flags & JBD2_BARRIER && 157 157 !jbd2_has_feature_async_commit(journal)) 158 - ret = submit_bh(REQ_OP_WRITE, 159 - REQ_SYNC | REQ_PREFLUSH | REQ_FUA, bh); 158 + ret = submit_bh(REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH | 159 + REQ_FUA, bh); 160 160 else 161 - ret = submit_bh(REQ_OP_WRITE, REQ_SYNC, bh); 161 + ret = submit_bh(REQ_OP_WRITE | REQ_SYNC, bh); 162 162 163 163 *cbh = bh; 164 164 return ret; ··· 763 763 clear_buffer_dirty(bh); 764 764 set_buffer_uptodate(bh); 765 765 bh->b_end_io = journal_end_buffer_io_sync; 766 - submit_bh(REQ_OP_WRITE, REQ_SYNC, bh); 766 + submit_bh(REQ_OP_WRITE | REQ_SYNC, bh); 767 767 } 768 768 cond_resched(); 769 769
+14 -11
fs/jbd2/journal.c
··· 1465 1465 if (!journal) 1466 1466 return NULL; 1467 1467 1468 - bdevname(journal->j_dev, journal->j_devname); 1468 + snprintf(journal->j_devname, sizeof(journal->j_devname), 1469 + "%pg", journal->j_dev); 1469 1470 strreplace(journal->j_devname, '/', '!'); 1470 1471 jbd2_stats_proc_init(journal); 1471 1472 ··· 1508 1507 return NULL; 1509 1508 1510 1509 journal->j_inode = inode; 1511 - bdevname(journal->j_dev, journal->j_devname); 1510 + snprintf(journal->j_devname, sizeof(journal->j_devname), 1511 + "%pg", journal->j_dev); 1512 1512 p = strreplace(journal->j_devname, '/', '!'); 1513 1513 sprintf(p, "-%lu", journal->j_inode->i_ino); 1514 1514 jbd2_stats_proc_init(journal); ··· 1604 1602 * This function expects that the caller will have locked the journal 1605 1603 * buffer head, and will return with it unlocked 1606 1604 */ 1607 - static int jbd2_write_superblock(journal_t *journal, int write_flags) 1605 + static int jbd2_write_superblock(journal_t *journal, blk_opf_t write_flags) 1608 1606 { 1609 1607 struct buffer_head *bh = journal->j_sb_buffer; 1610 1608 journal_superblock_t *sb = journal->j_superblock; ··· 1638 1636 sb->s_checksum = jbd2_superblock_csum(journal, sb); 1639 1637 get_bh(bh); 1640 1638 bh->b_end_io = end_buffer_write_sync; 1641 - ret = submit_bh(REQ_OP_WRITE, write_flags, bh); 1639 + ret = submit_bh(REQ_OP_WRITE | write_flags, bh); 1642 1640 wait_on_buffer(bh); 1643 1641 if (buffer_write_io_error(bh)) { 1644 1642 clear_buffer_write_io_error(bh); ··· 1661 1659 * @journal: The journal to update. 1662 1660 * @tail_tid: TID of the new transaction at the tail of the log 1663 1661 * @tail_block: The first block of the transaction at the tail of the log 1664 - * @write_op: With which operation should we write the journal sb 1662 + * @write_flags: Flags for the journal sb write operation 1665 1663 * 1666 1664 * Update a journal's superblock information about log tail and write it to 1667 1665 * disk, waiting for the IO to complete. 1668 1666 */ 1669 1667 int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, 1670 - unsigned long tail_block, int write_op) 1668 + unsigned long tail_block, 1669 + blk_opf_t write_flags) 1671 1670 { 1672 1671 journal_superblock_t *sb = journal->j_superblock; 1673 1672 int ret; ··· 1688 1685 sb->s_sequence = cpu_to_be32(tail_tid); 1689 1686 sb->s_start = cpu_to_be32(tail_block); 1690 1687 1691 - ret = jbd2_write_superblock(journal, write_op); 1688 + ret = jbd2_write_superblock(journal, write_flags); 1692 1689 if (ret) 1693 1690 goto out; 1694 1691 ··· 1705 1702 /** 1706 1703 * jbd2_mark_journal_empty() - Mark on disk journal as empty. 1707 1704 * @journal: The journal to update. 1708 - * @write_op: With which operation should we write the journal sb 1705 + * @write_flags: Flags for the journal sb write operation 1709 1706 * 1710 1707 * Update a journal's dynamic superblock fields to show that journal is empty. 1711 1708 * Write updated superblock to disk waiting for IO to complete. 1712 1709 */ 1713 - static void jbd2_mark_journal_empty(journal_t *journal, int write_op) 1710 + static void jbd2_mark_journal_empty(journal_t *journal, blk_opf_t write_flags) 1714 1711 { 1715 1712 journal_superblock_t *sb = journal->j_superblock; 1716 1713 bool had_fast_commit = false; ··· 1736 1733 had_fast_commit = true; 1737 1734 } 1738 1735 1739 - jbd2_write_superblock(journal, write_op); 1736 + jbd2_write_superblock(journal, write_flags); 1740 1737 1741 1738 if (had_fast_commit) 1742 1739 jbd2_set_feature_fast_commit(journal); ··· 1901 1898 1902 1899 J_ASSERT(bh != NULL); 1903 1900 if (!buffer_uptodate(bh)) { 1904 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 1901 + ll_rw_block(REQ_OP_READ, 1, &bh); 1905 1902 wait_on_buffer(bh); 1906 1903 if (!buffer_uptodate(bh)) { 1907 1904 printk(KERN_ERR
+2 -2
fs/jbd2/recovery.c
··· 100 100 if (!buffer_uptodate(bh) && !buffer_locked(bh)) { 101 101 bufs[nbufs++] = bh; 102 102 if (nbufs == MAXBUF) { 103 - ll_rw_block(REQ_OP_READ, 0, nbufs, bufs); 103 + ll_rw_block(REQ_OP_READ, nbufs, bufs); 104 104 journal_brelse_array(bufs, nbufs); 105 105 nbufs = 0; 106 106 } ··· 109 109 } 110 110 111 111 if (nbufs) 112 - ll_rw_block(REQ_OP_READ, 0, nbufs, bufs); 112 + ll_rw_block(REQ_OP_READ, nbufs, bufs); 113 113 err = 0; 114 114 115 115 failed:
+3 -3
fs/mpage.c
··· 145 145 struct block_device *bdev = NULL; 146 146 int length; 147 147 int fully_mapped = 1; 148 - int op = REQ_OP_READ; 148 + blk_opf_t opf = REQ_OP_READ; 149 149 unsigned nblocks; 150 150 unsigned relative_block; 151 151 gfp_t gfp = mapping_gfp_constraint(page->mapping, GFP_KERNEL); 152 152 153 153 if (args->is_readahead) { 154 - op |= REQ_RAHEAD; 154 + opf |= REQ_RAHEAD; 155 155 gfp |= __GFP_NORETRY | __GFP_NOWARN; 156 156 } 157 157 ··· 269 269 page)) 270 270 goto out; 271 271 } 272 - args->bio = bio_alloc(bdev, bio_max_segs(args->nr_pages), op, 272 + args->bio = bio_alloc(bdev, bio_max_segs(args->nr_pages), opf, 273 273 gfp); 274 274 if (args->bio == NULL) 275 275 goto confused;
+6 -7
fs/nfs/blocklayout/blocklayout.c
··· 121 121 } 122 122 123 123 static struct bio * 124 - do_add_page_to_bio(struct bio *bio, int npg, int rw, sector_t isect, 124 + do_add_page_to_bio(struct bio *bio, int npg, enum req_op op, sector_t isect, 125 125 struct page *page, struct pnfs_block_dev_map *map, 126 126 struct pnfs_block_extent *be, bio_end_io_t end_io, 127 127 struct parallel_io *par, unsigned int offset, int *len) ··· 131 131 u64 disk_addr, end; 132 132 133 133 dprintk("%s: npg %d rw %d isect %llu offset %u len %d\n", __func__, 134 - npg, rw, (unsigned long long)isect, offset, *len); 134 + npg, (__force u32)op, (unsigned long long)isect, offset, *len); 135 135 136 136 /* translate to device offset */ 137 137 isect += be->be_v_offset; ··· 154 154 155 155 retry: 156 156 if (!bio) { 157 - bio = bio_alloc(map->bdev, bio_max_segs(npg), rw, GFP_NOIO); 157 + bio = bio_alloc(map->bdev, bio_max_segs(npg), op, GFP_NOIO); 158 158 bio->bi_iter.bi_sector = disk_addr >> SECTOR_SHIFT; 159 159 bio->bi_end_io = end_io; 160 160 bio->bi_private = par; ··· 291 291 } else { 292 292 bio = do_add_page_to_bio(bio, 293 293 header->page_array.npages - i, 294 - READ, 294 + REQ_OP_READ, 295 295 isect, pages[i], &map, &be, 296 296 bl_end_io_read, par, 297 297 pg_offset, &pg_len); ··· 420 420 421 421 pg_len = PAGE_SIZE; 422 422 bio = do_add_page_to_bio(bio, header->page_array.npages - i, 423 - WRITE, isect, pages[i], &map, &be, 424 - bl_end_io_write, par, 425 - 0, &pg_len); 423 + REQ_OP_WRITE, isect, pages[i], &map, 424 + &be, bl_end_io_write, par, 0, &pg_len); 426 425 if (IS_ERR(bio)) { 427 426 header->pnfs_error = PTR_ERR(bio); 428 427 bio = NULL;
+4 -4
fs/nilfs2/btnode.c
··· 70 70 } 71 71 72 72 int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, 73 - sector_t pblocknr, int mode, int mode_flags, 73 + sector_t pblocknr, blk_opf_t opf, 74 74 struct buffer_head **pbh, sector_t *submit_ptr) 75 75 { 76 76 struct buffer_head *bh; ··· 103 103 } 104 104 } 105 105 106 - if (mode_flags & REQ_RAHEAD) { 106 + if (opf & REQ_RAHEAD) { 107 107 if (pblocknr != *submit_ptr + 1 || !trylock_buffer(bh)) { 108 108 err = -EBUSY; /* internal code */ 109 109 brelse(bh); 110 110 goto out_locked; 111 111 } 112 - } else { /* mode == READ */ 112 + } else { /* opf == REQ_OP_READ */ 113 113 lock_buffer(bh); 114 114 } 115 115 if (buffer_uptodate(bh)) { ··· 122 122 bh->b_blocknr = pblocknr; /* set block address for read */ 123 123 bh->b_end_io = end_buffer_read_sync; 124 124 get_bh(bh); 125 - submit_bh(mode, mode_flags, bh); 125 + submit_bh(opf, bh); 126 126 bh->b_blocknr = blocknr; /* set back to the given block address */ 127 127 *submit_ptr = pblocknr; 128 128 err = 0;
+2 -2
fs/nilfs2/btnode.h
··· 34 34 void nilfs_btnode_cache_clear(struct address_space *); 35 35 struct buffer_head *nilfs_btnode_create_block(struct address_space *btnc, 36 36 __u64 blocknr); 37 - int nilfs_btnode_submit_block(struct address_space *, __u64, sector_t, int, 38 - int, struct buffer_head **, sector_t *); 37 + int nilfs_btnode_submit_block(struct address_space *, __u64, sector_t, 38 + blk_opf_t, struct buffer_head **, sector_t *); 39 39 void nilfs_btnode_delete(struct buffer_head *); 40 40 int nilfs_btnode_prepare_change_key(struct address_space *, 41 41 struct nilfs_btnode_chkey_ctxt *);
+3 -3
fs/nilfs2/btree.c
··· 477 477 sector_t submit_ptr = 0; 478 478 int ret; 479 479 480 - ret = nilfs_btnode_submit_block(btnc, ptr, 0, REQ_OP_READ, 0, &bh, 480 + ret = nilfs_btnode_submit_block(btnc, ptr, 0, REQ_OP_READ, &bh, 481 481 &submit_ptr); 482 482 if (ret) { 483 483 if (ret != -EEXIST) ··· 495 495 ptr2 = nilfs_btree_node_get_ptr(ra->node, i, ra->ncmax); 496 496 497 497 ret = nilfs_btnode_submit_block(btnc, ptr2, 0, 498 - REQ_OP_READ, REQ_RAHEAD, 499 - &ra_bh, &submit_ptr); 498 + REQ_OP_READ | REQ_RAHEAD, 499 + &ra_bh, &submit_ptr); 500 500 if (likely(!ret || ret == -EEXIST)) 501 501 brelse(ra_bh); 502 502 else if (ret != -EBUSY)
+3 -4
fs/nilfs2/gcinode.c
··· 92 92 bh->b_blocknr = pbn; 93 93 bh->b_end_io = end_buffer_read_sync; 94 94 get_bh(bh); 95 - submit_bh(REQ_OP_READ, 0, bh); 95 + submit_bh(REQ_OP_READ, bh); 96 96 if (vbn) 97 97 bh->b_blocknr = vbn; 98 98 out: ··· 129 129 struct inode *btnc_inode = NILFS_I(inode)->i_assoc_inode; 130 130 int ret; 131 131 132 - ret = nilfs_btnode_submit_block(btnc_inode->i_mapping, 133 - vbn ? : pbn, pbn, REQ_OP_READ, 0, 134 - out_bh, &pbn); 132 + ret = nilfs_btnode_submit_block(btnc_inode->i_mapping, vbn ? : pbn, pbn, 133 + REQ_OP_READ, out_bh, &pbn); 135 134 if (ret == -EEXIST) /* internal code (cache hit) */ 136 135 ret = 0; 137 136 return ret;
+10 -9
fs/nilfs2/mdt.c
··· 111 111 } 112 112 113 113 static int 114 - nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, 115 - int mode, int mode_flags, struct buffer_head **out_bh) 114 + nilfs_mdt_submit_block(struct inode *inode, unsigned long blkoff, blk_opf_t opf, 115 + struct buffer_head **out_bh) 116 116 { 117 117 struct buffer_head *bh; 118 118 __u64 blknum = 0; ··· 126 126 if (buffer_uptodate(bh)) 127 127 goto out; 128 128 129 - if (mode_flags & REQ_RAHEAD) { 129 + if (opf & REQ_RAHEAD) { 130 130 if (!trylock_buffer(bh)) { 131 131 ret = -EBUSY; 132 132 goto failed_bh; 133 133 } 134 - } else /* mode == READ */ 134 + } else /* opf == REQ_OP_READ */ 135 135 lock_buffer(bh); 136 136 137 137 if (buffer_uptodate(bh)) { ··· 148 148 149 149 bh->b_end_io = end_buffer_read_sync; 150 150 get_bh(bh); 151 - submit_bh(mode, mode_flags, bh); 151 + submit_bh(opf, bh); 152 152 ret = 0; 153 153 154 - trace_nilfs2_mdt_submit_block(inode, inode->i_ino, blkoff, mode); 154 + trace_nilfs2_mdt_submit_block(inode, inode->i_ino, blkoff, 155 + opf & REQ_OP_MASK); 155 156 out: 156 157 get_bh(bh); 157 158 *out_bh = bh; ··· 173 172 int i, nr_ra_blocks = NILFS_MDT_MAX_RA_BLOCKS; 174 173 int err; 175 174 176 - err = nilfs_mdt_submit_block(inode, block, REQ_OP_READ, 0, &first_bh); 175 + err = nilfs_mdt_submit_block(inode, block, REQ_OP_READ, &first_bh); 177 176 if (err == -EEXIST) /* internal code */ 178 177 goto out; 179 178 ··· 183 182 if (readahead) { 184 183 blkoff = block + 1; 185 184 for (i = 0; i < nr_ra_blocks; i++, blkoff++) { 186 - err = nilfs_mdt_submit_block(inode, blkoff, REQ_OP_READ, 187 - REQ_RAHEAD, &bh); 185 + err = nilfs_mdt_submit_block(inode, blkoff, 186 + REQ_OP_READ | REQ_RAHEAD, &bh); 188 187 if (likely(!err || err == -EEXIST)) 189 188 brelse(bh); 190 189 else if (err != -EBUSY)
+3 -3
fs/ntfs/aops.c
··· 342 342 for (i = 0; i < nr; i++) { 343 343 tbh = arr[i]; 344 344 if (likely(!buffer_uptodate(tbh))) 345 - submit_bh(REQ_OP_READ, 0, tbh); 345 + submit_bh(REQ_OP_READ, tbh); 346 346 else 347 347 ntfs_end_buffer_async_read(tbh, 1); 348 348 } ··· 859 859 do { 860 860 struct buffer_head *next = bh->b_this_page; 861 861 if (buffer_async_write(bh)) { 862 - submit_bh(REQ_OP_WRITE, 0, bh); 862 + submit_bh(REQ_OP_WRITE, bh); 863 863 need_end_writeback = false; 864 864 } 865 865 bh = next; ··· 1187 1187 BUG_ON(!buffer_mapped(tbh)); 1188 1188 get_bh(tbh); 1189 1189 tbh->b_end_io = end_buffer_write_sync; 1190 - submit_bh(REQ_OP_WRITE, 0, tbh); 1190 + submit_bh(REQ_OP_WRITE, tbh); 1191 1191 } 1192 1192 /* Synchronize the mft mirror now if not @sync. */ 1193 1193 if (is_mft && !sync)
+1 -1
fs/ntfs/compress.c
··· 658 658 } 659 659 get_bh(tbh); 660 660 tbh->b_end_io = end_buffer_read_sync; 661 - submit_bh(REQ_OP_READ, 0, tbh); 661 + submit_bh(REQ_OP_READ, tbh); 662 662 } 663 663 664 664 /* Wait for io completion on all buffer heads. */
+1 -1
fs/ntfs/file.c
··· 537 537 lock_buffer(bh); 538 538 get_bh(bh); 539 539 bh->b_end_io = end_buffer_read_sync; 540 - return submit_bh(REQ_OP_READ, 0, bh); 540 + return submit_bh(REQ_OP_READ, bh); 541 541 } 542 542 543 543 /**
+1 -1
fs/ntfs/logfile.c
··· 807 807 * completed ignore errors afterwards as we can assume 808 808 * that if one buffer worked all of them will work. 809 809 */ 810 - submit_bh(REQ_OP_WRITE, 0, bh); 810 + submit_bh(REQ_OP_WRITE, bh); 811 811 if (should_wait) { 812 812 should_wait = false; 813 813 wait_on_buffer(bh);
+2 -2
fs/ntfs/mft.c
··· 583 583 clear_buffer_dirty(tbh); 584 584 get_bh(tbh); 585 585 tbh->b_end_io = end_buffer_write_sync; 586 - submit_bh(REQ_OP_WRITE, 0, tbh); 586 + submit_bh(REQ_OP_WRITE, tbh); 587 587 } 588 588 /* Wait on i/o completion of buffers. */ 589 589 for (i_bhs = 0; i_bhs < nr_bhs; i_bhs++) { ··· 780 780 clear_buffer_dirty(tbh); 781 781 get_bh(tbh); 782 782 tbh->b_end_io = end_buffer_write_sync; 783 - submit_bh(REQ_OP_WRITE, 0, tbh); 783 + submit_bh(REQ_OP_WRITE, tbh); 784 784 } 785 785 /* Synchronize the mft mirror now if not @sync. */ 786 786 if (!sync && ni->mft_no < vol->mftmirr_size)
+1 -1
fs/ntfs3/file.c
··· 242 242 lock_buffer(bh); 243 243 bh->b_end_io = end_buffer_read_sync; 244 244 get_bh(bh); 245 - submit_bh(REQ_OP_READ, 0, bh); 245 + submit_bh(REQ_OP_READ, bh); 246 246 247 247 wait_on_buffer(bh); 248 248 if (!buffer_uptodate(bh)) {
+1 -1
fs/ntfs3/fsntfs.c
··· 1448 1448 */ 1449 1449 int ntfs_bio_pages(struct ntfs_sb_info *sbi, const struct runs_tree *run, 1450 1450 struct page **pages, u32 nr_pages, u64 vbo, u32 bytes, 1451 - u32 op) 1451 + enum req_op op) 1452 1452 { 1453 1453 int err = 0; 1454 1454 struct bio *new, *bio = NULL;
+1 -1
fs/ntfs3/inode.c
··· 629 629 bh->b_size = block_size; 630 630 off = vbo & (PAGE_SIZE - 1); 631 631 set_bh_page(bh, page, off); 632 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 632 + ll_rw_block(REQ_OP_READ, 1, &bh); 633 633 wait_on_buffer(bh); 634 634 if (!buffer_uptodate(bh)) { 635 635 err = -EIO;
+1 -1
fs/ntfs3/ntfs_fs.h
··· 617 617 struct ntfs_buffers *nb, int sync); 618 618 int ntfs_bio_pages(struct ntfs_sb_info *sbi, const struct runs_tree *run, 619 619 struct page **pages, u32 nr_pages, u64 vbo, u32 bytes, 620 - u32 op); 620 + enum req_op op); 621 621 int ntfs_bio_fill_1(struct ntfs_sb_info *sbi, const struct runs_tree *run); 622 622 int ntfs_vbo_to_lbo(struct ntfs_sb_info *sbi, const struct runs_tree *run, 623 623 u64 vbo, u64 *lbo, u64 *bytes);
+1 -1
fs/ocfs2/aops.c
··· 638 638 !buffer_new(bh) && 639 639 ocfs2_should_read_blk(inode, page, block_start) && 640 640 (block_start < from || block_end > to)) { 641 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 641 + ll_rw_block(REQ_OP_READ, 1, &bh); 642 642 *wait_bh++=bh; 643 643 } 644 644
+4 -4
fs/ocfs2/buffer_head_io.c
··· 64 64 65 65 get_bh(bh); /* for end_buffer_write_sync() */ 66 66 bh->b_end_io = end_buffer_write_sync; 67 - submit_bh(REQ_OP_WRITE, 0, bh); 67 + submit_bh(REQ_OP_WRITE, bh); 68 68 69 69 wait_on_buffer(bh); 70 70 ··· 147 147 148 148 get_bh(bh); /* for end_buffer_read_sync() */ 149 149 bh->b_end_io = end_buffer_read_sync; 150 - submit_bh(REQ_OP_READ, 0, bh); 150 + submit_bh(REQ_OP_READ, bh); 151 151 } 152 152 153 153 read_failure: ··· 328 328 if (validate) 329 329 set_buffer_needs_validate(bh); 330 330 bh->b_end_io = end_buffer_read_sync; 331 - submit_bh(REQ_OP_READ, 0, bh); 331 + submit_bh(REQ_OP_READ, bh); 332 332 continue; 333 333 } 334 334 } ··· 449 449 get_bh(bh); /* for end_buffer_write_sync() */ 450 450 bh->b_end_io = end_buffer_write_sync; 451 451 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &di->i_check); 452 - submit_bh(REQ_OP_WRITE, 0, bh); 452 + submit_bh(REQ_OP_WRITE, bh); 453 453 454 454 wait_on_buffer(bh); 455 455
+35 -40
fs/ocfs2/cluster/heartbeat.c
··· 235 235 * (hr_steady_iterations == 0) within hr_unsteady_iterations */ 236 236 atomic_t hr_unsteady_iterations; 237 237 238 - char hr_dev_name[BDEVNAME_SIZE]; 239 - 240 238 unsigned int hr_timeout_ms; 241 239 242 240 /* randomized as the region goes up and down so that a node ··· 285 287 container_of(work, struct o2hb_region, 286 288 hr_write_timeout_work.work); 287 289 288 - mlog(ML_ERROR, "Heartbeat write timeout to device %s after %u " 289 - "milliseconds\n", reg->hr_dev_name, 290 + mlog(ML_ERROR, "Heartbeat write timeout to device %pg after %u " 291 + "milliseconds\n", reg->hr_bdev, 290 292 jiffies_to_msecs(jiffies - reg->hr_last_timeout_start)); 291 293 292 294 if (o2hb_global_heartbeat_active()) { ··· 381 383 382 384 if (master_node == o2nm_this_node()) { 383 385 if (!test_bit(master_node, reg->hr_nego_node_bitmap)) { 384 - printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%s).\n", 386 + printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%pg).\n", 385 387 o2nm_this_node(), O2HB_NEGO_TIMEOUT_MS/1000, 386 - config_item_name(&reg->hr_item), reg->hr_dev_name); 388 + config_item_name(&reg->hr_item), reg->hr_bdev); 387 389 set_bit(master_node, reg->hr_nego_node_bitmap); 388 390 } 389 391 if (memcmp(reg->hr_nego_node_bitmap, live_node_bitmap, ··· 397 399 return; 398 400 } 399 401 400 - printk(KERN_NOTICE "o2hb: all nodes hb write hung, maybe region %s (%s) is down.\n", 401 - config_item_name(&reg->hr_item), reg->hr_dev_name); 402 + printk(KERN_NOTICE "o2hb: all nodes hb write hung, maybe region %s (%pg) is down.\n", 403 + config_item_name(&reg->hr_item), reg->hr_bdev); 402 404 /* approve negotiate timeout request. */ 403 405 o2hb_arm_timeout(reg); 404 406 ··· 417 419 } 418 420 } else { 419 421 /* negotiate timeout with master node. */ 420 - printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%s), negotiate timeout with node %d.\n", 422 + printk(KERN_NOTICE "o2hb: node %d hb write hung for %ds on region %s (%pg), negotiate timeout with node %d.\n", 421 423 o2nm_this_node(), O2HB_NEGO_TIMEOUT_MS/1000, config_item_name(&reg->hr_item), 422 - reg->hr_dev_name, master_node); 424 + reg->hr_bdev, master_node); 423 425 ret = o2hb_send_nego_msg(reg->hr_key, O2HB_NEGO_TIMEOUT_MSG, 424 426 master_node); 425 427 if (ret) ··· 435 437 struct o2hb_nego_msg *nego_msg; 436 438 437 439 nego_msg = (struct o2hb_nego_msg *)msg->buf; 438 - printk(KERN_NOTICE "o2hb: receive negotiate timeout message from node %d on region %s (%s).\n", 439 - nego_msg->node_num, config_item_name(&reg->hr_item), reg->hr_dev_name); 440 + printk(KERN_NOTICE "o2hb: receive negotiate timeout message from node %d on region %s (%pg).\n", 441 + nego_msg->node_num, config_item_name(&reg->hr_item), reg->hr_bdev); 440 442 if (nego_msg->node_num < O2NM_MAX_NODES) 441 443 set_bit(nego_msg->node_num, reg->hr_nego_node_bitmap); 442 444 else ··· 450 452 { 451 453 struct o2hb_region *reg = data; 452 454 453 - printk(KERN_NOTICE "o2hb: negotiate timeout approved by master node on region %s (%s).\n", 454 - config_item_name(&reg->hr_item), reg->hr_dev_name); 455 + printk(KERN_NOTICE "o2hb: negotiate timeout approved by master node on region %s (%pg).\n", 456 + config_item_name(&reg->hr_item), reg->hr_bdev); 455 457 o2hb_arm_timeout(reg); 456 458 return 0; 457 459 } ··· 501 503 static struct bio *o2hb_setup_one_bio(struct o2hb_region *reg, 502 504 struct o2hb_bio_wait_ctxt *wc, 503 505 unsigned int *current_slot, 504 - unsigned int max_slots, int op, 505 - int op_flags) 506 + unsigned int max_slots, blk_opf_t opf) 506 507 { 507 508 int len, current_page; 508 509 unsigned int vec_len, vec_start; ··· 515 518 * GFP_KERNEL that the local node can get fenced. It would be 516 519 * nicest if we could pre-allocate these bios and avoid this 517 520 * all together. */ 518 - bio = bio_alloc(reg->hr_bdev, 16, op | op_flags, GFP_ATOMIC); 521 + bio = bio_alloc(reg->hr_bdev, 16, opf, GFP_ATOMIC); 519 522 if (!bio) { 520 523 mlog(ML_ERROR, "Could not alloc slots BIO!\n"); 521 524 bio = ERR_PTR(-ENOMEM); ··· 563 566 564 567 while(current_slot < max_slots) { 565 568 bio = o2hb_setup_one_bio(reg, &wc, &current_slot, max_slots, 566 - REQ_OP_READ, 0); 569 + REQ_OP_READ); 567 570 if (IS_ERR(bio)) { 568 571 status = PTR_ERR(bio); 569 572 mlog_errno(status); ··· 595 598 596 599 slot = o2nm_this_node(); 597 600 598 - bio = o2hb_setup_one_bio(reg, write_wc, &slot, slot+1, REQ_OP_WRITE, 599 - REQ_SYNC); 601 + bio = o2hb_setup_one_bio(reg, write_wc, &slot, slot+1, 602 + REQ_OP_WRITE | REQ_SYNC); 600 603 if (IS_ERR(bio)) { 601 604 status = PTR_ERR(bio); 602 605 mlog_errno(status); ··· 686 689 else 687 690 errstr = ERRSTR3; 688 691 689 - mlog(ML_ERROR, "%s (%s): expected(%u:0x%llx, 0x%llx), " 690 - "ondisk(%u:0x%llx, 0x%llx)\n", errstr, reg->hr_dev_name, 692 + mlog(ML_ERROR, "%s (%pg): expected(%u:0x%llx, 0x%llx), " 693 + "ondisk(%u:0x%llx, 0x%llx)\n", errstr, reg->hr_bdev, 691 694 slot->ds_node_num, (unsigned long long)slot->ds_last_generation, 692 695 (unsigned long long)slot->ds_last_time, hb_block->hb_node, 693 696 (unsigned long long)le64_to_cpu(hb_block->hb_generation), ··· 860 863 sizeof(o2hb_live_node_bitmap))) 861 864 goto unlock; 862 865 863 - printk(KERN_NOTICE "o2hb: Region %s (%s) is now a quorum device\n", 864 - config_item_name(&reg->hr_item), reg->hr_dev_name); 866 + printk(KERN_NOTICE "o2hb: Region %s (%pg) is now a quorum device\n", 867 + config_item_name(&reg->hr_item), reg->hr_bdev); 865 868 866 869 set_bit(reg->hr_region_num, o2hb_quorum_region_bitmap); 867 870 ··· 919 922 /* The node is live but pushed out a bad crc. We 920 923 * consider it a transient miss but don't populate any 921 924 * other values as they may be junk. */ 922 - mlog(ML_ERROR, "Node %d has written a bad crc to %s\n", 923 - slot->ds_node_num, reg->hr_dev_name); 925 + mlog(ML_ERROR, "Node %d has written a bad crc to %pg\n", 926 + slot->ds_node_num, reg->hr_bdev); 924 927 o2hb_dump_slot(hb_block); 925 928 926 929 slot->ds_equal_samples++; ··· 999 1002 slot_dead_ms = le32_to_cpu(hb_block->hb_dead_ms); 1000 1003 if (slot_dead_ms && slot_dead_ms != dead_ms) { 1001 1004 /* TODO: Perhaps we can fail the region here. */ 1002 - mlog(ML_ERROR, "Node %d on device %s has a dead count " 1005 + mlog(ML_ERROR, "Node %d on device %pg has a dead count " 1003 1006 "of %u ms, but our count is %u ms.\n" 1004 1007 "Please double check your configuration values " 1005 1008 "for 'O2CB_HEARTBEAT_THRESHOLD'\n", 1006 - slot->ds_node_num, reg->hr_dev_name, slot_dead_ms, 1009 + slot->ds_node_num, reg->hr_bdev, slot_dead_ms, 1007 1010 dead_ms); 1008 1011 } 1009 1012 goto out; ··· 1142 1145 /* Do not re-arm the write timeout on I/O error - we 1143 1146 * can't be sure that the new block ever made it to 1144 1147 * disk */ 1145 - mlog(ML_ERROR, "Write error %d on device \"%s\"\n", 1146 - write_wc.wc_error, reg->hr_dev_name); 1148 + mlog(ML_ERROR, "Write error %d on device \"%pg\"\n", 1149 + write_wc.wc_error, reg->hr_bdev); 1147 1150 ret = write_wc.wc_error; 1148 1151 goto bail; 1149 1152 } ··· 1167 1170 if (atomic_read(&reg->hr_steady_iterations) != 0) { 1168 1171 if (atomic_dec_and_test(&reg->hr_unsteady_iterations)) { 1169 1172 printk(KERN_NOTICE "o2hb: Unable to stabilize " 1170 - "heartbeat on region %s (%s)\n", 1173 + "heartbeat on region %s (%pg)\n", 1171 1174 config_item_name(&reg->hr_item), 1172 - reg->hr_dev_name); 1175 + reg->hr_bdev); 1173 1176 atomic_set(&reg->hr_steady_iterations, 0); 1174 1177 reg->hr_aborted_start = 1; 1175 1178 wake_up(&o2hb_steady_queue); ··· 1491 1494 struct page *page; 1492 1495 struct o2hb_region *reg = to_o2hb_region(item); 1493 1496 1494 - mlog(ML_HEARTBEAT, "hb region release (%s)\n", reg->hr_dev_name); 1497 + mlog(ML_HEARTBEAT, "hb region release (%pg)\n", reg->hr_bdev); 1495 1498 1496 1499 kfree(reg->hr_tmp_block); 1497 1500 ··· 1638 1641 unsigned int ret = 0; 1639 1642 1640 1643 if (to_o2hb_region(item)->hr_bdev) 1641 - ret = sprintf(page, "%s\n", to_o2hb_region(item)->hr_dev_name); 1644 + ret = sprintf(page, "%pg\n", to_o2hb_region(item)->hr_bdev); 1642 1645 1643 1646 return ret; 1644 1647 } ··· 1795 1798 goto out2; 1796 1799 } 1797 1800 1798 - bdevname(reg->hr_bdev, reg->hr_dev_name); 1799 - 1800 1801 sectsize = bdev_logical_block_size(reg->hr_bdev); 1801 1802 if (sectsize != reg->hr_block_bytes) { 1802 1803 mlog(ML_ERROR, ··· 1890 1895 ret = -EIO; 1891 1896 1892 1897 if (hb_task && o2hb_global_heartbeat_active()) 1893 - printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%s)\n", 1894 - config_item_name(&reg->hr_item), reg->hr_dev_name); 1898 + printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n", 1899 + config_item_name(&reg->hr_item), reg->hr_bdev); 1895 1900 1896 1901 out3: 1897 1902 if (ret < 0) { ··· 2083 2088 quorum_region = 1; 2084 2089 clear_bit(reg->hr_region_num, o2hb_quorum_region_bitmap); 2085 2090 spin_unlock(&o2hb_live_lock); 2086 - printk(KERN_NOTICE "o2hb: Heartbeat %s on region %s (%s)\n", 2091 + printk(KERN_NOTICE "o2hb: Heartbeat %s on region %s (%pg)\n", 2087 2092 ((atomic_read(&reg->hr_steady_iterations) == 0) ? 2088 2093 "stopped" : "start aborted"), config_item_name(item), 2089 - reg->hr_dev_name); 2094 + reg->hr_bdev); 2090 2095 } 2091 2096 2092 2097 /*
+1 -1
fs/ocfs2/super.c
··· 1764 1764 if (!buffer_dirty(*bh)) 1765 1765 clear_buffer_uptodate(*bh); 1766 1766 unlock_buffer(*bh); 1767 - ll_rw_block(REQ_OP_READ, 0, 1, bh); 1767 + ll_rw_block(REQ_OP_READ, 1, bh); 1768 1768 wait_on_buffer(*bh); 1769 1769 if (!buffer_uptodate(*bh)) { 1770 1770 mlog_errno(-EIO);
+2 -2
fs/reiserfs/inode.c
··· 2656 2656 do { 2657 2657 struct buffer_head *next = bh->b_this_page; 2658 2658 if (buffer_async_write(bh)) { 2659 - submit_bh(REQ_OP_WRITE, 0, bh); 2659 + submit_bh(REQ_OP_WRITE, bh); 2660 2660 nr++; 2661 2661 } 2662 2662 put_bh(bh); ··· 2716 2716 struct buffer_head *next = bh->b_this_page; 2717 2717 if (buffer_async_write(bh)) { 2718 2718 clear_buffer_dirty(bh); 2719 - submit_bh(REQ_OP_WRITE, 0, bh); 2719 + submit_bh(REQ_OP_WRITE, bh); 2720 2720 nr++; 2721 2721 } 2722 2722 put_bh(bh);
+6 -6
fs/reiserfs/journal.c
··· 650 650 BUG(); 651 651 if (!buffer_uptodate(bh)) 652 652 BUG(); 653 - submit_bh(REQ_OP_WRITE, 0, bh); 653 + submit_bh(REQ_OP_WRITE, bh); 654 654 } 655 655 656 656 static void submit_ordered_buffer(struct buffer_head *bh) ··· 660 660 clear_buffer_dirty(bh); 661 661 if (!buffer_uptodate(bh)) 662 662 BUG(); 663 - submit_bh(REQ_OP_WRITE, 0, bh); 663 + submit_bh(REQ_OP_WRITE, bh); 664 664 } 665 665 666 666 #define CHUNK_SIZE 32 ··· 868 868 */ 869 869 if (buffer_dirty(bh) && unlikely(bh->b_page->mapping == NULL)) { 870 870 spin_unlock(lock); 871 - ll_rw_block(REQ_OP_WRITE, 0, 1, &bh); 871 + ll_rw_block(REQ_OP_WRITE, 1, &bh); 872 872 spin_lock(lock); 873 873 } 874 874 put_bh(bh); ··· 1054 1054 if (tbh) { 1055 1055 if (buffer_dirty(tbh)) { 1056 1056 depth = reiserfs_write_unlock_nested(s); 1057 - ll_rw_block(REQ_OP_WRITE, 0, 1, &tbh); 1057 + ll_rw_block(REQ_OP_WRITE, 1, &tbh); 1058 1058 reiserfs_write_lock_nested(s, depth); 1059 1059 } 1060 1060 put_bh(tbh) ; ··· 2240 2240 } 2241 2241 } 2242 2242 /* read in the log blocks, memcpy to the corresponding real block */ 2243 - ll_rw_block(REQ_OP_READ, 0, get_desc_trans_len(desc), log_blocks); 2243 + ll_rw_block(REQ_OP_READ, get_desc_trans_len(desc), log_blocks); 2244 2244 for (i = 0; i < get_desc_trans_len(desc); i++) { 2245 2245 2246 2246 wait_on_buffer(log_blocks[i]); ··· 2342 2342 } else 2343 2343 bhlist[j++] = bh; 2344 2344 } 2345 - ll_rw_block(REQ_OP_READ, 0, j, bhlist); 2345 + ll_rw_block(REQ_OP_READ, j, bhlist); 2346 2346 for (i = 1; i < j; i++) 2347 2347 brelse(bhlist[i]); 2348 2348 bh = bhlist[0];
+2 -2
fs/reiserfs/stree.c
··· 579 579 if (!buffer_uptodate(bh[j])) { 580 580 if (depth == -1) 581 581 depth = reiserfs_write_unlock_nested(s); 582 - ll_rw_block(REQ_OP_READ, REQ_RAHEAD, 1, bh + j); 582 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD, 1, bh + j); 583 583 } 584 584 brelse(bh[j]); 585 585 } ··· 685 685 if (!buffer_uptodate(bh) && depth == -1) 686 686 depth = reiserfs_write_unlock_nested(sb); 687 687 688 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 688 + ll_rw_block(REQ_OP_READ, 1, &bh); 689 689 wait_on_buffer(bh); 690 690 691 691 if (depth != -1)
+1 -1
fs/reiserfs/super.c
··· 1702 1702 /* after journal replay, reread all bitmap and super blocks */ 1703 1703 static int reread_meta_blocks(struct super_block *s) 1704 1704 { 1705 - ll_rw_block(REQ_OP_READ, 0, 1, &SB_BUFFER_WITH_SB(s)); 1705 + ll_rw_block(REQ_OP_READ, 1, &SB_BUFFER_WITH_SB(s)); 1706 1706 wait_on_buffer(SB_BUFFER_WITH_SB(s)); 1707 1707 if (!buffer_uptodate(SB_BUFFER_WITH_SB(s))) { 1708 1708 reiserfs_warning(s, "reiserfs-2504", "error reading the super");
+1 -1
fs/udf/dir.c
··· 130 130 brelse(tmp); 131 131 } 132 132 if (num) { 133 - ll_rw_block(REQ_OP_READ, REQ_RAHEAD, num, bha); 133 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD, num, bha); 134 134 for (i = 0; i < num; i++) 135 135 brelse(bha[i]); 136 136 }
+1 -1
fs/udf/directory.c
··· 89 89 brelse(tmp); 90 90 } 91 91 if (num) { 92 - ll_rw_block(REQ_OP_READ, REQ_RAHEAD, num, bha); 92 + ll_rw_block(REQ_OP_READ | REQ_RAHEAD, num, bha); 93 93 for (i = 0; i < num; i++) 94 94 brelse(bha[i]); 95 95 }
+1 -1
fs/udf/inode.c
··· 1214 1214 if (buffer_uptodate(bh)) 1215 1215 return bh; 1216 1216 1217 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 1217 + ll_rw_block(REQ_OP_READ, 1, &bh); 1218 1218 1219 1219 wait_on_buffer(bh); 1220 1220 if (buffer_uptodate(bh))
+1 -1
fs/ufs/balloc.c
··· 296 296 if (!buffer_mapped(bh)) 297 297 map_bh(bh, inode->i_sb, oldb + pos); 298 298 if (!buffer_uptodate(bh)) { 299 - ll_rw_block(REQ_OP_READ, 0, 1, &bh); 299 + ll_rw_block(REQ_OP_READ, 1, &bh); 300 300 wait_on_buffer(bh); 301 301 if (!buffer_uptodate(bh)) { 302 302 ufs_error(inode->i_sb, __func__,
+1 -1
fs/xfs/xfs_bio_io.c
··· 15 15 sector_t sector, 16 16 unsigned int count, 17 17 char *data, 18 - unsigned int op) 18 + enum req_op op) 19 19 20 20 { 21 21 unsigned int is_vmalloc = is_vmalloc_addr(data);
+2 -2
fs/xfs/xfs_buf.c
··· 1416 1416 int map, 1417 1417 int *buf_offset, 1418 1418 int *count, 1419 - int op) 1419 + blk_opf_t op) 1420 1420 { 1421 1421 int page_index; 1422 1422 unsigned int total_nr_pages = bp->b_page_count; ··· 1493 1493 struct xfs_buf *bp) 1494 1494 { 1495 1495 struct blk_plug plug; 1496 - int op; 1496 + blk_opf_t op; 1497 1497 int offset; 1498 1498 int size; 1499 1499 int i;
+1 -1
fs/xfs/xfs_linux.h
··· 196 196 } 197 197 198 198 int xfs_rw_bdev(struct block_device *bdev, sector_t sector, unsigned int count, 199 - char *data, unsigned int op); 199 + char *data, enum req_op op); 200 200 201 201 #define ASSERT_ALWAYS(expr) \ 202 202 (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
+1 -1
fs/xfs/xfs_log_recover.c
··· 122 122 xfs_daddr_t blk_no, 123 123 unsigned int nbblks, 124 124 char *data, 125 - unsigned int op) 125 + enum req_op op) 126 126 { 127 127 int error; 128 128
+10 -12
fs/zonefs/super.c
··· 60 60 } 61 61 } 62 62 63 - static inline int zonefs_zone_mgmt(struct inode *inode, 64 - enum req_opf op) 63 + static inline int zonefs_zone_mgmt(struct inode *inode, enum req_op op) 65 64 { 66 65 struct zonefs_inode_info *zi = ZONEFS_I(inode); 67 66 int ret; ··· 524 525 { 525 526 struct zonefs_inode_info *zi = ZONEFS_I(inode); 526 527 loff_t old_isize; 527 - enum req_opf op; 528 + enum req_op op; 528 529 int ret = 0; 529 530 530 531 /* ··· 1393 1394 { 1394 1395 struct super_block *sb = parent->i_sb; 1395 1396 1396 - inode->i_ino = blkdev_nr_zones(sb->s_bdev->bd_disk) + type + 1; 1397 + inode->i_ino = bdev_nr_zones(sb->s_bdev) + type + 1; 1397 1398 inode_init_owner(&init_user_ns, inode, parent, S_IFDIR | 0555); 1398 1399 inode->i_op = &zonefs_dir_inode_operations; 1399 1400 inode->i_fop = &simple_dir_operations; ··· 1539 1540 /* 1540 1541 * The first zone contains the super block: skip it. 1541 1542 */ 1542 - end = zd->zones + blkdev_nr_zones(sb->s_bdev->bd_disk); 1543 + end = zd->zones + bdev_nr_zones(sb->s_bdev); 1543 1544 for (zone = &zd->zones[1]; zone < end; zone = next) { 1544 1545 1545 1546 next = zone + 1; ··· 1634 1635 struct block_device *bdev = zd->sb->s_bdev; 1635 1636 int ret; 1636 1637 1637 - zd->zones = kvcalloc(blkdev_nr_zones(bdev->bd_disk), 1638 - sizeof(struct blk_zone), GFP_KERNEL); 1638 + zd->zones = kvcalloc(bdev_nr_zones(bdev), sizeof(struct blk_zone), 1639 + GFP_KERNEL); 1639 1640 if (!zd->zones) 1640 1641 return -ENOMEM; 1641 1642 ··· 1647 1648 return ret; 1648 1649 } 1649 1650 1650 - if (ret != blkdev_nr_zones(bdev->bd_disk)) { 1651 + if (ret != bdev_nr_zones(bdev)) { 1651 1652 zonefs_err(zd->sb, "Invalid zone report (%d/%u zones)\n", 1652 - ret, blkdev_nr_zones(bdev->bd_disk)); 1653 + ret, bdev_nr_zones(bdev)); 1653 1654 return -EIO; 1654 1655 } 1655 1656 ··· 1815 1816 if (ret) 1816 1817 goto cleanup; 1817 1818 1818 - zonefs_info(sb, "Mounting %u zones", 1819 - blkdev_nr_zones(sb->s_bdev->bd_disk)); 1819 + zonefs_info(sb, "Mounting %u zones", bdev_nr_zones(sb->s_bdev)); 1820 1820 1821 1821 if (!sbi->s_max_wro_seq_files && 1822 1822 !sbi->s_max_active_seq_files && ··· 1831 1833 if (!inode) 1832 1834 goto cleanup; 1833 1835 1834 - inode->i_ino = blkdev_nr_zones(sb->s_bdev->bd_disk); 1836 + inode->i_ino = bdev_nr_zones(sb->s_bdev); 1835 1837 inode->i_mode = S_IFDIR | 0555; 1836 1838 inode->i_ctime = inode->i_mtime = inode->i_atime = current_time(inode); 1837 1839 inode->i_op = &zonefs_dir_inode_operations;
+2 -2
fs/zonefs/trace.h
··· 20 20 #define show_dev(dev) MAJOR(dev), MINOR(dev) 21 21 22 22 TRACE_EVENT(zonefs_zone_mgmt, 23 - TP_PROTO(struct inode *inode, enum req_opf op), 23 + TP_PROTO(struct inode *inode, enum req_op op), 24 24 TP_ARGS(inode, op), 25 25 TP_STRUCT__entry( 26 26 __field(dev_t, dev) 27 27 __field(ino_t, ino) 28 - __field(int, op) 28 + __field(enum req_op, op) 29 29 __field(sector_t, sector) 30 30 __field(sector_t, nr_sectors) 31 31 ),
+5 -5
include/linux/bio.h
··· 405 405 extern int biovec_init_pool(mempool_t *pool, int pool_entries); 406 406 407 407 struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned short nr_vecs, 408 - unsigned int opf, gfp_t gfp_mask, 408 + blk_opf_t opf, gfp_t gfp_mask, 409 409 struct bio_set *bs); 410 410 struct bio *bio_kmalloc(unsigned short nr_vecs, gfp_t gfp_mask); 411 411 extern void bio_put(struct bio *); ··· 418 418 extern struct bio_set fs_bio_set; 419 419 420 420 static inline struct bio *bio_alloc(struct block_device *bdev, 421 - unsigned short nr_vecs, unsigned int opf, gfp_t gfp_mask) 421 + unsigned short nr_vecs, blk_opf_t opf, gfp_t gfp_mask) 422 422 { 423 423 return bio_alloc_bioset(bdev, nr_vecs, opf, gfp_mask, &fs_bio_set); 424 424 } ··· 456 456 457 457 extern int submit_bio_wait(struct bio *bio); 458 458 void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table, 459 - unsigned short max_vecs, unsigned int opf); 459 + unsigned short max_vecs, blk_opf_t opf); 460 460 extern void bio_uninit(struct bio *); 461 - void bio_reset(struct bio *bio, struct block_device *bdev, unsigned int opf); 461 + void bio_reset(struct bio *bio, struct block_device *bdev, blk_opf_t opf); 462 462 void bio_chain(struct bio *, struct bio *); 463 463 464 464 int bio_add_page(struct bio *, struct page *, unsigned len, unsigned off); ··· 789 789 } 790 790 791 791 struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev, 792 - unsigned int nr_pages, unsigned int opf, gfp_t gfp); 792 + unsigned int nr_pages, blk_opf_t opf, gfp_t gfp); 793 793 794 794 #endif /* __LINUX_BIO_H */
+22 -12
include/linux/blk-mq.h
··· 57 57 #define RQF_TIMED_OUT ((__force req_flags_t)(1 << 21)) 58 58 /* queue has elevator attached */ 59 59 #define RQF_ELV ((__force req_flags_t)(1 << 22)) 60 + #define RQF_RESV ((__force req_flags_t)(1 << 23)) 60 61 61 62 /* flags that prevent us from merging requests: */ 62 63 #define RQF_NOMERGE_FLAGS \ ··· 80 79 struct blk_mq_ctx *mq_ctx; 81 80 struct blk_mq_hw_ctx *mq_hctx; 82 81 83 - unsigned int cmd_flags; /* op and common flags */ 82 + blk_opf_t cmd_flags; /* op and common flags */ 84 83 req_flags_t rq_flags; 85 84 86 85 int tag; ··· 198 197 void *end_io_data; 199 198 }; 200 199 201 - #define req_op(req) \ 202 - ((req)->cmd_flags & REQ_OP_MASK) 200 + static inline enum req_op req_op(const struct request *req) 201 + { 202 + return req->cmd_flags & REQ_OP_MASK; 203 + } 203 204 204 205 static inline bool blk_rq_is_passthrough(struct request *rq) 205 206 { ··· 522 519 bool last; 523 520 }; 524 521 525 - typedef bool (busy_tag_iter_fn)(struct request *, void *, bool); 522 + typedef bool (busy_tag_iter_fn)(struct request *, void *); 526 523 527 524 /** 528 525 * struct blk_mq_ops - Callback functions that implements block driver ··· 577 574 /** 578 575 * @timeout: Called on request timeout. 579 576 */ 580 - enum blk_eh_timer_return (*timeout)(struct request *, bool); 577 + enum blk_eh_timer_return (*timeout)(struct request *); 581 578 582 579 /** 583 580 * @poll: Called to poll for completion of a specific tag. ··· 689 686 \ 690 687 __blk_mq_alloc_disk(set, queuedata, &__key); \ 691 688 }) 689 + struct gendisk *blk_mq_alloc_disk_for_queue(struct request_queue *q, 690 + struct lock_class_key *lkclass); 692 691 struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *); 693 692 int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, 694 693 struct request_queue *q); 695 - void blk_mq_unregister_dev(struct device *, struct request_queue *); 694 + void blk_mq_destroy_queue(struct request_queue *); 696 695 697 696 int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set); 698 697 int blk_mq_alloc_sq_tag_set(struct blk_mq_tag_set *set, ··· 715 710 BLK_MQ_REQ_PM = (__force blk_mq_req_flags_t)(1 << 2), 716 711 }; 717 712 718 - struct request *blk_mq_alloc_request(struct request_queue *q, unsigned int op, 713 + struct request *blk_mq_alloc_request(struct request_queue *q, blk_opf_t opf, 719 714 blk_mq_req_flags_t flags); 720 715 struct request *blk_mq_alloc_request_hctx(struct request_queue *q, 721 - unsigned int op, blk_mq_req_flags_t flags, 716 + blk_opf_t opf, blk_mq_req_flags_t flags, 722 717 unsigned int hctx_idx); 723 718 724 719 /* ··· 826 821 static inline bool blk_mq_need_time_stamp(struct request *rq) 827 822 { 828 823 return (rq->rq_flags & (RQF_IO_STAT | RQF_STATS | RQF_ELV)); 824 + } 825 + 826 + static inline bool blk_mq_is_reserved_rq(struct request *rq) 827 + { 828 + return rq->rq_flags & RQF_RESV; 829 829 } 830 830 831 831 /* ··· 1131 1121 #ifdef CONFIG_BLK_DEV_ZONED 1132 1122 static inline unsigned int blk_rq_zone_no(struct request *rq) 1133 1123 { 1134 - return blk_queue_zone_no(rq->q, blk_rq_pos(rq)); 1124 + return disk_zone_no(rq->q->disk, blk_rq_pos(rq)); 1135 1125 } 1136 1126 1137 1127 static inline unsigned int blk_rq_zone_is_seq(struct request *rq) 1138 1128 { 1139 - return blk_queue_zone_is_seq(rq->q, blk_rq_pos(rq)); 1129 + return disk_zone_is_seq(rq->q->disk, blk_rq_pos(rq)); 1140 1130 } 1141 1131 1142 1132 bool blk_req_needs_zone_write_lock(struct request *rq); ··· 1158 1148 1159 1149 static inline bool blk_req_zone_is_write_locked(struct request *rq) 1160 1150 { 1161 - return rq->q->seq_zones_wlock && 1162 - test_bit(blk_rq_zone_no(rq), rq->q->seq_zones_wlock); 1151 + return rq->q->disk->seq_zones_wlock && 1152 + test_bit(blk_rq_zone_no(rq), rq->q->disk->seq_zones_wlock); 1163 1153 } 1164 1154 1165 1155 static inline bool blk_req_can_dispatch_to_zone(struct request *rq)
+61 -54
include/linux/blk_types.h
··· 240 240 ((u64)size << BIO_ISSUE_SIZE_SHIFT)); 241 241 } 242 242 243 + typedef __u32 __bitwise blk_opf_t; 244 + 243 245 typedef unsigned int blk_qc_t; 244 246 #define BLK_QC_T_NONE -1U 245 247 ··· 252 250 struct bio { 253 251 struct bio *bi_next; /* request queue link */ 254 252 struct block_device *bi_bdev; 255 - unsigned int bi_opf; /* bottom bits REQ_OP, top bits 253 + blk_opf_t bi_opf; /* bottom bits REQ_OP, top bits 256 254 * req_flags. 257 255 */ 258 256 unsigned short bi_flags; /* BIO_* below */ ··· 339 337 340 338 typedef __u32 __bitwise blk_mq_req_flags_t; 341 339 342 - /* 343 - * Operations and flags common to the bio and request structures. 340 + #define REQ_OP_BITS 8 341 + #define REQ_OP_MASK (__force blk_opf_t)((1 << REQ_OP_BITS) - 1) 342 + #define REQ_FLAG_BITS 24 343 + 344 + /** 345 + * enum req_op - Operations common to the bio and request structures. 344 346 * We use 8 bits for encoding the operation, and the remaining 24 for flags. 345 347 * 346 348 * The least significant bit of the operation number indicates the data ··· 356 350 * If a operation does not transfer data the least significant bit has no 357 351 * meaning. 358 352 */ 359 - #define REQ_OP_BITS 8 360 - #define REQ_OP_MASK ((1 << REQ_OP_BITS) - 1) 361 - #define REQ_FLAG_BITS 24 362 - 363 - enum req_opf { 353 + enum req_op { 364 354 /* read sectors from the device */ 365 - REQ_OP_READ = 0, 355 + REQ_OP_READ = (__force blk_opf_t)0, 366 356 /* write sectors to the device */ 367 - REQ_OP_WRITE = 1, 357 + REQ_OP_WRITE = (__force blk_opf_t)1, 368 358 /* flush the volatile write cache */ 369 - REQ_OP_FLUSH = 2, 359 + REQ_OP_FLUSH = (__force blk_opf_t)2, 370 360 /* discard sectors */ 371 - REQ_OP_DISCARD = 3, 361 + REQ_OP_DISCARD = (__force blk_opf_t)3, 372 362 /* securely erase sectors */ 373 - REQ_OP_SECURE_ERASE = 5, 363 + REQ_OP_SECURE_ERASE = (__force blk_opf_t)5, 374 364 /* write the zero filled sector many times */ 375 - REQ_OP_WRITE_ZEROES = 9, 365 + REQ_OP_WRITE_ZEROES = (__force blk_opf_t)9, 376 366 /* Open a zone */ 377 - REQ_OP_ZONE_OPEN = 10, 367 + REQ_OP_ZONE_OPEN = (__force blk_opf_t)10, 378 368 /* Close a zone */ 379 - REQ_OP_ZONE_CLOSE = 11, 369 + REQ_OP_ZONE_CLOSE = (__force blk_opf_t)11, 380 370 /* Transition a zone to full */ 381 - REQ_OP_ZONE_FINISH = 12, 371 + REQ_OP_ZONE_FINISH = (__force blk_opf_t)12, 382 372 /* write data at the current zone write pointer */ 383 - REQ_OP_ZONE_APPEND = 13, 373 + REQ_OP_ZONE_APPEND = (__force blk_opf_t)13, 384 374 /* reset a zone write pointer */ 385 - REQ_OP_ZONE_RESET = 15, 375 + REQ_OP_ZONE_RESET = (__force blk_opf_t)15, 386 376 /* reset all the zone present on the device */ 387 - REQ_OP_ZONE_RESET_ALL = 17, 377 + REQ_OP_ZONE_RESET_ALL = (__force blk_opf_t)17, 388 378 389 379 /* Driver private requests */ 390 - REQ_OP_DRV_IN = 34, 391 - REQ_OP_DRV_OUT = 35, 380 + REQ_OP_DRV_IN = (__force blk_opf_t)34, 381 + REQ_OP_DRV_OUT = (__force blk_opf_t)35, 392 382 393 - REQ_OP_LAST, 383 + REQ_OP_LAST = (__force blk_opf_t)36, 394 384 }; 395 385 396 386 enum req_flag_bits { ··· 427 425 __REQ_NR_BITS, /* stops here */ 428 426 }; 429 427 430 - #define REQ_FAILFAST_DEV (1ULL << __REQ_FAILFAST_DEV) 431 - #define REQ_FAILFAST_TRANSPORT (1ULL << __REQ_FAILFAST_TRANSPORT) 432 - #define REQ_FAILFAST_DRIVER (1ULL << __REQ_FAILFAST_DRIVER) 433 - #define REQ_SYNC (1ULL << __REQ_SYNC) 434 - #define REQ_META (1ULL << __REQ_META) 435 - #define REQ_PRIO (1ULL << __REQ_PRIO) 436 - #define REQ_NOMERGE (1ULL << __REQ_NOMERGE) 437 - #define REQ_IDLE (1ULL << __REQ_IDLE) 438 - #define REQ_INTEGRITY (1ULL << __REQ_INTEGRITY) 439 - #define REQ_FUA (1ULL << __REQ_FUA) 440 - #define REQ_PREFLUSH (1ULL << __REQ_PREFLUSH) 441 - #define REQ_RAHEAD (1ULL << __REQ_RAHEAD) 442 - #define REQ_BACKGROUND (1ULL << __REQ_BACKGROUND) 443 - #define REQ_NOWAIT (1ULL << __REQ_NOWAIT) 444 - #define REQ_CGROUP_PUNT (1ULL << __REQ_CGROUP_PUNT) 428 + #define REQ_FAILFAST_DEV \ 429 + (__force blk_opf_t)(1ULL << __REQ_FAILFAST_DEV) 430 + #define REQ_FAILFAST_TRANSPORT \ 431 + (__force blk_opf_t)(1ULL << __REQ_FAILFAST_TRANSPORT) 432 + #define REQ_FAILFAST_DRIVER \ 433 + (__force blk_opf_t)(1ULL << __REQ_FAILFAST_DRIVER) 434 + #define REQ_SYNC (__force blk_opf_t)(1ULL << __REQ_SYNC) 435 + #define REQ_META (__force blk_opf_t)(1ULL << __REQ_META) 436 + #define REQ_PRIO (__force blk_opf_t)(1ULL << __REQ_PRIO) 437 + #define REQ_NOMERGE (__force blk_opf_t)(1ULL << __REQ_NOMERGE) 438 + #define REQ_IDLE (__force blk_opf_t)(1ULL << __REQ_IDLE) 439 + #define REQ_INTEGRITY (__force blk_opf_t)(1ULL << __REQ_INTEGRITY) 440 + #define REQ_FUA (__force blk_opf_t)(1ULL << __REQ_FUA) 441 + #define REQ_PREFLUSH (__force blk_opf_t)(1ULL << __REQ_PREFLUSH) 442 + #define REQ_RAHEAD (__force blk_opf_t)(1ULL << __REQ_RAHEAD) 443 + #define REQ_BACKGROUND (__force blk_opf_t)(1ULL << __REQ_BACKGROUND) 444 + #define REQ_NOWAIT (__force blk_opf_t)(1ULL << __REQ_NOWAIT) 445 + #define REQ_CGROUP_PUNT (__force blk_opf_t)(1ULL << __REQ_CGROUP_PUNT) 445 446 446 - #define REQ_NOUNMAP (1ULL << __REQ_NOUNMAP) 447 - #define REQ_POLLED (1ULL << __REQ_POLLED) 448 - #define REQ_ALLOC_CACHE (1ULL << __REQ_ALLOC_CACHE) 447 + #define REQ_NOUNMAP (__force blk_opf_t)(1ULL << __REQ_NOUNMAP) 448 + #define REQ_POLLED (__force blk_opf_t)(1ULL << __REQ_POLLED) 449 + #define REQ_ALLOC_CACHE (__force blk_opf_t)(1ULL << __REQ_ALLOC_CACHE) 449 450 450 - #define REQ_DRV (1ULL << __REQ_DRV) 451 - #define REQ_SWAP (1ULL << __REQ_SWAP) 451 + #define REQ_DRV (__force blk_opf_t)(1ULL << __REQ_DRV) 452 + #define REQ_SWAP (__force blk_opf_t)(1ULL << __REQ_SWAP) 452 453 453 454 #define REQ_FAILFAST_MASK \ 454 455 (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) ··· 468 463 NR_STAT_GROUPS 469 464 }; 470 465 471 - #define bio_op(bio) \ 472 - ((bio)->bi_opf & REQ_OP_MASK) 466 + static inline enum req_op bio_op(const struct bio *bio) 467 + { 468 + return bio->bi_opf & REQ_OP_MASK; 469 + } 473 470 474 471 /* obsolete, don't use in new code */ 475 - static inline void bio_set_op_attrs(struct bio *bio, unsigned op, 476 - unsigned op_flags) 472 + static inline void bio_set_op_attrs(struct bio *bio, enum req_op op, 473 + blk_opf_t op_flags) 477 474 { 478 475 bio->bi_opf = op | op_flags; 479 476 } 480 477 481 - static inline bool op_is_write(unsigned int op) 478 + static inline bool op_is_write(blk_opf_t op) 482 479 { 483 - return (op & 1); 480 + return !!(op & (__force blk_opf_t)1); 484 481 } 485 482 486 483 /* 487 484 * Check if the bio or request is one that needs special treatment in the 488 485 * flush state machine. 489 486 */ 490 - static inline bool op_is_flush(unsigned int op) 487 + static inline bool op_is_flush(blk_opf_t op) 491 488 { 492 489 return op & (REQ_FUA | REQ_PREFLUSH); 493 490 } ··· 499 492 * PREFLUSH flag. Other operations may be marked as synchronous using the 500 493 * REQ_SYNC flag. 501 494 */ 502 - static inline bool op_is_sync(unsigned int op) 495 + static inline bool op_is_sync(blk_opf_t op) 503 496 { 504 497 return (op & REQ_OP_MASK) == REQ_OP_READ || 505 498 (op & (REQ_SYNC | REQ_FUA | REQ_PREFLUSH)); 506 499 } 507 500 508 - static inline bool op_is_discard(unsigned int op) 501 + static inline bool op_is_discard(blk_opf_t op) 509 502 { 510 503 return (op & REQ_OP_MASK) == REQ_OP_DISCARD; 511 504 } ··· 516 509 * due to its different handling in the block layer and device response in 517 510 * case of command failure. 518 511 */ 519 - static inline bool op_is_zone_mgmt(enum req_opf op) 512 + static inline bool op_is_zone_mgmt(enum req_op op) 520 513 { 521 514 switch (op & REQ_OP_MASK) { 522 515 case REQ_OP_ZONE_RESET: ··· 529 522 } 530 523 } 531 524 532 - static inline int op_stat_group(unsigned int op) 525 + static inline int op_stat_group(enum req_op op) 533 526 { 534 527 if (op_is_discard(op)) 535 528 return STAT_DISCARD;
+94 -140
include/linux/blkdev.h
··· 148 148 #define GD_NATIVE_CAPACITY 3 149 149 #define GD_ADDED 4 150 150 #define GD_SUPPRESS_PART_SCAN 5 151 + #define GD_OWNS_QUEUE 6 151 152 152 153 struct mutex open_mutex; /* open/close mutex */ 153 154 unsigned open_partitions; /* number of open partitions */ ··· 164 163 #ifdef CONFIG_BLK_DEV_INTEGRITY 165 164 struct kobject integrity_kobj; 166 165 #endif /* CONFIG_BLK_DEV_INTEGRITY */ 166 + 167 + #ifdef CONFIG_BLK_DEV_ZONED 168 + /* 169 + * Zoned block device information for request dispatch control. 170 + * nr_zones is the total number of zones of the device. This is always 171 + * 0 for regular block devices. conv_zones_bitmap is a bitmap of nr_zones 172 + * bits which indicates if a zone is conventional (bit set) or 173 + * sequential (bit clear). seq_zones_wlock is a bitmap of nr_zones 174 + * bits which indicates if a zone is write locked, that is, if a write 175 + * request targeting the zone was dispatched. 176 + * 177 + * Reads of this information must be protected with blk_queue_enter() / 178 + * blk_queue_exit(). Modifying this information is only allowed while 179 + * no requests are being processed. See also blk_mq_freeze_queue() and 180 + * blk_mq_unfreeze_queue(). 181 + */ 182 + unsigned int nr_zones; 183 + unsigned int max_open_zones; 184 + unsigned int max_active_zones; 185 + unsigned long *conv_zones_bitmap; 186 + unsigned long *seq_zones_wlock; 187 + #endif /* CONFIG_BLK_DEV_ZONED */ 188 + 167 189 #if IS_ENABLED(CONFIG_CDROM) 168 190 struct cdrom_device_info *cdi; 169 191 #endif ··· 194 170 struct badblocks *bb; 195 171 struct lockdep_map lockdep_map; 196 172 u64 diskseq; 173 + 174 + /* 175 + * Independent sector access ranges. This is always NULL for 176 + * devices that do not have multiple independent access ranges. 177 + */ 178 + struct blk_independent_access_ranges *ia_ranges; 197 179 }; 198 180 199 181 static inline bool disk_live(struct gendisk *disk) ··· 250 220 return 0; 251 221 } 252 222 253 - static inline bool blk_op_is_passthrough(unsigned int op) 223 + static inline bool blk_op_is_passthrough(blk_opf_t op) 254 224 { 255 225 op &= REQ_OP_MASK; 256 226 return op == REQ_OP_DRV_IN || op == REQ_OP_DRV_OUT; ··· 314 284 typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx, 315 285 void *data); 316 286 317 - void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model); 287 + void disk_set_zoned(struct gendisk *disk, enum blk_zoned_model model); 318 288 319 289 #ifdef CONFIG_BLK_DEV_ZONED 320 290 321 291 #define BLK_ALL_ZONES ((unsigned int)-1) 322 292 int blkdev_report_zones(struct block_device *bdev, sector_t sector, 323 293 unsigned int nr_zones, report_zones_cb cb, void *data); 324 - unsigned int blkdev_nr_zones(struct gendisk *disk); 325 - extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op, 294 + unsigned int bdev_nr_zones(struct block_device *bdev); 295 + extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op, 326 296 sector_t sectors, sector_t nr_sectors, 327 297 gfp_t gfp_mask); 328 298 int blk_revalidate_disk_zones(struct gendisk *disk, ··· 335 305 336 306 #else /* CONFIG_BLK_DEV_ZONED */ 337 307 338 - static inline unsigned int blkdev_nr_zones(struct gendisk *disk) 308 + static inline unsigned int bdev_nr_zones(struct block_device *bdev) 339 309 { 340 310 return 0; 341 311 } ··· 454 424 unsigned long nr_requests; /* Max # of requests */ 455 425 456 426 unsigned int dma_pad_mask; 427 + /* 428 + * Drivers that set dma_alignment to less than 511 must be prepared to 429 + * handle individual bvec's that are not a multiple of a SECTOR_SIZE 430 + * due to possible offsets. 431 + */ 457 432 unsigned int dma_alignment; 458 433 459 434 #ifdef CONFIG_BLK_INLINE_ENCRYPTION ··· 489 454 struct queue_limits limits; 490 455 491 456 unsigned int required_elevator_features; 492 - 493 - #ifdef CONFIG_BLK_DEV_ZONED 494 - /* 495 - * Zoned block device information for request dispatch control. 496 - * nr_zones is the total number of zones of the device. This is always 497 - * 0 for regular block devices. conv_zones_bitmap is a bitmap of nr_zones 498 - * bits which indicates if a zone is conventional (bit set) or 499 - * sequential (bit clear). seq_zones_wlock is a bitmap of nr_zones 500 - * bits which indicates if a zone is write locked, that is, if a write 501 - * request targeting the zone was dispatched. All three fields are 502 - * initialized by the low level device driver (e.g. scsi/sd.c). 503 - * Stacking drivers (device mappers) may or may not initialize 504 - * these fields. 505 - * 506 - * Reads of this information must be protected with blk_queue_enter() / 507 - * blk_queue_exit(). Modifying this information is only allowed while 508 - * no requests are being processed. See also blk_mq_freeze_queue() and 509 - * blk_mq_unfreeze_queue(). 510 - */ 511 - unsigned int nr_zones; 512 - unsigned long *conv_zones_bitmap; 513 - unsigned long *seq_zones_wlock; 514 - unsigned int max_open_zones; 515 - unsigned int max_active_zones; 516 - #endif /* CONFIG_BLK_DEV_ZONED */ 517 457 518 458 int node; 519 459 #ifdef CONFIG_BLK_DEV_IO_TRACE ··· 543 533 544 534 bool mq_sysfs_init_done; 545 535 546 - /* 547 - * Independent sector access ranges. This is always NULL for 548 - * devices that do not have multiple independent access ranges. 549 - */ 550 - struct blk_independent_access_ranges *ia_ranges; 551 - 552 536 /** 553 537 * @srcu: Sleepable RCU. Use as lock when type of the request queue 554 538 * is blocking (BLK_MQ_F_BLOCKING). Must be the last member ··· 563 559 #define QUEUE_FLAG_NOXMERGES 9 /* No extended merges */ 564 560 #define QUEUE_FLAG_ADD_RANDOM 10 /* Contributes to random pool */ 565 561 #define QUEUE_FLAG_SAME_FORCE 12 /* force complete on same CPU */ 566 - #define QUEUE_FLAG_DEAD 13 /* queue tear-down finished */ 567 562 #define QUEUE_FLAG_INIT_DONE 14 /* queue is initialized */ 568 563 #define QUEUE_FLAG_STABLE_WRITES 15 /* don't modify blks until WB is done */ 569 564 #define QUEUE_FLAG_POLL 16 /* IO polling enabled if set */ ··· 590 587 #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) 591 588 #define blk_queue_dying(q) test_bit(QUEUE_FLAG_DYING, &(q)->queue_flags) 592 589 #define blk_queue_has_srcu(q) test_bit(QUEUE_FLAG_HAS_SRCU, &(q)->queue_flags) 593 - #define blk_queue_dead(q) test_bit(QUEUE_FLAG_DEAD, &(q)->queue_flags) 594 590 #define blk_queue_init_done(q) test_bit(QUEUE_FLAG_INIT_DONE, &(q)->queue_flags) 595 591 #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) 596 592 #define blk_queue_noxmerges(q) \ ··· 665 663 } 666 664 } 667 665 668 - static inline sector_t blk_queue_zone_sectors(struct request_queue *q) 669 - { 670 - return blk_queue_is_zoned(q) ? q->limits.chunk_sectors : 0; 671 - } 672 - 673 666 #ifdef CONFIG_BLK_DEV_ZONED 674 - static inline unsigned int blk_queue_nr_zones(struct request_queue *q) 667 + static inline unsigned int disk_nr_zones(struct gendisk *disk) 675 668 { 676 - return blk_queue_is_zoned(q) ? q->nr_zones : 0; 669 + return blk_queue_is_zoned(disk->queue) ? disk->nr_zones : 0; 677 670 } 678 671 679 - static inline unsigned int blk_queue_zone_no(struct request_queue *q, 680 - sector_t sector) 672 + static inline unsigned int disk_zone_no(struct gendisk *disk, sector_t sector) 681 673 { 682 - if (!blk_queue_is_zoned(q)) 674 + if (!blk_queue_is_zoned(disk->queue)) 683 675 return 0; 684 - return sector >> ilog2(q->limits.chunk_sectors); 676 + return sector >> ilog2(disk->queue->limits.chunk_sectors); 685 677 } 686 678 687 - static inline bool blk_queue_zone_is_seq(struct request_queue *q, 688 - sector_t sector) 679 + static inline bool disk_zone_is_seq(struct gendisk *disk, sector_t sector) 689 680 { 690 - if (!blk_queue_is_zoned(q)) 681 + if (!blk_queue_is_zoned(disk->queue)) 691 682 return false; 692 - if (!q->conv_zones_bitmap) 683 + if (!disk->conv_zones_bitmap) 693 684 return true; 694 - return !test_bit(blk_queue_zone_no(q, sector), q->conv_zones_bitmap); 685 + return !test_bit(disk_zone_no(disk, sector), disk->conv_zones_bitmap); 695 686 } 696 687 697 - static inline void blk_queue_max_open_zones(struct request_queue *q, 688 + static inline void disk_set_max_open_zones(struct gendisk *disk, 698 689 unsigned int max_open_zones) 699 690 { 700 - q->max_open_zones = max_open_zones; 691 + disk->max_open_zones = max_open_zones; 701 692 } 702 693 703 - static inline unsigned int queue_max_open_zones(const struct request_queue *q) 704 - { 705 - return q->max_open_zones; 706 - } 707 - 708 - static inline void blk_queue_max_active_zones(struct request_queue *q, 694 + static inline void disk_set_max_active_zones(struct gendisk *disk, 709 695 unsigned int max_active_zones) 710 696 { 711 - q->max_active_zones = max_active_zones; 697 + disk->max_active_zones = max_active_zones; 712 698 } 713 699 714 - static inline unsigned int queue_max_active_zones(const struct request_queue *q) 700 + static inline unsigned int bdev_max_open_zones(struct block_device *bdev) 715 701 { 716 - return q->max_active_zones; 702 + return bdev->bd_disk->max_open_zones; 717 703 } 704 + 705 + static inline unsigned int bdev_max_active_zones(struct block_device *bdev) 706 + { 707 + return bdev->bd_disk->max_active_zones; 708 + } 709 + 718 710 #else /* CONFIG_BLK_DEV_ZONED */ 719 - static inline unsigned int blk_queue_nr_zones(struct request_queue *q) 711 + static inline unsigned int disk_nr_zones(struct gendisk *disk) 720 712 { 721 713 return 0; 722 714 } 723 - static inline bool blk_queue_zone_is_seq(struct request_queue *q, 724 - sector_t sector) 715 + static inline bool disk_zone_is_seq(struct gendisk *disk, sector_t sector) 725 716 { 726 717 return false; 727 718 } 728 - static inline unsigned int blk_queue_zone_no(struct request_queue *q, 729 - sector_t sector) 719 + static inline unsigned int disk_zone_no(struct gendisk *disk, sector_t sector) 730 720 { 731 721 return 0; 732 722 } 733 - static inline unsigned int queue_max_open_zones(const struct request_queue *q) 723 + static inline unsigned int bdev_max_open_zones(struct block_device *bdev) 734 724 { 735 725 return 0; 736 726 } 737 - static inline unsigned int queue_max_active_zones(const struct request_queue *q) 727 + 728 + static inline unsigned int bdev_max_active_zones(struct block_device *bdev) 738 729 { 739 730 return 0; 740 731 } ··· 807 812 808 813 int bdev_disk_changed(struct gendisk *disk, bool invalidate); 809 814 810 - struct gendisk *__alloc_disk_node(struct request_queue *q, int node_id, 811 - struct lock_class_key *lkclass); 812 815 void put_disk(struct gendisk *disk); 813 816 struct gendisk *__blk_alloc_disk(int node, struct lock_class_key *lkclass); 814 817 ··· 825 832 \ 826 833 __blk_alloc_disk(node_id, &__key); \ 827 834 }) 828 - void blk_cleanup_disk(struct gendisk *disk); 829 835 830 836 int __register_blkdev(unsigned int major, const char *name, 831 837 void (*probe)(dev_t devt)); ··· 872 880 extern void blk_sync_queue(struct request_queue *q); 873 881 874 882 /* Helper to convert REQ_OP_XXX to its string format XXX */ 875 - extern const char *blk_op_str(unsigned int op); 883 + extern const char *blk_op_str(enum req_op op); 876 884 877 885 int blk_status_to_errno(blk_status_t status); 878 886 blk_status_t errno_to_blk_status(int errno); ··· 890 898 return bdev->bd_queue; /* this is never NULL */ 891 899 } 892 900 893 - #ifdef CONFIG_BLK_DEV_ZONED 894 - 895 901 /* Helper to convert BLK_ZONE_ZONE_XXX to its string format XXX */ 896 902 const char *blk_zone_cond_str(enum blk_zone_cond zone_cond); 897 903 898 904 static inline unsigned int bio_zone_no(struct bio *bio) 899 905 { 900 - return blk_queue_zone_no(bdev_get_queue(bio->bi_bdev), 901 - bio->bi_iter.bi_sector); 906 + return disk_zone_no(bio->bi_bdev->bd_disk, bio->bi_iter.bi_sector); 902 907 } 903 908 904 909 static inline unsigned int bio_zone_is_seq(struct bio *bio) 905 910 { 906 - return blk_queue_zone_is_seq(bdev_get_queue(bio->bi_bdev), 907 - bio->bi_iter.bi_sector); 908 - } 909 - #endif /* CONFIG_BLK_DEV_ZONED */ 910 - 911 - static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q, 912 - int op) 913 - { 914 - if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE)) 915 - return min(q->limits.max_discard_sectors, 916 - UINT_MAX >> SECTOR_SHIFT); 917 - 918 - if (unlikely(op == REQ_OP_WRITE_ZEROES)) 919 - return q->limits.max_write_zeroes_sectors; 920 - 921 - return q->limits.max_sectors; 911 + return disk_zone_is_seq(bio->bi_bdev->bd_disk, bio->bi_iter.bi_sector); 922 912 } 923 913 924 914 /* 925 - * Return maximum size of a request at given offset. Only valid for 926 - * file system requests. 915 + * Return how much of the chunk is left to be used for I/O at a given offset. 927 916 */ 928 - static inline unsigned int blk_max_size_offset(struct request_queue *q, 929 - sector_t offset, 930 - unsigned int chunk_sectors) 917 + static inline unsigned int blk_chunk_sectors_left(sector_t offset, 918 + unsigned int chunk_sectors) 931 919 { 932 - if (!chunk_sectors) { 933 - if (q->limits.chunk_sectors) 934 - chunk_sectors = q->limits.chunk_sectors; 935 - else 936 - return q->limits.max_sectors; 937 - } 938 - 939 - if (likely(is_power_of_2(chunk_sectors))) 940 - chunk_sectors -= offset & (chunk_sectors - 1); 941 - else 942 - chunk_sectors -= sector_div(offset, chunk_sectors); 943 - 944 - return min(q->limits.max_sectors, chunk_sectors); 920 + if (unlikely(!is_power_of_2(chunk_sectors))) 921 + return chunk_sectors - sector_div(offset, chunk_sectors); 922 + return chunk_sectors - (offset & (chunk_sectors - 1)); 945 923 } 946 924 947 925 /* 948 926 * Access functions for manipulating queue properties 949 927 */ 950 - extern void blk_cleanup_queue(struct request_queue *); 951 928 void blk_queue_bounce_limit(struct request_queue *q, enum blk_bounce limit); 952 929 extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int); 953 930 extern void blk_queue_chunk_sectors(struct request_queue *, unsigned int); ··· 1298 1337 { 1299 1338 struct request_queue *q = bdev_get_queue(bdev); 1300 1339 1301 - if (q) 1302 - return blk_queue_zone_sectors(q); 1303 - return 0; 1304 - } 1305 - 1306 - static inline unsigned int bdev_max_open_zones(struct block_device *bdev) 1307 - { 1308 - struct request_queue *q = bdev_get_queue(bdev); 1309 - 1310 - if (q) 1311 - return queue_max_open_zones(q); 1312 - return 0; 1313 - } 1314 - 1315 - static inline unsigned int bdev_max_active_zones(struct block_device *bdev) 1316 - { 1317 - struct request_queue *q = bdev_get_queue(bdev); 1318 - 1319 - if (q) 1320 - return queue_max_active_zones(q); 1321 - return 0; 1340 + if (!blk_queue_is_zoned(q)) 1341 + return 0; 1342 + return q->limits.chunk_sectors; 1322 1343 } 1323 1344 1324 1345 static inline int queue_dma_alignment(const struct request_queue *q) 1325 1346 { 1326 1347 return q ? q->dma_alignment : 511; 1348 + } 1349 + 1350 + static inline unsigned int bdev_dma_alignment(struct block_device *bdev) 1351 + { 1352 + return queue_dma_alignment(bdev_get_queue(bdev)); 1353 + } 1354 + 1355 + static inline bool bdev_iter_is_aligned(struct block_device *bdev, 1356 + struct iov_iter *iter) 1357 + { 1358 + return iov_iter_is_aligned(iter, bdev_dma_alignment(bdev), 1359 + bdev_logical_block_size(bdev) - 1); 1327 1360 } 1328 1361 1329 1362 static inline int blk_rq_aligned(struct request_queue *q, unsigned long addr, ··· 1381 1426 unsigned int flags); 1382 1427 int (*open) (struct block_device *, fmode_t); 1383 1428 void (*release) (struct gendisk *, fmode_t); 1384 - int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int); 1429 + int (*rw_page)(struct block_device *, sector_t, struct page *, enum req_op); 1385 1430 int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 1386 1431 int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 1387 1432 unsigned int (*check_events) (struct gendisk *disk, ··· 1434 1479 } 1435 1480 1436 1481 unsigned long bdev_start_io_acct(struct block_device *bdev, 1437 - unsigned int sectors, unsigned int op, 1482 + unsigned int sectors, enum req_op op, 1438 1483 unsigned long start_time); 1439 - void bdev_end_io_acct(struct block_device *bdev, unsigned int op, 1484 + void bdev_end_io_acct(struct block_device *bdev, enum req_op op, 1440 1485 unsigned long start_time); 1441 1486 1442 1487 void bio_start_io_acct_time(struct bio *bio, unsigned long start_time); ··· 1457 1502 int bdev_read_only(struct block_device *bdev); 1458 1503 int set_blocksize(struct block_device *bdev, int size); 1459 1504 1460 - const char *bdevname(struct block_device *bdev, char *buffer); 1461 1505 int lookup_bdev(const char *pathname, dev_t *dev); 1462 1506 1463 1507 void blkdev_show(struct seq_file *seqf, off_t offset);
+2 -11
include/linux/blktrace_api.h
··· 7 7 #include <linux/compat.h> 8 8 #include <uapi/linux/blktrace_api.h> 9 9 #include <linux/list.h> 10 + #include <linux/blk_types.h> 10 11 11 12 #if defined(CONFIG_BLK_DEV_IO_TRACE) 12 13 ··· 78 77 char __user *arg); 79 78 extern int blk_trace_startstop(struct request_queue *q, int start); 80 79 extern int blk_trace_remove(struct request_queue *q); 81 - extern void blk_trace_remove_sysfs(struct device *dev); 82 - extern int blk_trace_init_sysfs(struct device *dev); 83 - 84 - extern struct attribute_group blk_trace_attr_group; 85 80 86 81 #else /* !CONFIG_BLK_DEV_IO_TRACE */ 87 82 # define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) ··· 88 91 # define blk_trace_remove(q) (-ENOTTY) 89 92 # define blk_add_trace_msg(q, fmt, ...) do { } while (0) 90 93 # define blk_add_cgroup_trace_msg(q, cg, fmt, ...) do { } while (0) 91 - # define blk_trace_remove_sysfs(dev) do { } while (0) 92 94 # define blk_trace_note_message_enabled(q) (false) 93 - static inline int blk_trace_init_sysfs(struct device *dev) 94 - { 95 - return 0; 96 - } 97 - 98 95 #endif /* CONFIG_BLK_DEV_IO_TRACE */ 99 96 100 97 #ifdef CONFIG_COMPAT ··· 106 115 107 116 #endif 108 117 109 - void blk_fill_rwbs(char *rwbs, unsigned int op); 118 + void blk_fill_rwbs(char *rwbs, blk_opf_t opf); 110 119 111 120 static inline sector_t blk_rq_trace_sector(struct request *rq) 112 121 {
+5 -4
include/linux/buffer_head.h
··· 9 9 #define _LINUX_BUFFER_HEAD_H 10 10 11 11 #include <linux/types.h> 12 + #include <linux/blk_types.h> 12 13 #include <linux/fs.h> 13 14 #include <linux/linkage.h> 14 15 #include <linux/pagemap.h> ··· 202 201 void free_buffer_head(struct buffer_head * bh); 203 202 void unlock_buffer(struct buffer_head *bh); 204 203 void __lock_buffer(struct buffer_head *bh); 205 - void ll_rw_block(int, int, int, struct buffer_head * bh[]); 204 + void ll_rw_block(blk_opf_t, int, struct buffer_head * bh[]); 206 205 int sync_dirty_buffer(struct buffer_head *bh); 207 - int __sync_dirty_buffer(struct buffer_head *bh, int op_flags); 208 - void write_dirty_buffer(struct buffer_head *bh, int op_flags); 209 - int submit_bh(int, int, struct buffer_head *); 206 + int __sync_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags); 207 + void write_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags); 208 + int submit_bh(blk_opf_t, struct buffer_head *); 210 209 void write_boundary_block(struct block_device *bdev, 211 210 sector_t bblock, unsigned blocksize); 212 211 int bh_uptodate_or_lock(struct buffer_head *bh);
+2 -2
include/linux/dm-io.h
··· 13 13 #ifdef __KERNEL__ 14 14 15 15 #include <linux/types.h> 16 + #include <linux/blk_types.h> 16 17 17 18 struct dm_io_region { 18 19 struct block_device *bdev; ··· 58 57 */ 59 58 struct dm_io_client; 60 59 struct dm_io_request { 61 - int bi_op; /* REQ_OP */ 62 - int bi_op_flags; /* req_flag_bits */ 60 + blk_opf_t bi_opf; /* Request type and flags */ 63 61 struct dm_io_memory mem; /* Memory to use for io */ 64 62 struct dm_io_notify notify; /* Synchronous if notify.fn is NULL */ 65 63 struct dm_io_client *client; /* Client memory handler */
+10 -14
include/linux/ioprio.h
··· 11 11 /* 12 12 * Default IO priority. 13 13 */ 14 - #define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_BE_NORM) 14 + #define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0) 15 15 16 16 /* 17 17 * Check that a priority value has a valid class. ··· 46 46 return IOPRIO_CLASS_BE; 47 47 } 48 48 49 - /* 50 - * If the calling process has set an I/O priority, use that. Otherwise, return 51 - * the default I/O priority. 52 - */ 53 - static inline int get_current_ioprio(void) 49 + #ifdef CONFIG_BLOCK 50 + int __get_task_ioprio(struct task_struct *p); 51 + #else 52 + static inline int __get_task_ioprio(struct task_struct *p) 54 53 { 55 - struct io_context *ioc = current->io_context; 56 - 57 - if (ioc) 58 - return ioc->ioprio; 59 54 return IOPRIO_DEFAULT; 60 55 } 56 + #endif /* CONFIG_BLOCK */ 61 57 62 - /* 63 - * For inheritance, return the highest of the two given priorities 64 - */ 65 - extern int ioprio_best(unsigned short aprio, unsigned short bprio); 58 + static inline int get_current_ioprio(void) 59 + { 60 + return __get_task_ioprio(current); 61 + } 66 62 67 63 extern int set_task_ioprio(struct task_struct *task, int ioprio); 68 64
+1 -1
include/linux/jbd2.h
··· 1557 1557 extern int jbd2_journal_skip_recovery (journal_t *); 1558 1558 extern void jbd2_journal_update_sb_errno(journal_t *); 1559 1559 extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t, 1560 - unsigned long, int); 1560 + unsigned long, blk_opf_t); 1561 1561 extern void jbd2_journal_abort (journal_t *, int); 1562 1562 extern int jbd2_journal_errno (journal_t *); 1563 1563 extern void jbd2_journal_ack_err (journal_t *);
+2
include/linux/uio.h
··· 219 219 #endif 220 220 221 221 size_t iov_iter_zero(size_t bytes, struct iov_iter *); 222 + bool iov_iter_is_aligned(const struct iov_iter *i, unsigned addr_mask, 223 + unsigned len_mask); 222 224 unsigned long iov_iter_alignment(const struct iov_iter *i); 223 225 unsigned long iov_iter_gap_alignment(const struct iov_iter *i); 224 226 void iov_iter_init(struct iov_iter *i, unsigned int direction, const struct iovec *iov,
+2 -2
include/linux/writeback.h
··· 101 101 #endif 102 102 }; 103 103 104 - static inline int wbc_to_write_flags(struct writeback_control *wbc) 104 + static inline blk_opf_t wbc_to_write_flags(struct writeback_control *wbc) 105 105 { 106 - int flags = 0; 106 + blk_opf_t flags = 0; 107 107 108 108 if (wbc->punt_to_cgroup) 109 109 flags = REQ_CGROUP_PUNT;
+2 -2
include/scsi/scsi_cmnd.h
··· 386 386 extern void scsi_build_sense(struct scsi_cmnd *scmd, int desc, 387 387 u8 key, u8 asc, u8 ascq); 388 388 389 - struct request *scsi_alloc_request(struct request_queue *q, 390 - unsigned int op, blk_mq_req_flags_t flags); 389 + struct request *scsi_alloc_request(struct request_queue *q, blk_opf_t opf, 390 + blk_mq_req_flags_t flags); 391 391 392 392 #endif /* _SCSI_SCSI_CMND_H */
+1 -1
include/scsi/scsi_device.h
··· 457 457 extern int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, 458 458 int data_direction, void *buffer, unsigned bufflen, 459 459 unsigned char *sense, struct scsi_sense_hdr *sshdr, 460 - int timeout, int retries, u64 flags, 460 + int timeout, int retries, blk_opf_t flags, 461 461 req_flags_t rq_flags, int *resid); 462 462 /* Make sure any sense buffer is the correct size. */ 463 463 #define scsi_execute(sdev, cmd, data_direction, buffer, bufflen, sense, \
+1 -1
include/scsi/scsi_host.h
··· 786 786 extern int scsi_host_unblock(struct Scsi_Host *shost, int new_state); 787 787 788 788 void scsi_host_busy_iter(struct Scsi_Host *, 789 - bool (*fn)(struct scsi_cmnd *, void *, bool), void *priv); 789 + bool (*fn)(struct scsi_cmnd *, void *), void *priv); 790 790 791 791 struct class_container; 792 792
+11 -11
include/trace/events/f2fs.h
··· 66 66 67 67 #define F2FS_OP_FLAGS (REQ_RAHEAD | REQ_SYNC | REQ_META | REQ_PRIO | \ 68 68 REQ_PREFLUSH | REQ_FUA) 69 - #define F2FS_BIO_FLAG_MASK(t) (t & F2FS_OP_FLAGS) 69 + #define F2FS_BIO_FLAG_MASK(t) (__force u32)((t) & F2FS_OP_FLAGS) 70 70 71 71 #define show_bio_type(op,op_flags) show_bio_op(op), \ 72 72 show_bio_op_flags(op_flags) ··· 75 75 76 76 #define show_bio_op_flags(flags) \ 77 77 __print_flags(F2FS_BIO_FLAG_MASK(flags), "|", \ 78 - { REQ_RAHEAD, "R" }, \ 79 - { REQ_SYNC, "S" }, \ 80 - { REQ_META, "M" }, \ 81 - { REQ_PRIO, "P" }, \ 82 - { REQ_PREFLUSH, "PF" }, \ 83 - { REQ_FUA, "FUA" }) 78 + { (__force u32)REQ_RAHEAD, "R" }, \ 79 + { (__force u32)REQ_SYNC, "S" }, \ 80 + { (__force u32)REQ_META, "M" }, \ 81 + { (__force u32)REQ_PRIO, "P" }, \ 82 + { (__force u32)REQ_PREFLUSH, "PF" }, \ 83 + { (__force u32)REQ_FUA, "FUA" }) 84 84 85 85 #define show_data_type(type) \ 86 86 __print_symbolic(type, \ ··· 1036 1036 __field(pgoff_t, index) 1037 1037 __field(block_t, old_blkaddr) 1038 1038 __field(block_t, new_blkaddr) 1039 - __field(int, op) 1040 - __field(int, op_flags) 1039 + __field(enum req_op, op) 1040 + __field(blk_opf_t, op_flags) 1041 1041 __field(int, temp) 1042 1042 __field(int, type) 1043 1043 ), ··· 1092 1092 TP_STRUCT__entry( 1093 1093 __field(dev_t, dev) 1094 1094 __field(dev_t, target) 1095 - __field(int, op) 1096 - __field(int, op_flags) 1095 + __field(enum req_op, op) 1096 + __field(blk_opf_t, op_flags) 1097 1097 __field(int, type) 1098 1098 __field(sector_t, sector) 1099 1099 __field(unsigned int, size)
+6 -6
include/trace/events/jbd2.h
··· 355 355 356 356 TRACE_EVENT(jbd2_write_superblock, 357 357 358 - TP_PROTO(journal_t *journal, int write_op), 358 + TP_PROTO(journal_t *journal, blk_opf_t write_flags), 359 359 360 - TP_ARGS(journal, write_op), 360 + TP_ARGS(journal, write_flags), 361 361 362 362 TP_STRUCT__entry( 363 363 __field( dev_t, dev ) 364 - __field( int, write_op ) 364 + __field( blk_opf_t, write_flags ) 365 365 ), 366 366 367 367 TP_fast_assign( 368 368 __entry->dev = journal->j_fs_dev->bd_dev; 369 - __entry->write_op = write_op; 369 + __entry->write_flags = write_flags; 370 370 ), 371 371 372 - TP_printk("dev %d,%d write_op %x", MAJOR(__entry->dev), 373 - MINOR(__entry->dev), __entry->write_op) 372 + TP_printk("dev %d,%d write_flags %x", MAJOR(__entry->dev), 373 + MINOR(__entry->dev), (__force u32)__entry->write_flags) 374 374 ); 375 375 376 376 TRACE_EVENT(jbd2_lock_buffer_stall,
+2 -2
include/trace/events/nilfs2.h
··· 192 192 TP_PROTO(struct inode *inode, 193 193 unsigned long ino, 194 194 unsigned long blkoff, 195 - int mode), 195 + enum req_op mode), 196 196 197 197 TP_ARGS(inode, ino, blkoff, mode), 198 198 ··· 200 200 __field(struct inode *, inode) 201 201 __field(unsigned long, ino) 202 202 __field(unsigned long, blkoff) 203 - __field(int, mode) 203 + __field(enum req_op, mode) 204 204 ), 205 205 206 206 TP_fast_assign(
+161
include/uapi/linux/ublk_cmd.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 + #ifndef USER_BLK_DRV_CMD_INC_H 3 + #define USER_BLK_DRV_CMD_INC_H 4 + 5 + #include <linux/types.h> 6 + 7 + /* ublk server command definition */ 8 + 9 + /* 10 + * Admin commands, issued by ublk server, and handled by ublk driver. 11 + */ 12 + #define UBLK_CMD_GET_QUEUE_AFFINITY 0x01 13 + #define UBLK_CMD_GET_DEV_INFO 0x02 14 + #define UBLK_CMD_ADD_DEV 0x04 15 + #define UBLK_CMD_DEL_DEV 0x05 16 + #define UBLK_CMD_START_DEV 0x06 17 + #define UBLK_CMD_STOP_DEV 0x07 18 + 19 + /* 20 + * IO commands, issued by ublk server, and handled by ublk driver. 21 + * 22 + * FETCH_REQ: issued via sqe(URING_CMD) beforehand for fetching IO request 23 + * from ublk driver, should be issued only when starting device. After 24 + * the associated cqe is returned, request's tag can be retrieved via 25 + * cqe->userdata. 26 + * 27 + * COMMIT_AND_FETCH_REQ: issued via sqe(URING_CMD) after ublkserver handled 28 + * this IO request, request's handling result is committed to ublk 29 + * driver, meantime FETCH_REQ is piggyback, and FETCH_REQ has to be 30 + * handled before completing io request. 31 + */ 32 + #define UBLK_IO_FETCH_REQ 0x20 33 + #define UBLK_IO_COMMIT_AND_FETCH_REQ 0x21 34 + 35 + /* only ABORT means that no re-fetch */ 36 + #define UBLK_IO_RES_OK 0 37 + #define UBLK_IO_RES_ABORT (-ENODEV) 38 + 39 + #define UBLKSRV_CMD_BUF_OFFSET 0 40 + #define UBLKSRV_IO_BUF_OFFSET 0x80000000 41 + 42 + /* tag bit is 12bit, so at most 4096 IOs for each queue */ 43 + #define UBLK_MAX_QUEUE_DEPTH 4096 44 + 45 + /* 46 + * zero copy requires 4k block size, and can remap ublk driver's io 47 + * request into ublksrv's vm space 48 + */ 49 + #define UBLK_F_SUPPORT_ZERO_COPY (1ULL << 0) 50 + 51 + /* 52 + * Force to complete io cmd via io_uring_cmd_complete_in_task so that 53 + * performance comparison is done easily with using task_work_add 54 + */ 55 + #define UBLK_F_URING_CMD_COMP_IN_TASK (1ULL << 1) 56 + 57 + /* device state */ 58 + #define UBLK_S_DEV_DEAD 0 59 + #define UBLK_S_DEV_LIVE 1 60 + 61 + /* shipped via sqe->cmd of io_uring command */ 62 + struct ublksrv_ctrl_cmd { 63 + /* sent to which device, must be valid */ 64 + __u32 dev_id; 65 + 66 + /* sent to which queue, must be -1 if the cmd isn't for queue */ 67 + __u16 queue_id; 68 + /* 69 + * cmd specific buffer, can be IN or OUT. 70 + */ 71 + __u16 len; 72 + __u64 addr; 73 + 74 + /* inline data */ 75 + __u64 data[2]; 76 + }; 77 + 78 + struct ublksrv_ctrl_dev_info { 79 + __u16 nr_hw_queues; 80 + __u16 queue_depth; 81 + __u16 block_size; 82 + __u16 state; 83 + 84 + __u32 rq_max_blocks; 85 + __u32 dev_id; 86 + 87 + __u64 dev_blocks; 88 + 89 + __s32 ublksrv_pid; 90 + __s32 reserved0; 91 + __u64 flags; 92 + __u64 flags_reserved; 93 + 94 + /* For ublksrv internal use, invisible to ublk driver */ 95 + __u64 ublksrv_flags; 96 + __u64 reserved1[9]; 97 + }; 98 + 99 + #define UBLK_IO_OP_READ 0 100 + #define UBLK_IO_OP_WRITE 1 101 + #define UBLK_IO_OP_FLUSH 2 102 + #define UBLK_IO_OP_DISCARD 3 103 + #define UBLK_IO_OP_WRITE_SAME 4 104 + #define UBLK_IO_OP_WRITE_ZEROES 5 105 + 106 + #define UBLK_IO_F_FAILFAST_DEV (1U << 8) 107 + #define UBLK_IO_F_FAILFAST_TRANSPORT (1U << 9) 108 + #define UBLK_IO_F_FAILFAST_DRIVER (1U << 10) 109 + #define UBLK_IO_F_META (1U << 11) 110 + #define UBLK_IO_F_FUA (1U << 13) 111 + #define UBLK_IO_F_NOUNMAP (1U << 15) 112 + #define UBLK_IO_F_SWAP (1U << 16) 113 + 114 + /* 115 + * io cmd is described by this structure, and stored in share memory, indexed 116 + * by request tag. 117 + * 118 + * The data is stored by ublk driver, and read by ublksrv after one fetch command 119 + * returns. 120 + */ 121 + struct ublksrv_io_desc { 122 + /* op: bit 0-7, flags: bit 8-31 */ 123 + __u32 op_flags; 124 + 125 + __u32 nr_sectors; 126 + 127 + /* start sector for this io */ 128 + __u64 start_sector; 129 + 130 + /* buffer address in ublksrv daemon vm space, from ublk driver */ 131 + __u64 addr; 132 + }; 133 + 134 + static inline __u8 ublksrv_get_op(const struct ublksrv_io_desc *iod) 135 + { 136 + return iod->op_flags & 0xff; 137 + } 138 + 139 + static inline __u32 ublksrv_get_flags(const struct ublksrv_io_desc *iod) 140 + { 141 + return iod->op_flags >> 8; 142 + } 143 + 144 + /* issued to ublk driver via /dev/ublkcN */ 145 + struct ublksrv_io_cmd { 146 + __u16 q_id; 147 + 148 + /* for fetch/commit which result */ 149 + __u16 tag; 150 + 151 + /* io result, it is valid for COMMIT* command only */ 152 + __s32 result; 153 + 154 + /* 155 + * userspace buffer address in ublksrv daemon process, valid for 156 + * FETCH* command only 157 + */ 158 + __u64 addr; 159 + }; 160 + 161 + #endif
+13 -16
kernel/power/swap.c
··· 269 269 bio_put(bio); 270 270 } 271 271 272 - static int hib_submit_io(int op, int op_flags, pgoff_t page_off, void *addr, 273 - struct hib_bio_batch *hb) 272 + static int hib_submit_io(blk_opf_t opf, pgoff_t page_off, void *addr, 273 + struct hib_bio_batch *hb) 274 274 { 275 275 struct page *page = virt_to_page(addr); 276 276 struct bio *bio; 277 277 int error = 0; 278 278 279 - bio = bio_alloc(hib_resume_bdev, 1, op | op_flags, 280 - GFP_NOIO | __GFP_HIGH); 279 + bio = bio_alloc(hib_resume_bdev, 1, opf, GFP_NOIO | __GFP_HIGH); 281 280 bio->bi_iter.bi_sector = page_off * (PAGE_SIZE >> 9); 282 281 283 282 if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) { ··· 316 317 { 317 318 int error; 318 319 319 - hib_submit_io(REQ_OP_READ, 0, swsusp_resume_block, 320 - swsusp_header, NULL); 320 + hib_submit_io(REQ_OP_READ, swsusp_resume_block, swsusp_header, NULL); 321 321 if (!memcmp("SWAP-SPACE",swsusp_header->sig, 10) || 322 322 !memcmp("SWAPSPACE2",swsusp_header->sig, 10)) { 323 323 memcpy(swsusp_header->orig_sig,swsusp_header->sig, 10); ··· 329 331 swsusp_header->flags = flags; 330 332 if (flags & SF_CRC32_MODE) 331 333 swsusp_header->crc32 = handle->crc32; 332 - error = hib_submit_io(REQ_OP_WRITE, REQ_SYNC, 334 + error = hib_submit_io(REQ_OP_WRITE | REQ_SYNC, 333 335 swsusp_resume_block, swsusp_header, NULL); 334 336 } else { 335 337 pr_err("Swap header not found!\n"); ··· 406 408 } else { 407 409 src = buf; 408 410 } 409 - return hib_submit_io(REQ_OP_WRITE, REQ_SYNC, offset, src, hb); 411 + return hib_submit_io(REQ_OP_WRITE | REQ_SYNC, offset, src, hb); 410 412 } 411 413 412 414 static void release_swap_writer(struct swap_map_handle *handle) ··· 1001 1003 return -ENOMEM; 1002 1004 } 1003 1005 1004 - error = hib_submit_io(REQ_OP_READ, 0, offset, tmp->map, NULL); 1006 + error = hib_submit_io(REQ_OP_READ, offset, tmp->map, NULL); 1005 1007 if (error) { 1006 1008 release_swap_reader(handle); 1007 1009 return error; ··· 1025 1027 offset = handle->cur->entries[handle->k]; 1026 1028 if (!offset) 1027 1029 return -EFAULT; 1028 - error = hib_submit_io(REQ_OP_READ, 0, offset, buf, hb); 1030 + error = hib_submit_io(REQ_OP_READ, offset, buf, hb); 1029 1031 if (error) 1030 1032 return error; 1031 1033 if (++handle->k >= MAP_PAGE_ENTRIES) { ··· 1524 1526 if (!IS_ERR(hib_resume_bdev)) { 1525 1527 set_blocksize(hib_resume_bdev, PAGE_SIZE); 1526 1528 clear_page(swsusp_header); 1527 - error = hib_submit_io(REQ_OP_READ, 0, 1528 - swsusp_resume_block, 1529 + error = hib_submit_io(REQ_OP_READ, swsusp_resume_block, 1529 1530 swsusp_header, NULL); 1530 1531 if (error) 1531 1532 goto put; ··· 1532 1535 if (!memcmp(HIBERNATE_SIG, swsusp_header->sig, 10)) { 1533 1536 memcpy(swsusp_header->sig, swsusp_header->orig_sig, 10); 1534 1537 /* Reset swap signature now */ 1535 - error = hib_submit_io(REQ_OP_WRITE, REQ_SYNC, 1538 + error = hib_submit_io(REQ_OP_WRITE | REQ_SYNC, 1536 1539 swsusp_resume_block, 1537 1540 swsusp_header, NULL); 1538 1541 } else { ··· 1583 1586 { 1584 1587 int error; 1585 1588 1586 - hib_submit_io(REQ_OP_READ, 0, swsusp_resume_block, 1587 - swsusp_header, NULL); 1589 + hib_submit_io(REQ_OP_READ, swsusp_resume_block, 1590 + swsusp_header, NULL); 1588 1591 if (!memcmp(HIBERNATE_SIG,swsusp_header->sig, 10)) { 1589 1592 memcpy(swsusp_header->sig,swsusp_header->orig_sig, 10); 1590 - error = hib_submit_io(REQ_OP_WRITE, REQ_SYNC, 1593 + error = hib_submit_io(REQ_OP_WRITE | REQ_SYNC, 1591 1594 swsusp_resume_block, 1592 1595 swsusp_header, NULL); 1593 1596 } else {
+30 -42
kernel/trace/blktrace.c
··· 205 205 #define BLK_TC_PREFLUSH BLK_TC_FLUSH 206 206 207 207 /* The ilog2() calls fall out because they're constant */ 208 - #define MASK_TC_BIT(rw, __name) ((rw & REQ_ ## __name) << \ 208 + #define MASK_TC_BIT(rw, __name) ((__force u32)(rw & REQ_ ## __name) << \ 209 209 (ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - __REQ_ ## __name)) 210 210 211 211 /* ··· 213 213 * blk_io_trace structure and places it in a per-cpu subbuffer. 214 214 */ 215 215 static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, 216 - int op, int op_flags, u32 what, int error, int pdu_len, 217 - void *pdu_data, u64 cgid) 216 + const blk_opf_t opf, u32 what, int error, 217 + int pdu_len, void *pdu_data, u64 cgid) 218 218 { 219 219 struct task_struct *tsk = current; 220 220 struct ring_buffer_event *event = NULL; ··· 227 227 int cpu; 228 228 bool blk_tracer = blk_tracer_enabled; 229 229 ssize_t cgid_len = cgid ? sizeof(cgid) : 0; 230 + const enum req_op op = opf & REQ_OP_MASK; 230 231 231 232 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) 232 233 return; 233 234 234 235 what |= ddir_act[op_is_write(op) ? WRITE : READ]; 235 - what |= MASK_TC_BIT(op_flags, SYNC); 236 - what |= MASK_TC_BIT(op_flags, RAHEAD); 237 - what |= MASK_TC_BIT(op_flags, META); 238 - what |= MASK_TC_BIT(op_flags, PREFLUSH); 239 - what |= MASK_TC_BIT(op_flags, FUA); 236 + what |= MASK_TC_BIT(opf, SYNC); 237 + what |= MASK_TC_BIT(opf, RAHEAD); 238 + what |= MASK_TC_BIT(opf, META); 239 + what |= MASK_TC_BIT(opf, PREFLUSH); 240 + what |= MASK_TC_BIT(opf, FUA); 240 241 if (op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE) 241 242 what |= BLK_TC_ACT(BLK_TC_DISCARD); 242 243 if (op == REQ_OP_FLUSH) ··· 737 736 738 737 switch (cmd) { 739 738 case BLKTRACESETUP: 740 - bdevname(bdev, b); 739 + snprintf(b, sizeof(b), "%pg", bdev); 741 740 ret = __blk_trace_setup(q, b, bdev->bd_dev, bdev, arg); 742 741 break; 743 742 #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64) 744 743 case BLKTRACESETUP32: 745 - bdevname(bdev, b); 744 + snprintf(b, sizeof(b), "%pg", bdev); 746 745 ret = compat_blk_trace_setup(q, b, bdev->bd_dev, bdev, arg); 747 746 break; 748 747 #endif ··· 843 842 else 844 843 what |= BLK_TC_ACT(BLK_TC_FS); 845 844 846 - __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, req_op(rq), 847 - rq->cmd_flags, what, blk_status_to_errno(error), 0, 848 - NULL, cgid); 845 + __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, rq->cmd_flags, 846 + what, blk_status_to_errno(error), 0, NULL, cgid); 849 847 rcu_read_unlock(); 850 848 } 851 849 ··· 903 903 } 904 904 905 905 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, 906 - bio_op(bio), bio->bi_opf, what, error, 0, NULL, 906 + bio->bi_opf, what, error, 0, NULL, 907 907 blk_trace_bio_get_cgid(q, bio)); 908 908 rcu_read_unlock(); 909 909 } ··· 949 949 rcu_read_lock(); 950 950 bt = rcu_dereference(q->blk_trace); 951 951 if (bt) 952 - __blk_add_trace(bt, 0, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0); 952 + __blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0); 953 953 rcu_read_unlock(); 954 954 } 955 955 ··· 969 969 else 970 970 what = BLK_TA_UNPLUG_TIMER; 971 971 972 - __blk_add_trace(bt, 0, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0); 972 + __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0); 973 973 } 974 974 rcu_read_unlock(); 975 975 } ··· 985 985 __be64 rpdu = cpu_to_be64(pdu); 986 986 987 987 __blk_add_trace(bt, bio->bi_iter.bi_sector, 988 - bio->bi_iter.bi_size, bio_op(bio), bio->bi_opf, 989 - BLK_TA_SPLIT, 988 + bio->bi_iter.bi_size, bio->bi_opf, BLK_TA_SPLIT, 990 989 blk_status_to_errno(bio->bi_status), 991 990 sizeof(rpdu), &rpdu, 992 991 blk_trace_bio_get_cgid(q, bio)); ··· 1021 1022 r.sector_from = cpu_to_be64(from); 1022 1023 1023 1024 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, 1024 - bio_op(bio), bio->bi_opf, BLK_TA_REMAP, 1025 + bio->bi_opf, BLK_TA_REMAP, 1025 1026 blk_status_to_errno(bio->bi_status), 1026 1027 sizeof(r), &r, blk_trace_bio_get_cgid(q, bio)); 1027 1028 rcu_read_unlock(); ··· 1057 1058 r.sector_from = cpu_to_be64(from); 1058 1059 1059 1060 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 1060 - rq_data_dir(rq), 0, BLK_TA_REMAP, 0, 1061 + rq->cmd_flags, BLK_TA_REMAP, 0, 1061 1062 sizeof(r), &r, blk_trace_request_get_cgid(rq)); 1062 1063 rcu_read_unlock(); 1063 1064 } ··· 1083 1084 return; 1084 1085 } 1085 1086 1086 - __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0, 0, 1087 + __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0, 1087 1088 BLK_TA_DRV_DATA, 0, len, data, 1088 1089 blk_trace_request_get_cgid(rq)); 1089 1090 rcu_read_unlock(); ··· 1866 1867 out: 1867 1868 return ret ? ret : count; 1868 1869 } 1869 - 1870 - int blk_trace_init_sysfs(struct device *dev) 1871 - { 1872 - return sysfs_create_group(&dev->kobj, &blk_trace_attr_group); 1873 - } 1874 - 1875 - void blk_trace_remove_sysfs(struct device *dev) 1876 - { 1877 - sysfs_remove_group(&dev->kobj, &blk_trace_attr_group); 1878 - } 1879 - 1880 1870 #endif /* CONFIG_BLK_DEV_IO_TRACE */ 1881 1871 1882 1872 #ifdef CONFIG_EVENT_TRACING ··· 1873 1885 /** 1874 1886 * blk_fill_rwbs - Fill the buffer rwbs by mapping op to character string. 1875 1887 * @rwbs: buffer to be filled 1876 - * @op: REQ_OP_XXX for the tracepoint 1888 + * @opf: request operation type (REQ_OP_XXX) and flags for the tracepoint 1877 1889 * 1878 1890 * Description: 1879 - * Maps the REQ_OP_XXX to character and fills the buffer provided by the 1880 - * caller with resulting string. 1891 + * Maps each request operation and flag to a single character and fills the 1892 + * buffer provided by the caller with resulting string. 1881 1893 * 1882 1894 **/ 1883 - void blk_fill_rwbs(char *rwbs, unsigned int op) 1895 + void blk_fill_rwbs(char *rwbs, blk_opf_t opf) 1884 1896 { 1885 1897 int i = 0; 1886 1898 1887 - if (op & REQ_PREFLUSH) 1899 + if (opf & REQ_PREFLUSH) 1888 1900 rwbs[i++] = 'F'; 1889 1901 1890 - switch (op & REQ_OP_MASK) { 1902 + switch (opf & REQ_OP_MASK) { 1891 1903 case REQ_OP_WRITE: 1892 1904 rwbs[i++] = 'W'; 1893 1905 break; ··· 1908 1920 rwbs[i++] = 'N'; 1909 1921 } 1910 1922 1911 - if (op & REQ_FUA) 1923 + if (opf & REQ_FUA) 1912 1924 rwbs[i++] = 'F'; 1913 - if (op & REQ_RAHEAD) 1925 + if (opf & REQ_RAHEAD) 1914 1926 rwbs[i++] = 'A'; 1915 - if (op & REQ_SYNC) 1927 + if (opf & REQ_SYNC) 1916 1928 rwbs[i++] = 'S'; 1917 - if (op & REQ_META) 1929 + if (opf & REQ_META) 1918 1930 rwbs[i++] = 'M'; 1919 1931 1920 1932 rwbs[i] = '\0';
+92
lib/iov_iter.c
··· 1268 1268 } 1269 1269 EXPORT_SYMBOL(iov_iter_discard); 1270 1270 1271 + static bool iov_iter_aligned_iovec(const struct iov_iter *i, unsigned addr_mask, 1272 + unsigned len_mask) 1273 + { 1274 + size_t size = i->count; 1275 + size_t skip = i->iov_offset; 1276 + unsigned k; 1277 + 1278 + for (k = 0; k < i->nr_segs; k++, skip = 0) { 1279 + size_t len = i->iov[k].iov_len - skip; 1280 + 1281 + if (len > size) 1282 + len = size; 1283 + if (len & len_mask) 1284 + return false; 1285 + if ((unsigned long)(i->iov[k].iov_base + skip) & addr_mask) 1286 + return false; 1287 + 1288 + size -= len; 1289 + if (!size) 1290 + break; 1291 + } 1292 + return true; 1293 + } 1294 + 1295 + static bool iov_iter_aligned_bvec(const struct iov_iter *i, unsigned addr_mask, 1296 + unsigned len_mask) 1297 + { 1298 + size_t size = i->count; 1299 + unsigned skip = i->iov_offset; 1300 + unsigned k; 1301 + 1302 + for (k = 0; k < i->nr_segs; k++, skip = 0) { 1303 + size_t len = i->bvec[k].bv_len - skip; 1304 + 1305 + if (len > size) 1306 + len = size; 1307 + if (len & len_mask) 1308 + return false; 1309 + if ((unsigned long)(i->bvec[k].bv_offset + skip) & addr_mask) 1310 + return false; 1311 + 1312 + size -= len; 1313 + if (!size) 1314 + break; 1315 + } 1316 + return true; 1317 + } 1318 + 1319 + /** 1320 + * iov_iter_is_aligned() - Check if the addresses and lengths of each segments 1321 + * are aligned to the parameters. 1322 + * 1323 + * @i: &struct iov_iter to restore 1324 + * @addr_mask: bit mask to check against the iov element's addresses 1325 + * @len_mask: bit mask to check against the iov element's lengths 1326 + * 1327 + * Return: false if any addresses or lengths intersect with the provided masks 1328 + */ 1329 + bool iov_iter_is_aligned(const struct iov_iter *i, unsigned addr_mask, 1330 + unsigned len_mask) 1331 + { 1332 + if (likely(iter_is_iovec(i) || iov_iter_is_kvec(i))) 1333 + return iov_iter_aligned_iovec(i, addr_mask, len_mask); 1334 + 1335 + if (iov_iter_is_bvec(i)) 1336 + return iov_iter_aligned_bvec(i, addr_mask, len_mask); 1337 + 1338 + if (iov_iter_is_pipe(i)) { 1339 + unsigned int p_mask = i->pipe->ring_size - 1; 1340 + size_t size = i->count; 1341 + 1342 + if (size & len_mask) 1343 + return false; 1344 + if (size && allocated(&i->pipe->bufs[i->head & p_mask])) { 1345 + if (i->iov_offset & addr_mask) 1346 + return false; 1347 + } 1348 + 1349 + return true; 1350 + } 1351 + 1352 + if (iov_iter_is_xarray(i)) { 1353 + if (i->count & len_mask) 1354 + return false; 1355 + if ((i->xarray_start + i->iov_offset) & addr_mask) 1356 + return false; 1357 + } 1358 + 1359 + return true; 1360 + } 1361 + EXPORT_SYMBOL_GPL(iov_iter_is_aligned); 1362 + 1271 1363 static unsigned long iov_iter_alignment_iovec(const struct iov_iter *i) 1272 1364 { 1273 1365 unsigned long res = 0;