blk-settings.c (30928B)
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 21void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout) 22{ 23 q->rq_timeout = timeout; 24} 25EXPORT_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 */ 34void 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} 61EXPORT_SYMBOL(blk_set_default_limits); 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 */ 71void 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} 85EXPORT_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 **/ 97void blk_queue_bounce_limit(struct request_queue *q, enum blk_bounce bounce) 98{ 99 q->limits.bounce = bounce; 100} 101EXPORT_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 **/ 122void 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} 147EXPORT_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 **/ 161void blk_queue_chunk_sectors(struct request_queue *q, unsigned int chunk_sectors) 162{ 163 q->limits.chunk_sectors = chunk_sectors; 164} 165EXPORT_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 **/ 172void 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} 178EXPORT_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 **/ 185void 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} 190EXPORT_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 **/ 198void 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} 203EXPORT_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 **/ 210void 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} 230EXPORT_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 **/ 241void 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} 251EXPORT_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 **/ 262void blk_queue_max_discard_segments(struct request_queue *q, 263 unsigned short max_segments) 264{ 265 q->limits.max_discard_segments = max_segments; 266} 267EXPORT_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 **/ 278void 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} 291EXPORT_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 **/ 303void 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} 320EXPORT_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 */ 332void 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} 342EXPORT_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 */ 353void 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} 364EXPORT_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 */ 377void 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} 383EXPORT_SYMBOL(blk_queue_alignment_offset); 384 385void 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} 397EXPORT_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 */ 410void 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} 420EXPORT_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 */ 436void blk_queue_io_min(struct request_queue *q, unsigned int min) 437{ 438 blk_limits_io_min(&q->limits, min); 439} 440EXPORT_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 */ 455void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt) 456{ 457 limits->io_opt = opt; 458} 459EXPORT_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 */ 474void 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} 482EXPORT_SYMBOL(blk_queue_io_opt); 483 484static int queue_limit_alignment_offset(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 494static unsigned int queue_limit_discard_alignment(struct queue_limits *lim, 495 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 518static 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 */ 547int 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 604 /* Set non-power-of-2 compatible chunk_sectors boundary */ 605 if (b->chunk_sectors) 606 t->chunk_sectors = gcd(t->chunk_sectors, b->chunk_sectors); 607 608 /* Physical block size a multiple of the logical block size? */ 609 if (t->physical_block_size & (t->logical_block_size - 1)) { 610 t->physical_block_size = t->logical_block_size; 611 t->misaligned = 1; 612 ret = -1; 613 } 614 615 /* Minimum I/O a multiple of the physical block size? */ 616 if (t->io_min & (t->physical_block_size - 1)) { 617 t->io_min = t->physical_block_size; 618 t->misaligned = 1; 619 ret = -1; 620 } 621 622 /* Optimal I/O a multiple of the physical block size? */ 623 if (t->io_opt & (t->physical_block_size - 1)) { 624 t->io_opt = 0; 625 t->misaligned = 1; 626 ret = -1; 627 } 628 629 /* chunk_sectors a multiple of the physical block size? */ 630 if ((t->chunk_sectors << 9) & (t->physical_block_size - 1)) { 631 t->chunk_sectors = 0; 632 t->misaligned = 1; 633 ret = -1; 634 } 635 636 t->raid_partial_stripes_expensive = 637 max(t->raid_partial_stripes_expensive, 638 b->raid_partial_stripes_expensive); 639 640 /* Find lowest common alignment_offset */ 641 t->alignment_offset = lcm_not_zero(t->alignment_offset, alignment) 642 % max(t->physical_block_size, t->io_min); 643 644 /* Verify that new alignment_offset is on a logical block boundary */ 645 if (t->alignment_offset & (t->logical_block_size - 1)) { 646 t->misaligned = 1; 647 ret = -1; 648 } 649 650 t->max_sectors = blk_round_down_sectors(t->max_sectors, t->logical_block_size); 651 t->max_hw_sectors = blk_round_down_sectors(t->max_hw_sectors, t->logical_block_size); 652 t->max_dev_sectors = blk_round_down_sectors(t->max_dev_sectors, t->logical_block_size); 653 654 /* Discard alignment and granularity */ 655 if (b->discard_granularity) { 656 alignment = queue_limit_discard_alignment(b, start); 657 658 if (t->discard_granularity != 0 && 659 t->discard_alignment != alignment) { 660 top = t->discard_granularity + t->discard_alignment; 661 bottom = b->discard_granularity + alignment; 662 663 /* Verify that top and bottom intervals line up */ 664 if ((max(top, bottom) % min(top, bottom)) != 0) 665 t->discard_misaligned = 1; 666 } 667 668 t->max_discard_sectors = min_not_zero(t->max_discard_sectors, 669 b->max_discard_sectors); 670 t->max_hw_discard_sectors = min_not_zero(t->max_hw_discard_sectors, 671 b->max_hw_discard_sectors); 672 t->discard_granularity = max(t->discard_granularity, 673 b->discard_granularity); 674 t->discard_alignment = lcm_not_zero(t->discard_alignment, alignment) % 675 t->discard_granularity; 676 } 677 t->max_secure_erase_sectors = min_not_zero(t->max_secure_erase_sectors, 678 b->max_secure_erase_sectors); 679 t->zone_write_granularity = max(t->zone_write_granularity, 680 b->zone_write_granularity); 681 t->zoned = max(t->zoned, b->zoned); 682 return ret; 683} 684EXPORT_SYMBOL(blk_stack_limits); 685 686/** 687 * disk_stack_limits - adjust queue limits for stacked drivers 688 * @disk: MD/DM gendisk (top) 689 * @bdev: the underlying block device (bottom) 690 * @offset: offset to beginning of data within component device 691 * 692 * Description: 693 * Merges the limits for a top level gendisk and a bottom level 694 * block_device. 695 */ 696void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 697 sector_t offset) 698{ 699 struct request_queue *t = disk->queue; 700 701 if (blk_stack_limits(&t->limits, &bdev_get_queue(bdev)->limits, 702 get_start_sect(bdev) + (offset >> 9)) < 0) 703 pr_notice("%s: Warning: Device %pg is misaligned\n", 704 disk->disk_name, bdev); 705 706 disk_update_readahead(disk); 707} 708EXPORT_SYMBOL(disk_stack_limits); 709 710/** 711 * blk_queue_update_dma_pad - update pad mask 712 * @q: the request queue for the device 713 * @mask: pad mask 714 * 715 * Update dma pad mask. 716 * 717 * Appending pad buffer to a request modifies the last entry of a 718 * scatter list such that it includes the pad buffer. 719 **/ 720void blk_queue_update_dma_pad(struct request_queue *q, unsigned int mask) 721{ 722 if (mask > q->dma_pad_mask) 723 q->dma_pad_mask = mask; 724} 725EXPORT_SYMBOL(blk_queue_update_dma_pad); 726 727/** 728 * blk_queue_segment_boundary - set boundary rules for segment merging 729 * @q: the request queue for the device 730 * @mask: the memory boundary mask 731 **/ 732void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask) 733{ 734 if (mask < PAGE_SIZE - 1) { 735 mask = PAGE_SIZE - 1; 736 printk(KERN_INFO "%s: set to minimum %lx\n", 737 __func__, mask); 738 } 739 740 q->limits.seg_boundary_mask = mask; 741} 742EXPORT_SYMBOL(blk_queue_segment_boundary); 743 744/** 745 * blk_queue_virt_boundary - set boundary rules for bio merging 746 * @q: the request queue for the device 747 * @mask: the memory boundary mask 748 **/ 749void blk_queue_virt_boundary(struct request_queue *q, unsigned long mask) 750{ 751 q->limits.virt_boundary_mask = mask; 752 753 /* 754 * Devices that require a virtual boundary do not support scatter/gather 755 * I/O natively, but instead require a descriptor list entry for each 756 * page (which might not be idential to the Linux PAGE_SIZE). Because 757 * of that they are not limited by our notion of "segment size". 758 */ 759 if (mask) 760 q->limits.max_segment_size = UINT_MAX; 761} 762EXPORT_SYMBOL(blk_queue_virt_boundary); 763 764/** 765 * blk_queue_dma_alignment - set dma length and memory alignment 766 * @q: the request queue for the device 767 * @mask: alignment mask 768 * 769 * description: 770 * set required memory and length alignment for direct dma transactions. 771 * this is used when building direct io requests for the queue. 772 * 773 **/ 774void blk_queue_dma_alignment(struct request_queue *q, int mask) 775{ 776 q->dma_alignment = mask; 777} 778EXPORT_SYMBOL(blk_queue_dma_alignment); 779 780/** 781 * blk_queue_update_dma_alignment - update dma length and memory alignment 782 * @q: the request queue for the device 783 * @mask: alignment mask 784 * 785 * description: 786 * update required memory and length alignment for direct dma transactions. 787 * If the requested alignment is larger than the current alignment, then 788 * the current queue alignment is updated to the new value, otherwise it 789 * is left alone. The design of this is to allow multiple objects 790 * (driver, device, transport etc) to set their respective 791 * alignments without having them interfere. 792 * 793 **/ 794void blk_queue_update_dma_alignment(struct request_queue *q, int mask) 795{ 796 BUG_ON(mask > PAGE_SIZE); 797 798 if (mask > q->dma_alignment) 799 q->dma_alignment = mask; 800} 801EXPORT_SYMBOL(blk_queue_update_dma_alignment); 802 803/** 804 * blk_set_queue_depth - tell the block layer about the device queue depth 805 * @q: the request queue for the device 806 * @depth: queue depth 807 * 808 */ 809void blk_set_queue_depth(struct request_queue *q, unsigned int depth) 810{ 811 q->queue_depth = depth; 812 rq_qos_queue_depth_changed(q); 813} 814EXPORT_SYMBOL(blk_set_queue_depth); 815 816/** 817 * blk_queue_write_cache - configure queue's write cache 818 * @q: the request queue for the device 819 * @wc: write back cache on or off 820 * @fua: device supports FUA writes, if true 821 * 822 * Tell the block layer about the write cache of @q. 823 */ 824void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua) 825{ 826 if (wc) 827 blk_queue_flag_set(QUEUE_FLAG_WC, q); 828 else 829 blk_queue_flag_clear(QUEUE_FLAG_WC, q); 830 if (fua) 831 blk_queue_flag_set(QUEUE_FLAG_FUA, q); 832 else 833 blk_queue_flag_clear(QUEUE_FLAG_FUA, q); 834 835 wbt_set_write_cache(q, test_bit(QUEUE_FLAG_WC, &q->queue_flags)); 836} 837EXPORT_SYMBOL_GPL(blk_queue_write_cache); 838 839/** 840 * blk_queue_required_elevator_features - Set a queue required elevator features 841 * @q: the request queue for the target device 842 * @features: Required elevator features OR'ed together 843 * 844 * Tell the block layer that for the device controlled through @q, only the 845 * only elevators that can be used are those that implement at least the set of 846 * features specified by @features. 847 */ 848void blk_queue_required_elevator_features(struct request_queue *q, 849 unsigned int features) 850{ 851 q->required_elevator_features = features; 852} 853EXPORT_SYMBOL_GPL(blk_queue_required_elevator_features); 854 855/** 856 * blk_queue_can_use_dma_map_merging - configure queue for merging segments. 857 * @q: the request queue for the device 858 * @dev: the device pointer for dma 859 * 860 * Tell the block layer about merging the segments by dma map of @q. 861 */ 862bool blk_queue_can_use_dma_map_merging(struct request_queue *q, 863 struct device *dev) 864{ 865 unsigned long boundary = dma_get_merge_boundary(dev); 866 867 if (!boundary) 868 return false; 869 870 /* No need to update max_segment_size. see blk_queue_virt_boundary() */ 871 blk_queue_virt_boundary(q, boundary); 872 873 return true; 874} 875EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging); 876 877static bool disk_has_partitions(struct gendisk *disk) 878{ 879 unsigned long idx; 880 struct block_device *part; 881 bool ret = false; 882 883 rcu_read_lock(); 884 xa_for_each(&disk->part_tbl, idx, part) { 885 if (bdev_is_partition(part)) { 886 ret = true; 887 break; 888 } 889 } 890 rcu_read_unlock(); 891 892 return ret; 893} 894 895/** 896 * blk_queue_set_zoned - configure a disk queue zoned model. 897 * @disk: the gendisk of the queue to configure 898 * @model: the zoned model to set 899 * 900 * Set the zoned model of the request queue of @disk according to @model. 901 * When @model is BLK_ZONED_HM (host managed), this should be called only 902 * if zoned block device support is enabled (CONFIG_BLK_DEV_ZONED option). 903 * If @model specifies BLK_ZONED_HA (host aware), the effective model used 904 * depends on CONFIG_BLK_DEV_ZONED settings and on the existence of partitions 905 * on the disk. 906 */ 907void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model) 908{ 909 struct request_queue *q = disk->queue; 910 911 switch (model) { 912 case BLK_ZONED_HM: 913 /* 914 * Host managed devices are supported only if 915 * CONFIG_BLK_DEV_ZONED is enabled. 916 */ 917 WARN_ON_ONCE(!IS_ENABLED(CONFIG_BLK_DEV_ZONED)); 918 break; 919 case BLK_ZONED_HA: 920 /* 921 * Host aware devices can be treated either as regular block 922 * devices (similar to drive managed devices) or as zoned block 923 * devices to take advantage of the zone command set, similarly 924 * to host managed devices. We try the latter if there are no 925 * partitions and zoned block device support is enabled, else 926 * we do nothing special as far as the block layer is concerned. 927 */ 928 if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) || 929 disk_has_partitions(disk)) 930 model = BLK_ZONED_NONE; 931 break; 932 case BLK_ZONED_NONE: 933 default: 934 if (WARN_ON_ONCE(model != BLK_ZONED_NONE)) 935 model = BLK_ZONED_NONE; 936 break; 937 } 938 939 q->limits.zoned = model; 940 if (model != BLK_ZONED_NONE) { 941 /* 942 * Set the zone write granularity to the device logical block 943 * size by default. The driver can change this value if needed. 944 */ 945 blk_queue_zone_write_granularity(q, 946 queue_logical_block_size(q)); 947 } else { 948 blk_queue_clear_zone_settings(q); 949 } 950} 951EXPORT_SYMBOL_GPL(blk_queue_set_zoned); 952 953int bdev_alignment_offset(struct block_device *bdev) 954{ 955 struct request_queue *q = bdev_get_queue(bdev); 956 957 if (q->limits.misaligned) 958 return -1; 959 if (bdev_is_partition(bdev)) 960 return queue_limit_alignment_offset(&q->limits, 961 bdev->bd_start_sect); 962 return q->limits.alignment_offset; 963} 964EXPORT_SYMBOL_GPL(bdev_alignment_offset); 965 966unsigned int bdev_discard_alignment(struct block_device *bdev) 967{ 968 struct request_queue *q = bdev_get_queue(bdev); 969 970 if (bdev_is_partition(bdev)) 971 return queue_limit_discard_alignment(&q->limits, 972 bdev->bd_start_sect); 973 return q->limits.discard_alignment; 974} 975EXPORT_SYMBOL_GPL(bdev_discard_alignment);