1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Functions related to setting various queue properties from drivers 4 */ 5 #include <linux/kernel.h> 6 #include <linux/module.h> 7 #include <linux/init.h> 8 #include <linux/bio.h> 9 #include <linux/blkdev.h> 10 #include <linux/pagemap.h> 11 #include <linux/backing-dev-defs.h> 12 #include <linux/gcd.h> 13 #include <linux/lcm.h> 14 #include <linux/jiffies.h> 15 #include <linux/gfp.h> 16 #include <linux/dma-mapping.h> 17 18 #include "blk.h" 19 #include "blk-wbt.h" 20 21 void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout) 22 { 23 q->rq_timeout = timeout; 24 } 25 EXPORT_SYMBOL_GPL(blk_queue_rq_timeout); 26 27 /** 28 * blk_set_default_limits - reset limits to default values 29 * @lim: the queue_limits structure to reset 30 * 31 * Description: 32 * Returns a queue_limit struct to its default state. 33 */ 34 void blk_set_default_limits(struct queue_limits *lim) 35 { 36 lim->max_segments = BLK_MAX_SEGMENTS; 37 lim->max_discard_segments = 1; 38 lim->max_integrity_segments = 0; 39 lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; 40 lim->virt_boundary_mask = 0; 41 lim->max_segment_size = BLK_MAX_SEGMENT_SIZE; 42 lim->max_sectors = lim->max_hw_sectors = BLK_SAFE_MAX_SECTORS; 43 lim->max_dev_sectors = 0; 44 lim->chunk_sectors = 0; 45 lim->max_write_zeroes_sectors = 0; 46 lim->max_zone_append_sectors = 0; 47 lim->max_discard_sectors = 0; 48 lim->max_hw_discard_sectors = 0; 49 lim->max_secure_erase_sectors = 0; 50 lim->discard_granularity = 0; 51 lim->discard_alignment = 0; 52 lim->discard_misaligned = 0; 53 lim->logical_block_size = lim->physical_block_size = lim->io_min = 512; 54 lim->bounce = BLK_BOUNCE_NONE; 55 lim->alignment_offset = 0; 56 lim->io_opt = 0; 57 lim->misaligned = 0; 58 lim->zoned = BLK_ZONED_NONE; 59 lim->zone_write_granularity = 0; 60 lim->dma_alignment = 511; 61 } 62 63 /** 64 * blk_set_stacking_limits - set default limits for stacking devices 65 * @lim: the queue_limits structure to reset 66 * 67 * Description: 68 * Returns a queue_limit struct to its default state. Should be used 69 * by stacking drivers like DM that have no internal limits. 70 */ 71 void blk_set_stacking_limits(struct queue_limits *lim) 72 { 73 blk_set_default_limits(lim); 74 75 /* Inherit limits from component devices */ 76 lim->max_segments = USHRT_MAX; 77 lim->max_discard_segments = USHRT_MAX; 78 lim->max_hw_sectors = UINT_MAX; 79 lim->max_segment_size = UINT_MAX; 80 lim->max_sectors = UINT_MAX; 81 lim->max_dev_sectors = UINT_MAX; 82 lim->max_write_zeroes_sectors = UINT_MAX; 83 lim->max_zone_append_sectors = UINT_MAX; 84 } 85 EXPORT_SYMBOL(blk_set_stacking_limits); 86 87 /** 88 * blk_queue_bounce_limit - set bounce buffer limit for queue 89 * @q: the request queue for the device 90 * @bounce: bounce limit to enforce 91 * 92 * Description: 93 * Force bouncing for ISA DMA ranges or highmem. 94 * 95 * DEPRECATED, don't use in new code. 96 **/ 97 void blk_queue_bounce_limit(struct request_queue *q, enum blk_bounce bounce) 98 { 99 q->limits.bounce = bounce; 100 } 101 EXPORT_SYMBOL(blk_queue_bounce_limit); 102 103 /** 104 * blk_queue_max_hw_sectors - set max sectors for a request for this queue 105 * @q: the request queue for the device 106 * @max_hw_sectors: max hardware sectors in the usual 512b unit 107 * 108 * Description: 109 * Enables a low level driver to set a hard upper limit, 110 * max_hw_sectors, on the size of requests. max_hw_sectors is set by 111 * the device driver based upon the capabilities of the I/O 112 * controller. 113 * 114 * max_dev_sectors is a hard limit imposed by the storage device for 115 * READ/WRITE requests. It is set by the disk driver. 116 * 117 * max_sectors is a soft limit imposed by the block layer for 118 * filesystem type requests. This value can be overridden on a 119 * per-device basis in /sys/block/<device>/queue/max_sectors_kb. 120 * The soft limit can not exceed max_hw_sectors. 121 **/ 122 void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_sectors) 123 { 124 struct queue_limits *limits = &q->limits; 125 unsigned int max_sectors; 126 127 if ((max_hw_sectors << 9) < PAGE_SIZE) { 128 max_hw_sectors = 1 << (PAGE_SHIFT - 9); 129 printk(KERN_INFO "%s: set to minimum %d\n", 130 __func__, max_hw_sectors); 131 } 132 133 max_hw_sectors = round_down(max_hw_sectors, 134 limits->logical_block_size >> SECTOR_SHIFT); 135 limits->max_hw_sectors = max_hw_sectors; 136 137 max_sectors = min_not_zero(max_hw_sectors, limits->max_dev_sectors); 138 max_sectors = min_t(unsigned int, max_sectors, BLK_DEF_MAX_SECTORS); 139 max_sectors = round_down(max_sectors, 140 limits->logical_block_size >> SECTOR_SHIFT); 141 limits->max_sectors = max_sectors; 142 143 if (!q->disk) 144 return; 145 q->disk->bdi->io_pages = max_sectors >> (PAGE_SHIFT - 9); 146 } 147 EXPORT_SYMBOL(blk_queue_max_hw_sectors); 148 149 /** 150 * blk_queue_chunk_sectors - set size of the chunk for this queue 151 * @q: the request queue for the device 152 * @chunk_sectors: chunk sectors in the usual 512b unit 153 * 154 * Description: 155 * If a driver doesn't want IOs to cross a given chunk size, it can set 156 * this limit and prevent merging across chunks. Note that the block layer 157 * must accept a page worth of data at any offset. So if the crossing of 158 * chunks is a hard limitation in the driver, it must still be prepared 159 * to split single page bios. 160 **/ 161 void blk_queue_chunk_sectors(struct request_queue *q, unsigned int chunk_sectors) 162 { 163 q->limits.chunk_sectors = chunk_sectors; 164 } 165 EXPORT_SYMBOL(blk_queue_chunk_sectors); 166 167 /** 168 * blk_queue_max_discard_sectors - set max sectors for a single discard 169 * @q: the request queue for the device 170 * @max_discard_sectors: maximum number of sectors to discard 171 **/ 172 void blk_queue_max_discard_sectors(struct request_queue *q, 173 unsigned int max_discard_sectors) 174 { 175 q->limits.max_hw_discard_sectors = max_discard_sectors; 176 q->limits.max_discard_sectors = max_discard_sectors; 177 } 178 EXPORT_SYMBOL(blk_queue_max_discard_sectors); 179 180 /** 181 * blk_queue_max_secure_erase_sectors - set max sectors for a secure erase 182 * @q: the request queue for the device 183 * @max_sectors: maximum number of sectors to secure_erase 184 **/ 185 void blk_queue_max_secure_erase_sectors(struct request_queue *q, 186 unsigned int max_sectors) 187 { 188 q->limits.max_secure_erase_sectors = max_sectors; 189 } 190 EXPORT_SYMBOL(blk_queue_max_secure_erase_sectors); 191 192 /** 193 * blk_queue_max_write_zeroes_sectors - set max sectors for a single 194 * write zeroes 195 * @q: the request queue for the device 196 * @max_write_zeroes_sectors: maximum number of sectors to write per command 197 **/ 198 void blk_queue_max_write_zeroes_sectors(struct request_queue *q, 199 unsigned int max_write_zeroes_sectors) 200 { 201 q->limits.max_write_zeroes_sectors = max_write_zeroes_sectors; 202 } 203 EXPORT_SYMBOL(blk_queue_max_write_zeroes_sectors); 204 205 /** 206 * blk_queue_max_zone_append_sectors - set max sectors for a single zone append 207 * @q: the request queue for the device 208 * @max_zone_append_sectors: maximum number of sectors to write per command 209 **/ 210 void blk_queue_max_zone_append_sectors(struct request_queue *q, 211 unsigned int max_zone_append_sectors) 212 { 213 unsigned int max_sectors; 214 215 if (WARN_ON(!blk_queue_is_zoned(q))) 216 return; 217 218 max_sectors = min(q->limits.max_hw_sectors, max_zone_append_sectors); 219 max_sectors = min(q->limits.chunk_sectors, max_sectors); 220 221 /* 222 * Signal eventual driver bugs resulting in the max_zone_append sectors limit 223 * being 0 due to a 0 argument, the chunk_sectors limit (zone size) not set, 224 * or the max_hw_sectors limit not set. 225 */ 226 WARN_ON(!max_sectors); 227 228 q->limits.max_zone_append_sectors = max_sectors; 229 } 230 EXPORT_SYMBOL_GPL(blk_queue_max_zone_append_sectors); 231 232 /** 233 * blk_queue_max_segments - set max hw segments for a request for this queue 234 * @q: the request queue for the device 235 * @max_segments: max number of segments 236 * 237 * Description: 238 * Enables a low level driver to set an upper limit on the number of 239 * hw data segments in a request. 240 **/ 241 void blk_queue_max_segments(struct request_queue *q, unsigned short max_segments) 242 { 243 if (!max_segments) { 244 max_segments = 1; 245 printk(KERN_INFO "%s: set to minimum %d\n", 246 __func__, max_segments); 247 } 248 249 q->limits.max_segments = max_segments; 250 } 251 EXPORT_SYMBOL(blk_queue_max_segments); 252 253 /** 254 * blk_queue_max_discard_segments - set max segments for discard requests 255 * @q: the request queue for the device 256 * @max_segments: max number of segments 257 * 258 * Description: 259 * Enables a low level driver to set an upper limit on the number of 260 * segments in a discard request. 261 **/ 262 void blk_queue_max_discard_segments(struct request_queue *q, 263 unsigned short max_segments) 264 { 265 q->limits.max_discard_segments = max_segments; 266 } 267 EXPORT_SYMBOL_GPL(blk_queue_max_discard_segments); 268 269 /** 270 * blk_queue_max_segment_size - set max segment size for blk_rq_map_sg 271 * @q: the request queue for the device 272 * @max_size: max size of segment in bytes 273 * 274 * Description: 275 * Enables a low level driver to set an upper limit on the size of a 276 * coalesced segment 277 **/ 278 void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size) 279 { 280 if (max_size < PAGE_SIZE) { 281 max_size = PAGE_SIZE; 282 printk(KERN_INFO "%s: set to minimum %d\n", 283 __func__, max_size); 284 } 285 286 /* see blk_queue_virt_boundary() for the explanation */ 287 WARN_ON_ONCE(q->limits.virt_boundary_mask); 288 289 q->limits.max_segment_size = max_size; 290 } 291 EXPORT_SYMBOL(blk_queue_max_segment_size); 292 293 /** 294 * blk_queue_logical_block_size - set logical block size for the queue 295 * @q: the request queue for the device 296 * @size: the logical block size, in bytes 297 * 298 * Description: 299 * This should be set to the lowest possible block size that the 300 * storage device can address. The default of 512 covers most 301 * hardware. 302 **/ 303 void blk_queue_logical_block_size(struct request_queue *q, unsigned int size) 304 { 305 struct queue_limits *limits = &q->limits; 306 307 limits->logical_block_size = size; 308 309 if (limits->physical_block_size < size) 310 limits->physical_block_size = size; 311 312 if (limits->io_min < limits->physical_block_size) 313 limits->io_min = limits->physical_block_size; 314 315 limits->max_hw_sectors = 316 round_down(limits->max_hw_sectors, size >> SECTOR_SHIFT); 317 limits->max_sectors = 318 round_down(limits->max_sectors, size >> SECTOR_SHIFT); 319 } 320 EXPORT_SYMBOL(blk_queue_logical_block_size); 321 322 /** 323 * blk_queue_physical_block_size - set physical block size for the queue 324 * @q: the request queue for the device 325 * @size: the physical block size, in bytes 326 * 327 * Description: 328 * This should be set to the lowest possible sector size that the 329 * hardware can operate on without reverting to read-modify-write 330 * operations. 331 */ 332 void blk_queue_physical_block_size(struct request_queue *q, unsigned int size) 333 { 334 q->limits.physical_block_size = size; 335 336 if (q->limits.physical_block_size < q->limits.logical_block_size) 337 q->limits.physical_block_size = q->limits.logical_block_size; 338 339 if (q->limits.io_min < q->limits.physical_block_size) 340 q->limits.io_min = q->limits.physical_block_size; 341 } 342 EXPORT_SYMBOL(blk_queue_physical_block_size); 343 344 /** 345 * blk_queue_zone_write_granularity - set zone write granularity for the queue 346 * @q: the request queue for the zoned device 347 * @size: the zone write granularity size, in bytes 348 * 349 * Description: 350 * This should be set to the lowest possible size allowing to write in 351 * sequential zones of a zoned block device. 352 */ 353 void blk_queue_zone_write_granularity(struct request_queue *q, 354 unsigned int size) 355 { 356 if (WARN_ON_ONCE(!blk_queue_is_zoned(q))) 357 return; 358 359 q->limits.zone_write_granularity = size; 360 361 if (q->limits.zone_write_granularity < q->limits.logical_block_size) 362 q->limits.zone_write_granularity = q->limits.logical_block_size; 363 } 364 EXPORT_SYMBOL_GPL(blk_queue_zone_write_granularity); 365 366 /** 367 * blk_queue_alignment_offset - set physical block alignment offset 368 * @q: the request queue for the device 369 * @offset: alignment offset in bytes 370 * 371 * Description: 372 * Some devices are naturally misaligned to compensate for things like 373 * the legacy DOS partition table 63-sector offset. Low-level drivers 374 * should call this function for devices whose first sector is not 375 * naturally aligned. 376 */ 377 void blk_queue_alignment_offset(struct request_queue *q, unsigned int offset) 378 { 379 q->limits.alignment_offset = 380 offset & (q->limits.physical_block_size - 1); 381 q->limits.misaligned = 0; 382 } 383 EXPORT_SYMBOL(blk_queue_alignment_offset); 384 385 void disk_update_readahead(struct gendisk *disk) 386 { 387 struct request_queue *q = disk->queue; 388 389 /* 390 * For read-ahead of large files to be effective, we need to read ahead 391 * at least twice the optimal I/O size. 392 */ 393 disk->bdi->ra_pages = 394 max(queue_io_opt(q) * 2 / PAGE_SIZE, VM_READAHEAD_PAGES); 395 disk->bdi->io_pages = queue_max_sectors(q) >> (PAGE_SHIFT - 9); 396 } 397 EXPORT_SYMBOL_GPL(disk_update_readahead); 398 399 /** 400 * blk_limits_io_min - set minimum request size for a device 401 * @limits: the queue limits 402 * @min: smallest I/O size in bytes 403 * 404 * Description: 405 * Some devices have an internal block size bigger than the reported 406 * hardware sector size. This function can be used to signal the 407 * smallest I/O the device can perform without incurring a performance 408 * penalty. 409 */ 410 void blk_limits_io_min(struct queue_limits *limits, unsigned int min) 411 { 412 limits->io_min = min; 413 414 if (limits->io_min < limits->logical_block_size) 415 limits->io_min = limits->logical_block_size; 416 417 if (limits->io_min < limits->physical_block_size) 418 limits->io_min = limits->physical_block_size; 419 } 420 EXPORT_SYMBOL(blk_limits_io_min); 421 422 /** 423 * blk_queue_io_min - set minimum request size for the queue 424 * @q: the request queue for the device 425 * @min: smallest I/O size in bytes 426 * 427 * Description: 428 * Storage devices may report a granularity or preferred minimum I/O 429 * size which is the smallest request the device can perform without 430 * incurring a performance penalty. For disk drives this is often the 431 * physical block size. For RAID arrays it is often the stripe chunk 432 * size. A properly aligned multiple of minimum_io_size is the 433 * preferred request size for workloads where a high number of I/O 434 * operations is desired. 435 */ 436 void blk_queue_io_min(struct request_queue *q, unsigned int min) 437 { 438 blk_limits_io_min(&q->limits, min); 439 } 440 EXPORT_SYMBOL(blk_queue_io_min); 441 442 /** 443 * blk_limits_io_opt - set optimal request size for a device 444 * @limits: the queue limits 445 * @opt: smallest I/O size in bytes 446 * 447 * Description: 448 * Storage devices may report an optimal I/O size, which is the 449 * device's preferred unit for sustained I/O. This is rarely reported 450 * for disk drives. For RAID arrays it is usually the stripe width or 451 * the internal track size. A properly aligned multiple of 452 * optimal_io_size is the preferred request size for workloads where 453 * sustained throughput is desired. 454 */ 455 void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt) 456 { 457 limits->io_opt = opt; 458 } 459 EXPORT_SYMBOL(blk_limits_io_opt); 460 461 /** 462 * blk_queue_io_opt - set optimal request size for the queue 463 * @q: the request queue for the device 464 * @opt: optimal request size in bytes 465 * 466 * Description: 467 * Storage devices may report an optimal I/O size, which is the 468 * device's preferred unit for sustained I/O. This is rarely reported 469 * for disk drives. For RAID arrays it is usually the stripe width or 470 * the internal track size. A properly aligned multiple of 471 * optimal_io_size is the preferred request size for workloads where 472 * sustained throughput is desired. 473 */ 474 void blk_queue_io_opt(struct request_queue *q, unsigned int opt) 475 { 476 blk_limits_io_opt(&q->limits, opt); 477 if (!q->disk) 478 return; 479 q->disk->bdi->ra_pages = 480 max(queue_io_opt(q) * 2 / PAGE_SIZE, VM_READAHEAD_PAGES); 481 } 482 EXPORT_SYMBOL(blk_queue_io_opt); 483 484 static int queue_limit_alignment_offset(const struct queue_limits *lim, 485 sector_t sector) 486 { 487 unsigned int granularity = max(lim->physical_block_size, lim->io_min); 488 unsigned int alignment = sector_div(sector, granularity >> SECTOR_SHIFT) 489 << SECTOR_SHIFT; 490 491 return (granularity + lim->alignment_offset - alignment) % granularity; 492 } 493 494 static unsigned int queue_limit_discard_alignment( 495 const struct queue_limits *lim, sector_t sector) 496 { 497 unsigned int alignment, granularity, offset; 498 499 if (!lim->max_discard_sectors) 500 return 0; 501 502 /* Why are these in bytes, not sectors? */ 503 alignment = lim->discard_alignment >> SECTOR_SHIFT; 504 granularity = lim->discard_granularity >> SECTOR_SHIFT; 505 if (!granularity) 506 return 0; 507 508 /* Offset of the partition start in 'granularity' sectors */ 509 offset = sector_div(sector, granularity); 510 511 /* And why do we do this modulus *again* in blkdev_issue_discard()? */ 512 offset = (granularity + alignment - offset) % granularity; 513 514 /* Turn it back into bytes, gaah */ 515 return offset << SECTOR_SHIFT; 516 } 517 518 static unsigned int blk_round_down_sectors(unsigned int sectors, unsigned int lbs) 519 { 520 sectors = round_down(sectors, lbs >> SECTOR_SHIFT); 521 if (sectors < PAGE_SIZE >> SECTOR_SHIFT) 522 sectors = PAGE_SIZE >> SECTOR_SHIFT; 523 return sectors; 524 } 525 526 /** 527 * blk_stack_limits - adjust queue_limits for stacked devices 528 * @t: the stacking driver limits (top device) 529 * @b: the underlying queue limits (bottom, component device) 530 * @start: first data sector within component device 531 * 532 * Description: 533 * This function is used by stacking drivers like MD and DM to ensure 534 * that all component devices have compatible block sizes and 535 * alignments. The stacking driver must provide a queue_limits 536 * struct (top) and then iteratively call the stacking function for 537 * all component (bottom) devices. The stacking function will 538 * attempt to combine the values and ensure proper alignment. 539 * 540 * Returns 0 if the top and bottom queue_limits are compatible. The 541 * top device's block sizes and alignment offsets may be adjusted to 542 * ensure alignment with the bottom device. If no compatible sizes 543 * and alignments exist, -1 is returned and the resulting top 544 * queue_limits will have the misaligned flag set to indicate that 545 * the alignment_offset is undefined. 546 */ 547 int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, 548 sector_t start) 549 { 550 unsigned int top, bottom, alignment, ret = 0; 551 552 t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); 553 t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); 554 t->max_dev_sectors = min_not_zero(t->max_dev_sectors, b->max_dev_sectors); 555 t->max_write_zeroes_sectors = min(t->max_write_zeroes_sectors, 556 b->max_write_zeroes_sectors); 557 t->max_zone_append_sectors = min(t->max_zone_append_sectors, 558 b->max_zone_append_sectors); 559 t->bounce = max(t->bounce, b->bounce); 560 561 t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask, 562 b->seg_boundary_mask); 563 t->virt_boundary_mask = min_not_zero(t->virt_boundary_mask, 564 b->virt_boundary_mask); 565 566 t->max_segments = min_not_zero(t->max_segments, b->max_segments); 567 t->max_discard_segments = min_not_zero(t->max_discard_segments, 568 b->max_discard_segments); 569 t->max_integrity_segments = min_not_zero(t->max_integrity_segments, 570 b->max_integrity_segments); 571 572 t->max_segment_size = min_not_zero(t->max_segment_size, 573 b->max_segment_size); 574 575 t->misaligned |= b->misaligned; 576 577 alignment = queue_limit_alignment_offset(b, start); 578 579 /* Bottom device has different alignment. Check that it is 580 * compatible with the current top alignment. 581 */ 582 if (t->alignment_offset != alignment) { 583 584 top = max(t->physical_block_size, t->io_min) 585 + t->alignment_offset; 586 bottom = max(b->physical_block_size, b->io_min) + alignment; 587 588 /* Verify that top and bottom intervals line up */ 589 if (max(top, bottom) % min(top, bottom)) { 590 t->misaligned = 1; 591 ret = -1; 592 } 593 } 594 595 t->logical_block_size = max(t->logical_block_size, 596 b->logical_block_size); 597 598 t->physical_block_size = max(t->physical_block_size, 599 b->physical_block_size); 600 601 t->io_min = max(t->io_min, b->io_min); 602 t->io_opt = lcm_not_zero(t->io_opt, b->io_opt); 603 t->dma_alignment = max(t->dma_alignment, b->dma_alignment); 604 605 /* Set non-power-of-2 compatible chunk_sectors boundary */ 606 if (b->chunk_sectors) 607 t->chunk_sectors = gcd(t->chunk_sectors, b->chunk_sectors); 608 609 /* Physical block size a multiple of the logical block size? */ 610 if (t->physical_block_size & (t->logical_block_size - 1)) { 611 t->physical_block_size = t->logical_block_size; 612 t->misaligned = 1; 613 ret = -1; 614 } 615 616 /* Minimum I/O a multiple of the physical block size? */ 617 if (t->io_min & (t->physical_block_size - 1)) { 618 t->io_min = t->physical_block_size; 619 t->misaligned = 1; 620 ret = -1; 621 } 622 623 /* Optimal I/O a multiple of the physical block size? */ 624 if (t->io_opt & (t->physical_block_size - 1)) { 625 t->io_opt = 0; 626 t->misaligned = 1; 627 ret = -1; 628 } 629 630 /* chunk_sectors a multiple of the physical block size? */ 631 if ((t->chunk_sectors << 9) & (t->physical_block_size - 1)) { 632 t->chunk_sectors = 0; 633 t->misaligned = 1; 634 ret = -1; 635 } 636 637 t->raid_partial_stripes_expensive = 638 max(t->raid_partial_stripes_expensive, 639 b->raid_partial_stripes_expensive); 640 641 /* Find lowest common alignment_offset */ 642 t->alignment_offset = lcm_not_zero(t->alignment_offset, alignment) 643 % max(t->physical_block_size, t->io_min); 644 645 /* Verify that new alignment_offset is on a logical block boundary */ 646 if (t->alignment_offset & (t->logical_block_size - 1)) { 647 t->misaligned = 1; 648 ret = -1; 649 } 650 651 t->max_sectors = blk_round_down_sectors(t->max_sectors, t->logical_block_size); 652 t->max_hw_sectors = blk_round_down_sectors(t->max_hw_sectors, t->logical_block_size); 653 t->max_dev_sectors = blk_round_down_sectors(t->max_dev_sectors, t->logical_block_size); 654 655 /* Discard alignment and granularity */ 656 if (b->discard_granularity) { 657 alignment = queue_limit_discard_alignment(b, start); 658 659 if (t->discard_granularity != 0 && 660 t->discard_alignment != alignment) { 661 top = t->discard_granularity + t->discard_alignment; 662 bottom = b->discard_granularity + alignment; 663 664 /* Verify that top and bottom intervals line up */ 665 if ((max(top, bottom) % min(top, bottom)) != 0) 666 t->discard_misaligned = 1; 667 } 668 669 t->max_discard_sectors = min_not_zero(t->max_discard_sectors, 670 b->max_discard_sectors); 671 t->max_hw_discard_sectors = min_not_zero(t->max_hw_discard_sectors, 672 b->max_hw_discard_sectors); 673 t->discard_granularity = max(t->discard_granularity, 674 b->discard_granularity); 675 t->discard_alignment = lcm_not_zero(t->discard_alignment, alignment) % 676 t->discard_granularity; 677 } 678 t->max_secure_erase_sectors = min_not_zero(t->max_secure_erase_sectors, 679 b->max_secure_erase_sectors); 680 t->zone_write_granularity = max(t->zone_write_granularity, 681 b->zone_write_granularity); 682 t->zoned = max(t->zoned, b->zoned); 683 return ret; 684 } 685 EXPORT_SYMBOL(blk_stack_limits); 686 687 /** 688 * disk_stack_limits - adjust queue limits for stacked drivers 689 * @disk: MD/DM gendisk (top) 690 * @bdev: the underlying block device (bottom) 691 * @offset: offset to beginning of data within component device 692 * 693 * Description: 694 * Merges the limits for a top level gendisk and a bottom level 695 * block_device. 696 */ 697 void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 698 sector_t offset) 699 { 700 struct request_queue *t = disk->queue; 701 702 if (blk_stack_limits(&t->limits, &bdev_get_queue(bdev)->limits, 703 get_start_sect(bdev) + (offset >> 9)) < 0) 704 pr_notice("%s: Warning: Device %pg is misaligned\n", 705 disk->disk_name, bdev); 706 707 disk_update_readahead(disk); 708 } 709 EXPORT_SYMBOL(disk_stack_limits); 710 711 /** 712 * blk_queue_update_dma_pad - update pad mask 713 * @q: the request queue for the device 714 * @mask: pad mask 715 * 716 * Update dma pad mask. 717 * 718 * Appending pad buffer to a request modifies the last entry of a 719 * scatter list such that it includes the pad buffer. 720 **/ 721 void blk_queue_update_dma_pad(struct request_queue *q, unsigned int mask) 722 { 723 if (mask > q->dma_pad_mask) 724 q->dma_pad_mask = mask; 725 } 726 EXPORT_SYMBOL(blk_queue_update_dma_pad); 727 728 /** 729 * blk_queue_segment_boundary - set boundary rules for segment merging 730 * @q: the request queue for the device 731 * @mask: the memory boundary mask 732 **/ 733 void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask) 734 { 735 if (mask < PAGE_SIZE - 1) { 736 mask = PAGE_SIZE - 1; 737 printk(KERN_INFO "%s: set to minimum %lx\n", 738 __func__, mask); 739 } 740 741 q->limits.seg_boundary_mask = mask; 742 } 743 EXPORT_SYMBOL(blk_queue_segment_boundary); 744 745 /** 746 * blk_queue_virt_boundary - set boundary rules for bio merging 747 * @q: the request queue for the device 748 * @mask: the memory boundary mask 749 **/ 750 void blk_queue_virt_boundary(struct request_queue *q, unsigned long mask) 751 { 752 q->limits.virt_boundary_mask = mask; 753 754 /* 755 * Devices that require a virtual boundary do not support scatter/gather 756 * I/O natively, but instead require a descriptor list entry for each 757 * page (which might not be idential to the Linux PAGE_SIZE). Because 758 * of that they are not limited by our notion of "segment size". 759 */ 760 if (mask) 761 q->limits.max_segment_size = UINT_MAX; 762 } 763 EXPORT_SYMBOL(blk_queue_virt_boundary); 764 765 /** 766 * blk_queue_dma_alignment - set dma length and memory alignment 767 * @q: the request queue for the device 768 * @mask: alignment mask 769 * 770 * description: 771 * set required memory and length alignment for direct dma transactions. 772 * this is used when building direct io requests for the queue. 773 * 774 **/ 775 void blk_queue_dma_alignment(struct request_queue *q, int mask) 776 { 777 q->limits.dma_alignment = mask; 778 } 779 EXPORT_SYMBOL(blk_queue_dma_alignment); 780 781 /** 782 * blk_queue_update_dma_alignment - update dma length and memory alignment 783 * @q: the request queue for the device 784 * @mask: alignment mask 785 * 786 * description: 787 * update required memory and length alignment for direct dma transactions. 788 * If the requested alignment is larger than the current alignment, then 789 * the current queue alignment is updated to the new value, otherwise it 790 * is left alone. The design of this is to allow multiple objects 791 * (driver, device, transport etc) to set their respective 792 * alignments without having them interfere. 793 * 794 **/ 795 void blk_queue_update_dma_alignment(struct request_queue *q, int mask) 796 { 797 BUG_ON(mask > PAGE_SIZE); 798 799 if (mask > q->limits.dma_alignment) 800 q->limits.dma_alignment = mask; 801 } 802 EXPORT_SYMBOL(blk_queue_update_dma_alignment); 803 804 /** 805 * blk_set_queue_depth - tell the block layer about the device queue depth 806 * @q: the request queue for the device 807 * @depth: queue depth 808 * 809 */ 810 void blk_set_queue_depth(struct request_queue *q, unsigned int depth) 811 { 812 q->queue_depth = depth; 813 rq_qos_queue_depth_changed(q); 814 } 815 EXPORT_SYMBOL(blk_set_queue_depth); 816 817 /** 818 * blk_queue_write_cache - configure queue's write cache 819 * @q: the request queue for the device 820 * @wc: write back cache on or off 821 * @fua: device supports FUA writes, if true 822 * 823 * Tell the block layer about the write cache of @q. 824 */ 825 void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua) 826 { 827 if (wc) 828 blk_queue_flag_set(QUEUE_FLAG_WC, q); 829 else 830 blk_queue_flag_clear(QUEUE_FLAG_WC, q); 831 if (fua) 832 blk_queue_flag_set(QUEUE_FLAG_FUA, q); 833 else 834 blk_queue_flag_clear(QUEUE_FLAG_FUA, q); 835 836 wbt_set_write_cache(q, test_bit(QUEUE_FLAG_WC, &q->queue_flags)); 837 } 838 EXPORT_SYMBOL_GPL(blk_queue_write_cache); 839 840 /** 841 * blk_queue_required_elevator_features - Set a queue required elevator features 842 * @q: the request queue for the target device 843 * @features: Required elevator features OR'ed together 844 * 845 * Tell the block layer that for the device controlled through @q, only the 846 * only elevators that can be used are those that implement at least the set of 847 * features specified by @features. 848 */ 849 void blk_queue_required_elevator_features(struct request_queue *q, 850 unsigned int features) 851 { 852 q->required_elevator_features = features; 853 } 854 EXPORT_SYMBOL_GPL(blk_queue_required_elevator_features); 855 856 /** 857 * blk_queue_can_use_dma_map_merging - configure queue for merging segments. 858 * @q: the request queue for the device 859 * @dev: the device pointer for dma 860 * 861 * Tell the block layer about merging the segments by dma map of @q. 862 */ 863 bool blk_queue_can_use_dma_map_merging(struct request_queue *q, 864 struct device *dev) 865 { 866 unsigned long boundary = dma_get_merge_boundary(dev); 867 868 if (!boundary) 869 return false; 870 871 /* No need to update max_segment_size. see blk_queue_virt_boundary() */ 872 blk_queue_virt_boundary(q, boundary); 873 874 return true; 875 } 876 EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging); 877 878 static bool disk_has_partitions(struct gendisk *disk) 879 { 880 unsigned long idx; 881 struct block_device *part; 882 bool ret = false; 883 884 rcu_read_lock(); 885 xa_for_each(&disk->part_tbl, idx, part) { 886 if (bdev_is_partition(part)) { 887 ret = true; 888 break; 889 } 890 } 891 rcu_read_unlock(); 892 893 return ret; 894 } 895 896 /** 897 * disk_set_zoned - configure the zoned model for a disk 898 * @disk: the gendisk of the queue to configure 899 * @model: the zoned model to set 900 * 901 * Set the zoned model of @disk to @model. 902 * 903 * When @model is BLK_ZONED_HM (host managed), this should be called only 904 * if zoned block device support is enabled (CONFIG_BLK_DEV_ZONED option). 905 * If @model specifies BLK_ZONED_HA (host aware), the effective model used 906 * depends on CONFIG_BLK_DEV_ZONED settings and on the existence of partitions 907 * on the disk. 908 */ 909 void disk_set_zoned(struct gendisk *disk, enum blk_zoned_model model) 910 { 911 struct request_queue *q = disk->queue; 912 913 switch (model) { 914 case BLK_ZONED_HM: 915 /* 916 * Host managed devices are supported only if 917 * CONFIG_BLK_DEV_ZONED is enabled. 918 */ 919 WARN_ON_ONCE(!IS_ENABLED(CONFIG_BLK_DEV_ZONED)); 920 break; 921 case BLK_ZONED_HA: 922 /* 923 * Host aware devices can be treated either as regular block 924 * devices (similar to drive managed devices) or as zoned block 925 * devices to take advantage of the zone command set, similarly 926 * to host managed devices. We try the latter if there are no 927 * partitions and zoned block device support is enabled, else 928 * we do nothing special as far as the block layer is concerned. 929 */ 930 if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) || 931 disk_has_partitions(disk)) 932 model = BLK_ZONED_NONE; 933 break; 934 case BLK_ZONED_NONE: 935 default: 936 if (WARN_ON_ONCE(model != BLK_ZONED_NONE)) 937 model = BLK_ZONED_NONE; 938 break; 939 } 940 941 q->limits.zoned = model; 942 if (model != BLK_ZONED_NONE) { 943 /* 944 * Set the zone write granularity to the device logical block 945 * size by default. The driver can change this value if needed. 946 */ 947 blk_queue_zone_write_granularity(q, 948 queue_logical_block_size(q)); 949 } else { 950 disk_clear_zone_settings(disk); 951 } 952 } 953 EXPORT_SYMBOL_GPL(disk_set_zoned); 954 955 int bdev_alignment_offset(struct block_device *bdev) 956 { 957 struct request_queue *q = bdev_get_queue(bdev); 958 959 if (q->limits.misaligned) 960 return -1; 961 if (bdev_is_partition(bdev)) 962 return queue_limit_alignment_offset(&q->limits, 963 bdev->bd_start_sect); 964 return q->limits.alignment_offset; 965 } 966 EXPORT_SYMBOL_GPL(bdev_alignment_offset); 967 968 unsigned int bdev_discard_alignment(struct block_device *bdev) 969 { 970 struct request_queue *q = bdev_get_queue(bdev); 971 972 if (bdev_is_partition(bdev)) 973 return queue_limit_discard_alignment(&q->limits, 974 bdev->bd_start_sect); 975 return q->limits.discard_alignment; 976 } 977 EXPORT_SYMBOL_GPL(bdev_discard_alignment); 978