1 /* 2 * Copyright (C) 2001 Sistina Software (UK) Limited. 3 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. 4 * 5 * This file is released under the GPL. 6 */ 7 8 #include "dm.h" 9 10 #include <linux/module.h> 11 #include <linux/vmalloc.h> 12 #include <linux/blkdev.h> 13 #include <linux/namei.h> 14 #include <linux/ctype.h> 15 #include <linux/string.h> 16 #include <linux/slab.h> 17 #include <linux/interrupt.h> 18 #include <linux/mutex.h> 19 #include <linux/delay.h> 20 #include <linux/atomic.h> 21 22 #define DM_MSG_PREFIX "table" 23 24 #define MAX_DEPTH 16 25 #define NODE_SIZE L1_CACHE_BYTES 26 #define KEYS_PER_NODE (NODE_SIZE / sizeof(sector_t)) 27 #define CHILDREN_PER_NODE (KEYS_PER_NODE + 1) 28 29 struct dm_table { 30 struct mapped_device *md; 31 unsigned type; 32 33 /* btree table */ 34 unsigned int depth; 35 unsigned int counts[MAX_DEPTH]; /* in nodes */ 36 sector_t *index[MAX_DEPTH]; 37 38 unsigned int num_targets; 39 unsigned int num_allocated; 40 sector_t *highs; 41 struct dm_target *targets; 42 43 struct target_type *immutable_target_type; 44 unsigned integrity_supported:1; 45 unsigned singleton:1; 46 47 /* 48 * Indicates the rw permissions for the new logical 49 * device. This should be a combination of FMODE_READ 50 * and FMODE_WRITE. 51 */ 52 fmode_t mode; 53 54 /* a list of devices used by this table */ 55 struct list_head devices; 56 57 /* events get handed up using this callback */ 58 void (*event_fn)(void *); 59 void *event_context; 60 61 struct dm_md_mempools *mempools; 62 63 struct list_head target_callbacks; 64 }; 65 66 /* 67 * Similar to ceiling(log_size(n)) 68 */ 69 static unsigned int int_log(unsigned int n, unsigned int base) 70 { 71 int result = 0; 72 73 while (n > 1) { 74 n = dm_div_up(n, base); 75 result++; 76 } 77 78 return result; 79 } 80 81 /* 82 * Calculate the index of the child node of the n'th node k'th key. 83 */ 84 static inline unsigned int get_child(unsigned int n, unsigned int k) 85 { 86 return (n * CHILDREN_PER_NODE) + k; 87 } 88 89 /* 90 * Return the n'th node of level l from table t. 91 */ 92 static inline sector_t *get_node(struct dm_table *t, 93 unsigned int l, unsigned int n) 94 { 95 return t->index[l] + (n * KEYS_PER_NODE); 96 } 97 98 /* 99 * Return the highest key that you could lookup from the n'th 100 * node on level l of the btree. 101 */ 102 static sector_t high(struct dm_table *t, unsigned int l, unsigned int n) 103 { 104 for (; l < t->depth - 1; l++) 105 n = get_child(n, CHILDREN_PER_NODE - 1); 106 107 if (n >= t->counts[l]) 108 return (sector_t) - 1; 109 110 return get_node(t, l, n)[KEYS_PER_NODE - 1]; 111 } 112 113 /* 114 * Fills in a level of the btree based on the highs of the level 115 * below it. 116 */ 117 static int setup_btree_index(unsigned int l, struct dm_table *t) 118 { 119 unsigned int n, k; 120 sector_t *node; 121 122 for (n = 0U; n < t->counts[l]; n++) { 123 node = get_node(t, l, n); 124 125 for (k = 0U; k < KEYS_PER_NODE; k++) 126 node[k] = high(t, l + 1, get_child(n, k)); 127 } 128 129 return 0; 130 } 131 132 void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size) 133 { 134 unsigned long size; 135 void *addr; 136 137 /* 138 * Check that we're not going to overflow. 139 */ 140 if (nmemb > (ULONG_MAX / elem_size)) 141 return NULL; 142 143 size = nmemb * elem_size; 144 addr = vzalloc(size); 145 146 return addr; 147 } 148 EXPORT_SYMBOL(dm_vcalloc); 149 150 /* 151 * highs, and targets are managed as dynamic arrays during a 152 * table load. 153 */ 154 static int alloc_targets(struct dm_table *t, unsigned int num) 155 { 156 sector_t *n_highs; 157 struct dm_target *n_targets; 158 159 /* 160 * Allocate both the target array and offset array at once. 161 * Append an empty entry to catch sectors beyond the end of 162 * the device. 163 */ 164 n_highs = (sector_t *) dm_vcalloc(num + 1, sizeof(struct dm_target) + 165 sizeof(sector_t)); 166 if (!n_highs) 167 return -ENOMEM; 168 169 n_targets = (struct dm_target *) (n_highs + num); 170 171 memset(n_highs, -1, sizeof(*n_highs) * num); 172 vfree(t->highs); 173 174 t->num_allocated = num; 175 t->highs = n_highs; 176 t->targets = n_targets; 177 178 return 0; 179 } 180 181 int dm_table_create(struct dm_table **result, fmode_t mode, 182 unsigned num_targets, struct mapped_device *md) 183 { 184 struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL); 185 186 if (!t) 187 return -ENOMEM; 188 189 INIT_LIST_HEAD(&t->devices); 190 INIT_LIST_HEAD(&t->target_callbacks); 191 192 if (!num_targets) 193 num_targets = KEYS_PER_NODE; 194 195 num_targets = dm_round_up(num_targets, KEYS_PER_NODE); 196 197 if (!num_targets) { 198 kfree(t); 199 return -ENOMEM; 200 } 201 202 if (alloc_targets(t, num_targets)) { 203 kfree(t); 204 return -ENOMEM; 205 } 206 207 t->mode = mode; 208 t->md = md; 209 *result = t; 210 return 0; 211 } 212 213 static void free_devices(struct list_head *devices, struct mapped_device *md) 214 { 215 struct list_head *tmp, *next; 216 217 list_for_each_safe(tmp, next, devices) { 218 struct dm_dev_internal *dd = 219 list_entry(tmp, struct dm_dev_internal, list); 220 DMWARN("%s: dm_table_destroy: dm_put_device call missing for %s", 221 dm_device_name(md), dd->dm_dev->name); 222 dm_put_table_device(md, dd->dm_dev); 223 kfree(dd); 224 } 225 } 226 227 void dm_table_destroy(struct dm_table *t) 228 { 229 unsigned int i; 230 231 if (!t) 232 return; 233 234 /* free the indexes */ 235 if (t->depth >= 2) 236 vfree(t->index[t->depth - 2]); 237 238 /* free the targets */ 239 for (i = 0; i < t->num_targets; i++) { 240 struct dm_target *tgt = t->targets + i; 241 242 if (tgt->type->dtr) 243 tgt->type->dtr(tgt); 244 245 dm_put_target_type(tgt->type); 246 } 247 248 vfree(t->highs); 249 250 /* free the device list */ 251 free_devices(&t->devices, t->md); 252 253 dm_free_md_mempools(t->mempools); 254 255 kfree(t); 256 } 257 258 /* 259 * See if we've already got a device in the list. 260 */ 261 static struct dm_dev_internal *find_device(struct list_head *l, dev_t dev) 262 { 263 struct dm_dev_internal *dd; 264 265 list_for_each_entry (dd, l, list) 266 if (dd->dm_dev->bdev->bd_dev == dev) 267 return dd; 268 269 return NULL; 270 } 271 272 /* 273 * If possible, this checks an area of a destination device is invalid. 274 */ 275 static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, 276 sector_t start, sector_t len, void *data) 277 { 278 struct request_queue *q; 279 struct queue_limits *limits = data; 280 struct block_device *bdev = dev->bdev; 281 sector_t dev_size = 282 i_size_read(bdev->bd_inode) >> SECTOR_SHIFT; 283 unsigned short logical_block_size_sectors = 284 limits->logical_block_size >> SECTOR_SHIFT; 285 char b[BDEVNAME_SIZE]; 286 287 /* 288 * Some devices exist without request functions, 289 * such as loop devices not yet bound to backing files. 290 * Forbid the use of such devices. 291 */ 292 q = bdev_get_queue(bdev); 293 if (!q || !q->make_request_fn) { 294 DMWARN("%s: %s is not yet initialised: " 295 "start=%llu, len=%llu, dev_size=%llu", 296 dm_device_name(ti->table->md), bdevname(bdev, b), 297 (unsigned long long)start, 298 (unsigned long long)len, 299 (unsigned long long)dev_size); 300 return 1; 301 } 302 303 if (!dev_size) 304 return 0; 305 306 if ((start >= dev_size) || (start + len > dev_size)) { 307 DMWARN("%s: %s too small for target: " 308 "start=%llu, len=%llu, dev_size=%llu", 309 dm_device_name(ti->table->md), bdevname(bdev, b), 310 (unsigned long long)start, 311 (unsigned long long)len, 312 (unsigned long long)dev_size); 313 return 1; 314 } 315 316 if (logical_block_size_sectors <= 1) 317 return 0; 318 319 if (start & (logical_block_size_sectors - 1)) { 320 DMWARN("%s: start=%llu not aligned to h/w " 321 "logical block size %u of %s", 322 dm_device_name(ti->table->md), 323 (unsigned long long)start, 324 limits->logical_block_size, bdevname(bdev, b)); 325 return 1; 326 } 327 328 if (len & (logical_block_size_sectors - 1)) { 329 DMWARN("%s: len=%llu not aligned to h/w " 330 "logical block size %u of %s", 331 dm_device_name(ti->table->md), 332 (unsigned long long)len, 333 limits->logical_block_size, bdevname(bdev, b)); 334 return 1; 335 } 336 337 return 0; 338 } 339 340 /* 341 * This upgrades the mode on an already open dm_dev, being 342 * careful to leave things as they were if we fail to reopen the 343 * device and not to touch the existing bdev field in case 344 * it is accessed concurrently inside dm_table_any_congested(). 345 */ 346 static int upgrade_mode(struct dm_dev_internal *dd, fmode_t new_mode, 347 struct mapped_device *md) 348 { 349 int r; 350 struct dm_dev *old_dev, *new_dev; 351 352 old_dev = dd->dm_dev; 353 354 r = dm_get_table_device(md, dd->dm_dev->bdev->bd_dev, 355 dd->dm_dev->mode | new_mode, &new_dev); 356 if (r) 357 return r; 358 359 dd->dm_dev = new_dev; 360 dm_put_table_device(md, old_dev); 361 362 return 0; 363 } 364 365 /* 366 * Add a device to the list, or just increment the usage count if 367 * it's already present. 368 */ 369 int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, 370 struct dm_dev **result) 371 { 372 int r; 373 dev_t uninitialized_var(dev); 374 struct dm_dev_internal *dd; 375 unsigned int major, minor; 376 struct dm_table *t = ti->table; 377 char dummy; 378 379 BUG_ON(!t); 380 381 if (sscanf(path, "%u:%u%c", &major, &minor, &dummy) == 2) { 382 /* Extract the major/minor numbers */ 383 dev = MKDEV(major, minor); 384 if (MAJOR(dev) != major || MINOR(dev) != minor) 385 return -EOVERFLOW; 386 } else { 387 /* convert the path to a device */ 388 struct block_device *bdev = lookup_bdev(path); 389 390 if (IS_ERR(bdev)) 391 return PTR_ERR(bdev); 392 dev = bdev->bd_dev; 393 bdput(bdev); 394 } 395 396 dd = find_device(&t->devices, dev); 397 if (!dd) { 398 dd = kmalloc(sizeof(*dd), GFP_KERNEL); 399 if (!dd) 400 return -ENOMEM; 401 402 if ((r = dm_get_table_device(t->md, dev, mode, &dd->dm_dev))) { 403 kfree(dd); 404 return r; 405 } 406 407 atomic_set(&dd->count, 0); 408 list_add(&dd->list, &t->devices); 409 410 } else if (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) { 411 r = upgrade_mode(dd, mode, t->md); 412 if (r) 413 return r; 414 } 415 atomic_inc(&dd->count); 416 417 *result = dd->dm_dev; 418 return 0; 419 } 420 EXPORT_SYMBOL(dm_get_device); 421 422 static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, 423 sector_t start, sector_t len, void *data) 424 { 425 struct queue_limits *limits = data; 426 struct block_device *bdev = dev->bdev; 427 struct request_queue *q = bdev_get_queue(bdev); 428 char b[BDEVNAME_SIZE]; 429 430 if (unlikely(!q)) { 431 DMWARN("%s: Cannot set limits for nonexistent device %s", 432 dm_device_name(ti->table->md), bdevname(bdev, b)); 433 return 0; 434 } 435 436 if (bdev_stack_limits(limits, bdev, start) < 0) 437 DMWARN("%s: adding target device %s caused an alignment inconsistency: " 438 "physical_block_size=%u, logical_block_size=%u, " 439 "alignment_offset=%u, start=%llu", 440 dm_device_name(ti->table->md), bdevname(bdev, b), 441 q->limits.physical_block_size, 442 q->limits.logical_block_size, 443 q->limits.alignment_offset, 444 (unsigned long long) start << SECTOR_SHIFT); 445 446 /* 447 * Check if merge fn is supported. 448 * If not we'll force DM to use PAGE_SIZE or 449 * smaller I/O, just to be safe. 450 */ 451 if (dm_queue_merge_is_compulsory(q) && !ti->type->merge) 452 blk_limits_max_hw_sectors(limits, 453 (unsigned int) (PAGE_SIZE >> 9)); 454 return 0; 455 } 456 457 /* 458 * Decrement a device's use count and remove it if necessary. 459 */ 460 void dm_put_device(struct dm_target *ti, struct dm_dev *d) 461 { 462 int found = 0; 463 struct list_head *devices = &ti->table->devices; 464 struct dm_dev_internal *dd; 465 466 list_for_each_entry(dd, devices, list) { 467 if (dd->dm_dev == d) { 468 found = 1; 469 break; 470 } 471 } 472 if (!found) { 473 DMWARN("%s: device %s not in table devices list", 474 dm_device_name(ti->table->md), d->name); 475 return; 476 } 477 if (atomic_dec_and_test(&dd->count)) { 478 dm_put_table_device(ti->table->md, d); 479 list_del(&dd->list); 480 kfree(dd); 481 } 482 } 483 EXPORT_SYMBOL(dm_put_device); 484 485 /* 486 * Checks to see if the target joins onto the end of the table. 487 */ 488 static int adjoin(struct dm_table *table, struct dm_target *ti) 489 { 490 struct dm_target *prev; 491 492 if (!table->num_targets) 493 return !ti->begin; 494 495 prev = &table->targets[table->num_targets - 1]; 496 return (ti->begin == (prev->begin + prev->len)); 497 } 498 499 /* 500 * Used to dynamically allocate the arg array. 501 * 502 * We do first allocation with GFP_NOIO because dm-mpath and dm-thin must 503 * process messages even if some device is suspended. These messages have a 504 * small fixed number of arguments. 505 * 506 * On the other hand, dm-switch needs to process bulk data using messages and 507 * excessive use of GFP_NOIO could cause trouble. 508 */ 509 static char **realloc_argv(unsigned *array_size, char **old_argv) 510 { 511 char **argv; 512 unsigned new_size; 513 gfp_t gfp; 514 515 if (*array_size) { 516 new_size = *array_size * 2; 517 gfp = GFP_KERNEL; 518 } else { 519 new_size = 8; 520 gfp = GFP_NOIO; 521 } 522 argv = kmalloc(new_size * sizeof(*argv), gfp); 523 if (argv) { 524 memcpy(argv, old_argv, *array_size * sizeof(*argv)); 525 *array_size = new_size; 526 } 527 528 kfree(old_argv); 529 return argv; 530 } 531 532 /* 533 * Destructively splits up the argument list to pass to ctr. 534 */ 535 int dm_split_args(int *argc, char ***argvp, char *input) 536 { 537 char *start, *end = input, *out, **argv = NULL; 538 unsigned array_size = 0; 539 540 *argc = 0; 541 542 if (!input) { 543 *argvp = NULL; 544 return 0; 545 } 546 547 argv = realloc_argv(&array_size, argv); 548 if (!argv) 549 return -ENOMEM; 550 551 while (1) { 552 /* Skip whitespace */ 553 start = skip_spaces(end); 554 555 if (!*start) 556 break; /* success, we hit the end */ 557 558 /* 'out' is used to remove any back-quotes */ 559 end = out = start; 560 while (*end) { 561 /* Everything apart from '\0' can be quoted */ 562 if (*end == '\\' && *(end + 1)) { 563 *out++ = *(end + 1); 564 end += 2; 565 continue; 566 } 567 568 if (isspace(*end)) 569 break; /* end of token */ 570 571 *out++ = *end++; 572 } 573 574 /* have we already filled the array ? */ 575 if ((*argc + 1) > array_size) { 576 argv = realloc_argv(&array_size, argv); 577 if (!argv) 578 return -ENOMEM; 579 } 580 581 /* we know this is whitespace */ 582 if (*end) 583 end++; 584 585 /* terminate the string and put it in the array */ 586 *out = '\0'; 587 argv[*argc] = start; 588 (*argc)++; 589 } 590 591 *argvp = argv; 592 return 0; 593 } 594 595 /* 596 * Impose necessary and sufficient conditions on a devices's table such 597 * that any incoming bio which respects its logical_block_size can be 598 * processed successfully. If it falls across the boundary between 599 * two or more targets, the size of each piece it gets split into must 600 * be compatible with the logical_block_size of the target processing it. 601 */ 602 static int validate_hardware_logical_block_alignment(struct dm_table *table, 603 struct queue_limits *limits) 604 { 605 /* 606 * This function uses arithmetic modulo the logical_block_size 607 * (in units of 512-byte sectors). 608 */ 609 unsigned short device_logical_block_size_sects = 610 limits->logical_block_size >> SECTOR_SHIFT; 611 612 /* 613 * Offset of the start of the next table entry, mod logical_block_size. 614 */ 615 unsigned short next_target_start = 0; 616 617 /* 618 * Given an aligned bio that extends beyond the end of a 619 * target, how many sectors must the next target handle? 620 */ 621 unsigned short remaining = 0; 622 623 struct dm_target *uninitialized_var(ti); 624 struct queue_limits ti_limits; 625 unsigned i = 0; 626 627 /* 628 * Check each entry in the table in turn. 629 */ 630 while (i < dm_table_get_num_targets(table)) { 631 ti = dm_table_get_target(table, i++); 632 633 blk_set_stacking_limits(&ti_limits); 634 635 /* combine all target devices' limits */ 636 if (ti->type->iterate_devices) 637 ti->type->iterate_devices(ti, dm_set_device_limits, 638 &ti_limits); 639 640 /* 641 * If the remaining sectors fall entirely within this 642 * table entry are they compatible with its logical_block_size? 643 */ 644 if (remaining < ti->len && 645 remaining & ((ti_limits.logical_block_size >> 646 SECTOR_SHIFT) - 1)) 647 break; /* Error */ 648 649 next_target_start = 650 (unsigned short) ((next_target_start + ti->len) & 651 (device_logical_block_size_sects - 1)); 652 remaining = next_target_start ? 653 device_logical_block_size_sects - next_target_start : 0; 654 } 655 656 if (remaining) { 657 DMWARN("%s: table line %u (start sect %llu len %llu) " 658 "not aligned to h/w logical block size %u", 659 dm_device_name(table->md), i, 660 (unsigned long long) ti->begin, 661 (unsigned long long) ti->len, 662 limits->logical_block_size); 663 return -EINVAL; 664 } 665 666 return 0; 667 } 668 669 int dm_table_add_target(struct dm_table *t, const char *type, 670 sector_t start, sector_t len, char *params) 671 { 672 int r = -EINVAL, argc; 673 char **argv; 674 struct dm_target *tgt; 675 676 if (t->singleton) { 677 DMERR("%s: target type %s must appear alone in table", 678 dm_device_name(t->md), t->targets->type->name); 679 return -EINVAL; 680 } 681 682 BUG_ON(t->num_targets >= t->num_allocated); 683 684 tgt = t->targets + t->num_targets; 685 memset(tgt, 0, sizeof(*tgt)); 686 687 if (!len) { 688 DMERR("%s: zero-length target", dm_device_name(t->md)); 689 return -EINVAL; 690 } 691 692 tgt->type = dm_get_target_type(type); 693 if (!tgt->type) { 694 DMERR("%s: %s: unknown target type", dm_device_name(t->md), 695 type); 696 return -EINVAL; 697 } 698 699 if (dm_target_needs_singleton(tgt->type)) { 700 if (t->num_targets) { 701 DMERR("%s: target type %s must appear alone in table", 702 dm_device_name(t->md), type); 703 return -EINVAL; 704 } 705 t->singleton = 1; 706 } 707 708 if (dm_target_always_writeable(tgt->type) && !(t->mode & FMODE_WRITE)) { 709 DMERR("%s: target type %s may not be included in read-only tables", 710 dm_device_name(t->md), type); 711 return -EINVAL; 712 } 713 714 if (t->immutable_target_type) { 715 if (t->immutable_target_type != tgt->type) { 716 DMERR("%s: immutable target type %s cannot be mixed with other target types", 717 dm_device_name(t->md), t->immutable_target_type->name); 718 return -EINVAL; 719 } 720 } else if (dm_target_is_immutable(tgt->type)) { 721 if (t->num_targets) { 722 DMERR("%s: immutable target type %s cannot be mixed with other target types", 723 dm_device_name(t->md), tgt->type->name); 724 return -EINVAL; 725 } 726 t->immutable_target_type = tgt->type; 727 } 728 729 tgt->table = t; 730 tgt->begin = start; 731 tgt->len = len; 732 tgt->error = "Unknown error"; 733 734 /* 735 * Does this target adjoin the previous one ? 736 */ 737 if (!adjoin(t, tgt)) { 738 tgt->error = "Gap in table"; 739 r = -EINVAL; 740 goto bad; 741 } 742 743 r = dm_split_args(&argc, &argv, params); 744 if (r) { 745 tgt->error = "couldn't split parameters (insufficient memory)"; 746 goto bad; 747 } 748 749 r = tgt->type->ctr(tgt, argc, argv); 750 kfree(argv); 751 if (r) 752 goto bad; 753 754 t->highs[t->num_targets++] = tgt->begin + tgt->len - 1; 755 756 if (!tgt->num_discard_bios && tgt->discards_supported) 757 DMWARN("%s: %s: ignoring discards_supported because num_discard_bios is zero.", 758 dm_device_name(t->md), type); 759 760 return 0; 761 762 bad: 763 DMERR("%s: %s: %s", dm_device_name(t->md), type, tgt->error); 764 dm_put_target_type(tgt->type); 765 return r; 766 } 767 768 /* 769 * Target argument parsing helpers. 770 */ 771 static int validate_next_arg(struct dm_arg *arg, struct dm_arg_set *arg_set, 772 unsigned *value, char **error, unsigned grouped) 773 { 774 const char *arg_str = dm_shift_arg(arg_set); 775 char dummy; 776 777 if (!arg_str || 778 (sscanf(arg_str, "%u%c", value, &dummy) != 1) || 779 (*value < arg->min) || 780 (*value > arg->max) || 781 (grouped && arg_set->argc < *value)) { 782 *error = arg->error; 783 return -EINVAL; 784 } 785 786 return 0; 787 } 788 789 int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set, 790 unsigned *value, char **error) 791 { 792 return validate_next_arg(arg, arg_set, value, error, 0); 793 } 794 EXPORT_SYMBOL(dm_read_arg); 795 796 int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set, 797 unsigned *value, char **error) 798 { 799 return validate_next_arg(arg, arg_set, value, error, 1); 800 } 801 EXPORT_SYMBOL(dm_read_arg_group); 802 803 const char *dm_shift_arg(struct dm_arg_set *as) 804 { 805 char *r; 806 807 if (as->argc) { 808 as->argc--; 809 r = *as->argv; 810 as->argv++; 811 return r; 812 } 813 814 return NULL; 815 } 816 EXPORT_SYMBOL(dm_shift_arg); 817 818 void dm_consume_args(struct dm_arg_set *as, unsigned num_args) 819 { 820 BUG_ON(as->argc < num_args); 821 as->argc -= num_args; 822 as->argv += num_args; 823 } 824 EXPORT_SYMBOL(dm_consume_args); 825 826 static int dm_table_set_type(struct dm_table *t) 827 { 828 unsigned i; 829 unsigned bio_based = 0, request_based = 0, hybrid = 0; 830 bool use_blk_mq = false; 831 struct dm_target *tgt; 832 struct dm_dev_internal *dd; 833 struct list_head *devices; 834 unsigned live_md_type = dm_get_md_type(t->md); 835 836 for (i = 0; i < t->num_targets; i++) { 837 tgt = t->targets + i; 838 if (dm_target_hybrid(tgt)) 839 hybrid = 1; 840 else if (dm_target_request_based(tgt)) 841 request_based = 1; 842 else 843 bio_based = 1; 844 845 if (bio_based && request_based) { 846 DMWARN("Inconsistent table: different target types" 847 " can't be mixed up"); 848 return -EINVAL; 849 } 850 } 851 852 if (hybrid && !bio_based && !request_based) { 853 /* 854 * The targets can work either way. 855 * Determine the type from the live device. 856 * Default to bio-based if device is new. 857 */ 858 if (live_md_type == DM_TYPE_REQUEST_BASED || 859 live_md_type == DM_TYPE_MQ_REQUEST_BASED) 860 request_based = 1; 861 else 862 bio_based = 1; 863 } 864 865 if (bio_based) { 866 /* We must use this table as bio-based */ 867 t->type = DM_TYPE_BIO_BASED; 868 return 0; 869 } 870 871 BUG_ON(!request_based); /* No targets in this table */ 872 873 /* 874 * Request-based dm supports only tables that have a single target now. 875 * To support multiple targets, request splitting support is needed, 876 * and that needs lots of changes in the block-layer. 877 * (e.g. request completion process for partial completion.) 878 */ 879 if (t->num_targets > 1) { 880 DMWARN("Request-based dm doesn't support multiple targets yet"); 881 return -EINVAL; 882 } 883 884 /* Non-request-stackable devices can't be used for request-based dm */ 885 devices = dm_table_get_devices(t); 886 list_for_each_entry(dd, devices, list) { 887 struct request_queue *q = bdev_get_queue(dd->dm_dev->bdev); 888 889 if (!blk_queue_stackable(q)) { 890 DMERR("table load rejected: including" 891 " non-request-stackable devices"); 892 return -EINVAL; 893 } 894 895 if (q->mq_ops) 896 use_blk_mq = true; 897 } 898 899 if (use_blk_mq) { 900 /* verify _all_ devices in the table are blk-mq devices */ 901 list_for_each_entry(dd, devices, list) 902 if (!bdev_get_queue(dd->dm_dev->bdev)->mq_ops) { 903 DMERR("table load rejected: not all devices" 904 " are blk-mq request-stackable"); 905 return -EINVAL; 906 } 907 t->type = DM_TYPE_MQ_REQUEST_BASED; 908 909 } else if (hybrid && list_empty(devices) && live_md_type != DM_TYPE_NONE) { 910 /* inherit live MD type */ 911 t->type = live_md_type; 912 913 } else 914 t->type = DM_TYPE_REQUEST_BASED; 915 916 return 0; 917 } 918 919 unsigned dm_table_get_type(struct dm_table *t) 920 { 921 return t->type; 922 } 923 924 struct target_type *dm_table_get_immutable_target_type(struct dm_table *t) 925 { 926 return t->immutable_target_type; 927 } 928 929 bool dm_table_request_based(struct dm_table *t) 930 { 931 unsigned table_type = dm_table_get_type(t); 932 933 return (table_type == DM_TYPE_REQUEST_BASED || 934 table_type == DM_TYPE_MQ_REQUEST_BASED); 935 } 936 937 bool dm_table_mq_request_based(struct dm_table *t) 938 { 939 return dm_table_get_type(t) == DM_TYPE_MQ_REQUEST_BASED; 940 } 941 942 static int dm_table_alloc_md_mempools(struct dm_table *t) 943 { 944 unsigned type = dm_table_get_type(t); 945 unsigned per_bio_data_size = 0; 946 struct dm_target *tgt; 947 unsigned i; 948 949 if (unlikely(type == DM_TYPE_NONE)) { 950 DMWARN("no table type is set, can't allocate mempools"); 951 return -EINVAL; 952 } 953 954 if (type == DM_TYPE_BIO_BASED) 955 for (i = 0; i < t->num_targets; i++) { 956 tgt = t->targets + i; 957 per_bio_data_size = max(per_bio_data_size, tgt->per_bio_data_size); 958 } 959 960 t->mempools = dm_alloc_md_mempools(type, t->integrity_supported, per_bio_data_size); 961 if (!t->mempools) 962 return -ENOMEM; 963 964 return 0; 965 } 966 967 void dm_table_free_md_mempools(struct dm_table *t) 968 { 969 dm_free_md_mempools(t->mempools); 970 t->mempools = NULL; 971 } 972 973 struct dm_md_mempools *dm_table_get_md_mempools(struct dm_table *t) 974 { 975 return t->mempools; 976 } 977 978 static int setup_indexes(struct dm_table *t) 979 { 980 int i; 981 unsigned int total = 0; 982 sector_t *indexes; 983 984 /* allocate the space for *all* the indexes */ 985 for (i = t->depth - 2; i >= 0; i--) { 986 t->counts[i] = dm_div_up(t->counts[i + 1], CHILDREN_PER_NODE); 987 total += t->counts[i]; 988 } 989 990 indexes = (sector_t *) dm_vcalloc(total, (unsigned long) NODE_SIZE); 991 if (!indexes) 992 return -ENOMEM; 993 994 /* set up internal nodes, bottom-up */ 995 for (i = t->depth - 2; i >= 0; i--) { 996 t->index[i] = indexes; 997 indexes += (KEYS_PER_NODE * t->counts[i]); 998 setup_btree_index(i, t); 999 } 1000 1001 return 0; 1002 } 1003 1004 /* 1005 * Builds the btree to index the map. 1006 */ 1007 static int dm_table_build_index(struct dm_table *t) 1008 { 1009 int r = 0; 1010 unsigned int leaf_nodes; 1011 1012 /* how many indexes will the btree have ? */ 1013 leaf_nodes = dm_div_up(t->num_targets, KEYS_PER_NODE); 1014 t->depth = 1 + int_log(leaf_nodes, CHILDREN_PER_NODE); 1015 1016 /* leaf layer has already been set up */ 1017 t->counts[t->depth - 1] = leaf_nodes; 1018 t->index[t->depth - 1] = t->highs; 1019 1020 if (t->depth >= 2) 1021 r = setup_indexes(t); 1022 1023 return r; 1024 } 1025 1026 /* 1027 * Get a disk whose integrity profile reflects the table's profile. 1028 * If %match_all is true, all devices' profiles must match. 1029 * If %match_all is false, all devices must at least have an 1030 * allocated integrity profile; but uninitialized is ok. 1031 * Returns NULL if integrity support was inconsistent or unavailable. 1032 */ 1033 static struct gendisk * dm_table_get_integrity_disk(struct dm_table *t, 1034 bool match_all) 1035 { 1036 struct list_head *devices = dm_table_get_devices(t); 1037 struct dm_dev_internal *dd = NULL; 1038 struct gendisk *prev_disk = NULL, *template_disk = NULL; 1039 1040 list_for_each_entry(dd, devices, list) { 1041 template_disk = dd->dm_dev->bdev->bd_disk; 1042 if (!blk_get_integrity(template_disk)) 1043 goto no_integrity; 1044 if (!match_all && !blk_integrity_is_initialized(template_disk)) 1045 continue; /* skip uninitialized profiles */ 1046 else if (prev_disk && 1047 blk_integrity_compare(prev_disk, template_disk) < 0) 1048 goto no_integrity; 1049 prev_disk = template_disk; 1050 } 1051 1052 return template_disk; 1053 1054 no_integrity: 1055 if (prev_disk) 1056 DMWARN("%s: integrity not set: %s and %s profile mismatch", 1057 dm_device_name(t->md), 1058 prev_disk->disk_name, 1059 template_disk->disk_name); 1060 return NULL; 1061 } 1062 1063 /* 1064 * Register the mapped device for blk_integrity support if 1065 * the underlying devices have an integrity profile. But all devices 1066 * may not have matching profiles (checking all devices isn't reliable 1067 * during table load because this table may use other DM device(s) which 1068 * must be resumed before they will have an initialized integity profile). 1069 * Stacked DM devices force a 2 stage integrity profile validation: 1070 * 1 - during load, validate all initialized integrity profiles match 1071 * 2 - during resume, validate all integrity profiles match 1072 */ 1073 static int dm_table_prealloc_integrity(struct dm_table *t, struct mapped_device *md) 1074 { 1075 struct gendisk *template_disk = NULL; 1076 1077 template_disk = dm_table_get_integrity_disk(t, false); 1078 if (!template_disk) 1079 return 0; 1080 1081 if (!blk_integrity_is_initialized(dm_disk(md))) { 1082 t->integrity_supported = 1; 1083 return blk_integrity_register(dm_disk(md), NULL); 1084 } 1085 1086 /* 1087 * If DM device already has an initalized integrity 1088 * profile the new profile should not conflict. 1089 */ 1090 if (blk_integrity_is_initialized(template_disk) && 1091 blk_integrity_compare(dm_disk(md), template_disk) < 0) { 1092 DMWARN("%s: conflict with existing integrity profile: " 1093 "%s profile mismatch", 1094 dm_device_name(t->md), 1095 template_disk->disk_name); 1096 return 1; 1097 } 1098 1099 /* Preserve existing initialized integrity profile */ 1100 t->integrity_supported = 1; 1101 return 0; 1102 } 1103 1104 /* 1105 * Prepares the table for use by building the indices, 1106 * setting the type, and allocating mempools. 1107 */ 1108 int dm_table_complete(struct dm_table *t) 1109 { 1110 int r; 1111 1112 r = dm_table_set_type(t); 1113 if (r) { 1114 DMERR("unable to set table type"); 1115 return r; 1116 } 1117 1118 r = dm_table_build_index(t); 1119 if (r) { 1120 DMERR("unable to build btrees"); 1121 return r; 1122 } 1123 1124 r = dm_table_prealloc_integrity(t, t->md); 1125 if (r) { 1126 DMERR("could not register integrity profile."); 1127 return r; 1128 } 1129 1130 r = dm_table_alloc_md_mempools(t); 1131 if (r) 1132 DMERR("unable to allocate mempools"); 1133 1134 return r; 1135 } 1136 1137 static DEFINE_MUTEX(_event_lock); 1138 void dm_table_event_callback(struct dm_table *t, 1139 void (*fn)(void *), void *context) 1140 { 1141 mutex_lock(&_event_lock); 1142 t->event_fn = fn; 1143 t->event_context = context; 1144 mutex_unlock(&_event_lock); 1145 } 1146 1147 void dm_table_event(struct dm_table *t) 1148 { 1149 /* 1150 * You can no longer call dm_table_event() from interrupt 1151 * context, use a bottom half instead. 1152 */ 1153 BUG_ON(in_interrupt()); 1154 1155 mutex_lock(&_event_lock); 1156 if (t->event_fn) 1157 t->event_fn(t->event_context); 1158 mutex_unlock(&_event_lock); 1159 } 1160 EXPORT_SYMBOL(dm_table_event); 1161 1162 sector_t dm_table_get_size(struct dm_table *t) 1163 { 1164 return t->num_targets ? (t->highs[t->num_targets - 1] + 1) : 0; 1165 } 1166 EXPORT_SYMBOL(dm_table_get_size); 1167 1168 struct dm_target *dm_table_get_target(struct dm_table *t, unsigned int index) 1169 { 1170 if (index >= t->num_targets) 1171 return NULL; 1172 1173 return t->targets + index; 1174 } 1175 1176 /* 1177 * Search the btree for the correct target. 1178 * 1179 * Caller should check returned pointer with dm_target_is_valid() 1180 * to trap I/O beyond end of device. 1181 */ 1182 struct dm_target *dm_table_find_target(struct dm_table *t, sector_t sector) 1183 { 1184 unsigned int l, n = 0, k = 0; 1185 sector_t *node; 1186 1187 for (l = 0; l < t->depth; l++) { 1188 n = get_child(n, k); 1189 node = get_node(t, l, n); 1190 1191 for (k = 0; k < KEYS_PER_NODE; k++) 1192 if (node[k] >= sector) 1193 break; 1194 } 1195 1196 return &t->targets[(KEYS_PER_NODE * n) + k]; 1197 } 1198 1199 static int count_device(struct dm_target *ti, struct dm_dev *dev, 1200 sector_t start, sector_t len, void *data) 1201 { 1202 unsigned *num_devices = data; 1203 1204 (*num_devices)++; 1205 1206 return 0; 1207 } 1208 1209 /* 1210 * Check whether a table has no data devices attached using each 1211 * target's iterate_devices method. 1212 * Returns false if the result is unknown because a target doesn't 1213 * support iterate_devices. 1214 */ 1215 bool dm_table_has_no_data_devices(struct dm_table *table) 1216 { 1217 struct dm_target *uninitialized_var(ti); 1218 unsigned i = 0, num_devices = 0; 1219 1220 while (i < dm_table_get_num_targets(table)) { 1221 ti = dm_table_get_target(table, i++); 1222 1223 if (!ti->type->iterate_devices) 1224 return false; 1225 1226 ti->type->iterate_devices(ti, count_device, &num_devices); 1227 if (num_devices) 1228 return false; 1229 } 1230 1231 return true; 1232 } 1233 1234 /* 1235 * Establish the new table's queue_limits and validate them. 1236 */ 1237 int dm_calculate_queue_limits(struct dm_table *table, 1238 struct queue_limits *limits) 1239 { 1240 struct dm_target *uninitialized_var(ti); 1241 struct queue_limits ti_limits; 1242 unsigned i = 0; 1243 1244 blk_set_stacking_limits(limits); 1245 1246 while (i < dm_table_get_num_targets(table)) { 1247 blk_set_stacking_limits(&ti_limits); 1248 1249 ti = dm_table_get_target(table, i++); 1250 1251 if (!ti->type->iterate_devices) 1252 goto combine_limits; 1253 1254 /* 1255 * Combine queue limits of all the devices this target uses. 1256 */ 1257 ti->type->iterate_devices(ti, dm_set_device_limits, 1258 &ti_limits); 1259 1260 /* Set I/O hints portion of queue limits */ 1261 if (ti->type->io_hints) 1262 ti->type->io_hints(ti, &ti_limits); 1263 1264 /* 1265 * Check each device area is consistent with the target's 1266 * overall queue limits. 1267 */ 1268 if (ti->type->iterate_devices(ti, device_area_is_invalid, 1269 &ti_limits)) 1270 return -EINVAL; 1271 1272 combine_limits: 1273 /* 1274 * Merge this target's queue limits into the overall limits 1275 * for the table. 1276 */ 1277 if (blk_stack_limits(limits, &ti_limits, 0) < 0) 1278 DMWARN("%s: adding target device " 1279 "(start sect %llu len %llu) " 1280 "caused an alignment inconsistency", 1281 dm_device_name(table->md), 1282 (unsigned long long) ti->begin, 1283 (unsigned long long) ti->len); 1284 } 1285 1286 return validate_hardware_logical_block_alignment(table, limits); 1287 } 1288 1289 /* 1290 * Set the integrity profile for this device if all devices used have 1291 * matching profiles. We're quite deep in the resume path but still 1292 * don't know if all devices (particularly DM devices this device 1293 * may be stacked on) have matching profiles. Even if the profiles 1294 * don't match we have no way to fail (to resume) at this point. 1295 */ 1296 static void dm_table_set_integrity(struct dm_table *t) 1297 { 1298 struct gendisk *template_disk = NULL; 1299 1300 if (!blk_get_integrity(dm_disk(t->md))) 1301 return; 1302 1303 template_disk = dm_table_get_integrity_disk(t, true); 1304 if (template_disk) 1305 blk_integrity_register(dm_disk(t->md), 1306 blk_get_integrity(template_disk)); 1307 else if (blk_integrity_is_initialized(dm_disk(t->md))) 1308 DMWARN("%s: device no longer has a valid integrity profile", 1309 dm_device_name(t->md)); 1310 else 1311 DMWARN("%s: unable to establish an integrity profile", 1312 dm_device_name(t->md)); 1313 } 1314 1315 static int device_flush_capable(struct dm_target *ti, struct dm_dev *dev, 1316 sector_t start, sector_t len, void *data) 1317 { 1318 unsigned flush = (*(unsigned *)data); 1319 struct request_queue *q = bdev_get_queue(dev->bdev); 1320 1321 return q && (q->flush_flags & flush); 1322 } 1323 1324 static bool dm_table_supports_flush(struct dm_table *t, unsigned flush) 1325 { 1326 struct dm_target *ti; 1327 unsigned i = 0; 1328 1329 /* 1330 * Require at least one underlying device to support flushes. 1331 * t->devices includes internal dm devices such as mirror logs 1332 * so we need to use iterate_devices here, which targets 1333 * supporting flushes must provide. 1334 */ 1335 while (i < dm_table_get_num_targets(t)) { 1336 ti = dm_table_get_target(t, i++); 1337 1338 if (!ti->num_flush_bios) 1339 continue; 1340 1341 if (ti->flush_supported) 1342 return 1; 1343 1344 if (ti->type->iterate_devices && 1345 ti->type->iterate_devices(ti, device_flush_capable, &flush)) 1346 return 1; 1347 } 1348 1349 return 0; 1350 } 1351 1352 static bool dm_table_discard_zeroes_data(struct dm_table *t) 1353 { 1354 struct dm_target *ti; 1355 unsigned i = 0; 1356 1357 /* Ensure that all targets supports discard_zeroes_data. */ 1358 while (i < dm_table_get_num_targets(t)) { 1359 ti = dm_table_get_target(t, i++); 1360 1361 if (ti->discard_zeroes_data_unsupported) 1362 return 0; 1363 } 1364 1365 return 1; 1366 } 1367 1368 static int device_is_nonrot(struct dm_target *ti, struct dm_dev *dev, 1369 sector_t start, sector_t len, void *data) 1370 { 1371 struct request_queue *q = bdev_get_queue(dev->bdev); 1372 1373 return q && blk_queue_nonrot(q); 1374 } 1375 1376 static int device_is_not_random(struct dm_target *ti, struct dm_dev *dev, 1377 sector_t start, sector_t len, void *data) 1378 { 1379 struct request_queue *q = bdev_get_queue(dev->bdev); 1380 1381 return q && !blk_queue_add_random(q); 1382 } 1383 1384 static int queue_supports_sg_merge(struct dm_target *ti, struct dm_dev *dev, 1385 sector_t start, sector_t len, void *data) 1386 { 1387 struct request_queue *q = bdev_get_queue(dev->bdev); 1388 1389 return q && !test_bit(QUEUE_FLAG_NO_SG_MERGE, &q->queue_flags); 1390 } 1391 1392 static int queue_supports_sg_gaps(struct dm_target *ti, struct dm_dev *dev, 1393 sector_t start, sector_t len, void *data) 1394 { 1395 struct request_queue *q = bdev_get_queue(dev->bdev); 1396 1397 return q && !test_bit(QUEUE_FLAG_SG_GAPS, &q->queue_flags); 1398 } 1399 1400 static bool dm_table_all_devices_attribute(struct dm_table *t, 1401 iterate_devices_callout_fn func) 1402 { 1403 struct dm_target *ti; 1404 unsigned i = 0; 1405 1406 while (i < dm_table_get_num_targets(t)) { 1407 ti = dm_table_get_target(t, i++); 1408 1409 if (!ti->type->iterate_devices || 1410 !ti->type->iterate_devices(ti, func, NULL)) 1411 return 0; 1412 } 1413 1414 return 1; 1415 } 1416 1417 static int device_not_write_same_capable(struct dm_target *ti, struct dm_dev *dev, 1418 sector_t start, sector_t len, void *data) 1419 { 1420 struct request_queue *q = bdev_get_queue(dev->bdev); 1421 1422 return q && !q->limits.max_write_same_sectors; 1423 } 1424 1425 static bool dm_table_supports_write_same(struct dm_table *t) 1426 { 1427 struct dm_target *ti; 1428 unsigned i = 0; 1429 1430 while (i < dm_table_get_num_targets(t)) { 1431 ti = dm_table_get_target(t, i++); 1432 1433 if (!ti->num_write_same_bios) 1434 return false; 1435 1436 if (!ti->type->iterate_devices || 1437 ti->type->iterate_devices(ti, device_not_write_same_capable, NULL)) 1438 return false; 1439 } 1440 1441 return true; 1442 } 1443 1444 static int device_discard_capable(struct dm_target *ti, struct dm_dev *dev, 1445 sector_t start, sector_t len, void *data) 1446 { 1447 struct request_queue *q = bdev_get_queue(dev->bdev); 1448 1449 return q && blk_queue_discard(q); 1450 } 1451 1452 static bool dm_table_supports_discards(struct dm_table *t) 1453 { 1454 struct dm_target *ti; 1455 unsigned i = 0; 1456 1457 /* 1458 * Unless any target used by the table set discards_supported, 1459 * require at least one underlying device to support discards. 1460 * t->devices includes internal dm devices such as mirror logs 1461 * so we need to use iterate_devices here, which targets 1462 * supporting discard selectively must provide. 1463 */ 1464 while (i < dm_table_get_num_targets(t)) { 1465 ti = dm_table_get_target(t, i++); 1466 1467 if (!ti->num_discard_bios) 1468 continue; 1469 1470 if (ti->discards_supported) 1471 return 1; 1472 1473 if (ti->type->iterate_devices && 1474 ti->type->iterate_devices(ti, device_discard_capable, NULL)) 1475 return 1; 1476 } 1477 1478 return 0; 1479 } 1480 1481 void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, 1482 struct queue_limits *limits) 1483 { 1484 unsigned flush = 0; 1485 1486 /* 1487 * Copy table's limits to the DM device's request_queue 1488 */ 1489 q->limits = *limits; 1490 1491 if (!dm_table_supports_discards(t)) 1492 queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, q); 1493 else 1494 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q); 1495 1496 if (dm_table_supports_flush(t, REQ_FLUSH)) { 1497 flush |= REQ_FLUSH; 1498 if (dm_table_supports_flush(t, REQ_FUA)) 1499 flush |= REQ_FUA; 1500 } 1501 blk_queue_flush(q, flush); 1502 1503 if (!dm_table_discard_zeroes_data(t)) 1504 q->limits.discard_zeroes_data = 0; 1505 1506 /* Ensure that all underlying devices are non-rotational. */ 1507 if (dm_table_all_devices_attribute(t, device_is_nonrot)) 1508 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q); 1509 else 1510 queue_flag_clear_unlocked(QUEUE_FLAG_NONROT, q); 1511 1512 if (!dm_table_supports_write_same(t)) 1513 q->limits.max_write_same_sectors = 0; 1514 1515 if (dm_table_all_devices_attribute(t, queue_supports_sg_merge)) 1516 queue_flag_clear_unlocked(QUEUE_FLAG_NO_SG_MERGE, q); 1517 else 1518 queue_flag_set_unlocked(QUEUE_FLAG_NO_SG_MERGE, q); 1519 1520 if (dm_table_all_devices_attribute(t, queue_supports_sg_gaps)) 1521 queue_flag_clear_unlocked(QUEUE_FLAG_SG_GAPS, q); 1522 else 1523 queue_flag_set_unlocked(QUEUE_FLAG_SG_GAPS, q); 1524 1525 dm_table_set_integrity(t); 1526 1527 /* 1528 * Determine whether or not this queue's I/O timings contribute 1529 * to the entropy pool, Only request-based targets use this. 1530 * Clear QUEUE_FLAG_ADD_RANDOM if any underlying device does not 1531 * have it set. 1532 */ 1533 if (blk_queue_add_random(q) && dm_table_all_devices_attribute(t, device_is_not_random)) 1534 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, q); 1535 1536 /* 1537 * QUEUE_FLAG_STACKABLE must be set after all queue settings are 1538 * visible to other CPUs because, once the flag is set, incoming bios 1539 * are processed by request-based dm, which refers to the queue 1540 * settings. 1541 * Until the flag set, bios are passed to bio-based dm and queued to 1542 * md->deferred where queue settings are not needed yet. 1543 * Those bios are passed to request-based dm at the resume time. 1544 */ 1545 smp_mb(); 1546 if (dm_table_request_based(t)) 1547 queue_flag_set_unlocked(QUEUE_FLAG_STACKABLE, q); 1548 } 1549 1550 unsigned int dm_table_get_num_targets(struct dm_table *t) 1551 { 1552 return t->num_targets; 1553 } 1554 1555 struct list_head *dm_table_get_devices(struct dm_table *t) 1556 { 1557 return &t->devices; 1558 } 1559 1560 fmode_t dm_table_get_mode(struct dm_table *t) 1561 { 1562 return t->mode; 1563 } 1564 EXPORT_SYMBOL(dm_table_get_mode); 1565 1566 enum suspend_mode { 1567 PRESUSPEND, 1568 PRESUSPEND_UNDO, 1569 POSTSUSPEND, 1570 }; 1571 1572 static void suspend_targets(struct dm_table *t, enum suspend_mode mode) 1573 { 1574 int i = t->num_targets; 1575 struct dm_target *ti = t->targets; 1576 1577 while (i--) { 1578 switch (mode) { 1579 case PRESUSPEND: 1580 if (ti->type->presuspend) 1581 ti->type->presuspend(ti); 1582 break; 1583 case PRESUSPEND_UNDO: 1584 if (ti->type->presuspend_undo) 1585 ti->type->presuspend_undo(ti); 1586 break; 1587 case POSTSUSPEND: 1588 if (ti->type->postsuspend) 1589 ti->type->postsuspend(ti); 1590 break; 1591 } 1592 ti++; 1593 } 1594 } 1595 1596 void dm_table_presuspend_targets(struct dm_table *t) 1597 { 1598 if (!t) 1599 return; 1600 1601 suspend_targets(t, PRESUSPEND); 1602 } 1603 1604 void dm_table_presuspend_undo_targets(struct dm_table *t) 1605 { 1606 if (!t) 1607 return; 1608 1609 suspend_targets(t, PRESUSPEND_UNDO); 1610 } 1611 1612 void dm_table_postsuspend_targets(struct dm_table *t) 1613 { 1614 if (!t) 1615 return; 1616 1617 suspend_targets(t, POSTSUSPEND); 1618 } 1619 1620 int dm_table_resume_targets(struct dm_table *t) 1621 { 1622 int i, r = 0; 1623 1624 for (i = 0; i < t->num_targets; i++) { 1625 struct dm_target *ti = t->targets + i; 1626 1627 if (!ti->type->preresume) 1628 continue; 1629 1630 r = ti->type->preresume(ti); 1631 if (r) { 1632 DMERR("%s: %s: preresume failed, error = %d", 1633 dm_device_name(t->md), ti->type->name, r); 1634 return r; 1635 } 1636 } 1637 1638 for (i = 0; i < t->num_targets; i++) { 1639 struct dm_target *ti = t->targets + i; 1640 1641 if (ti->type->resume) 1642 ti->type->resume(ti); 1643 } 1644 1645 return 0; 1646 } 1647 1648 void dm_table_add_target_callbacks(struct dm_table *t, struct dm_target_callbacks *cb) 1649 { 1650 list_add(&cb->list, &t->target_callbacks); 1651 } 1652 EXPORT_SYMBOL_GPL(dm_table_add_target_callbacks); 1653 1654 int dm_table_any_congested(struct dm_table *t, int bdi_bits) 1655 { 1656 struct dm_dev_internal *dd; 1657 struct list_head *devices = dm_table_get_devices(t); 1658 struct dm_target_callbacks *cb; 1659 int r = 0; 1660 1661 list_for_each_entry(dd, devices, list) { 1662 struct request_queue *q = bdev_get_queue(dd->dm_dev->bdev); 1663 char b[BDEVNAME_SIZE]; 1664 1665 if (likely(q)) 1666 r |= bdi_congested(&q->backing_dev_info, bdi_bits); 1667 else 1668 DMWARN_LIMIT("%s: any_congested: nonexistent device %s", 1669 dm_device_name(t->md), 1670 bdevname(dd->dm_dev->bdev, b)); 1671 } 1672 1673 list_for_each_entry(cb, &t->target_callbacks, list) 1674 if (cb->congested_fn) 1675 r |= cb->congested_fn(cb, bdi_bits); 1676 1677 return r; 1678 } 1679 1680 int dm_table_any_busy_target(struct dm_table *t) 1681 { 1682 unsigned i; 1683 struct dm_target *ti; 1684 1685 for (i = 0; i < t->num_targets; i++) { 1686 ti = t->targets + i; 1687 if (ti->type->busy && ti->type->busy(ti)) 1688 return 1; 1689 } 1690 1691 return 0; 1692 } 1693 1694 struct mapped_device *dm_table_get_md(struct dm_table *t) 1695 { 1696 return t->md; 1697 } 1698 EXPORT_SYMBOL(dm_table_get_md); 1699 1700 void dm_table_run_md_queue_async(struct dm_table *t) 1701 { 1702 struct mapped_device *md; 1703 struct request_queue *queue; 1704 unsigned long flags; 1705 1706 if (!dm_table_request_based(t)) 1707 return; 1708 1709 md = dm_table_get_md(t); 1710 queue = dm_get_md_queue(md); 1711 if (queue) { 1712 spin_lock_irqsave(queue->queue_lock, flags); 1713 blk_run_queue_async(queue); 1714 spin_unlock_irqrestore(queue->queue_lock, flags); 1715 } 1716 } 1717 EXPORT_SYMBOL(dm_table_run_md_queue_async); 1718 1719