diff options
| -rw-r--r-- | drivers/md/dm-bio-list.h | 117 | ||||
| -rw-r--r-- | drivers/md/dm-delay.c | 2 | ||||
| -rw-r--r-- | drivers/md/dm-mpath.c | 1 | ||||
| -rw-r--r-- | drivers/md/dm-raid1.c | 1 | ||||
| -rw-r--r-- | drivers/md/dm-region-hash.c | 1 | ||||
| -rw-r--r-- | drivers/md/dm-snap.c | 1 | ||||
| -rw-r--r-- | drivers/md/dm.c | 1 | ||||
| -rw-r--r-- | drivers/md/raid1.c | 1 | ||||
| -rw-r--r-- | drivers/md/raid10.c | 1 | ||||
| -rw-r--r-- | include/linux/bio.h | 109 |
10 files changed, 109 insertions, 126 deletions
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h deleted file mode 100644 index 345098b4ca77..000000000000 --- a/drivers/md/dm-bio-list.h +++ /dev/null | |||
| @@ -1,117 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004 Red Hat UK Ltd. | ||
| 3 | * | ||
| 4 | * This file is released under the GPL. | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef DM_BIO_LIST_H | ||
| 8 | #define DM_BIO_LIST_H | ||
| 9 | |||
| 10 | #include <linux/bio.h> | ||
| 11 | |||
| 12 | #ifdef CONFIG_BLOCK | ||
| 13 | |||
| 14 | struct bio_list { | ||
| 15 | struct bio *head; | ||
| 16 | struct bio *tail; | ||
| 17 | }; | ||
| 18 | |||
| 19 | static inline int bio_list_empty(const struct bio_list *bl) | ||
| 20 | { | ||
| 21 | return bl->head == NULL; | ||
| 22 | } | ||
| 23 | |||
| 24 | static inline void bio_list_init(struct bio_list *bl) | ||
| 25 | { | ||
| 26 | bl->head = bl->tail = NULL; | ||
| 27 | } | ||
| 28 | |||
| 29 | #define bio_list_for_each(bio, bl) \ | ||
| 30 | for (bio = (bl)->head; bio; bio = bio->bi_next) | ||
| 31 | |||
| 32 | static inline unsigned bio_list_size(const struct bio_list *bl) | ||
| 33 | { | ||
| 34 | unsigned sz = 0; | ||
| 35 | struct bio *bio; | ||
| 36 | |||
| 37 | bio_list_for_each(bio, bl) | ||
| 38 | sz++; | ||
| 39 | |||
| 40 | return sz; | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void bio_list_add(struct bio_list *bl, struct bio *bio) | ||
| 44 | { | ||
| 45 | bio->bi_next = NULL; | ||
| 46 | |||
| 47 | if (bl->tail) | ||
| 48 | bl->tail->bi_next = bio; | ||
| 49 | else | ||
| 50 | bl->head = bio; | ||
| 51 | |||
| 52 | bl->tail = bio; | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio) | ||
| 56 | { | ||
| 57 | bio->bi_next = bl->head; | ||
| 58 | |||
| 59 | bl->head = bio; | ||
| 60 | |||
| 61 | if (!bl->tail) | ||
| 62 | bl->tail = bio; | ||
| 63 | } | ||
| 64 | |||
| 65 | static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2) | ||
| 66 | { | ||
| 67 | if (!bl2->head) | ||
| 68 | return; | ||
| 69 | |||
| 70 | if (bl->tail) | ||
| 71 | bl->tail->bi_next = bl2->head; | ||
| 72 | else | ||
| 73 | bl->head = bl2->head; | ||
| 74 | |||
| 75 | bl->tail = bl2->tail; | ||
| 76 | } | ||
| 77 | |||
| 78 | static inline void bio_list_merge_head(struct bio_list *bl, | ||
| 79 | struct bio_list *bl2) | ||
| 80 | { | ||
| 81 | if (!bl2->head) | ||
| 82 | return; | ||
| 83 | |||
| 84 | if (bl->head) | ||
| 85 | bl2->tail->bi_next = bl->head; | ||
| 86 | else | ||
| 87 | bl->tail = bl2->tail; | ||
| 88 | |||
| 89 | bl->head = bl2->head; | ||
| 90 | } | ||
| 91 | |||
| 92 | static inline struct bio *bio_list_pop(struct bio_list *bl) | ||
| 93 | { | ||
| 94 | struct bio *bio = bl->head; | ||
| 95 | |||
| 96 | if (bio) { | ||
| 97 | bl->head = bl->head->bi_next; | ||
| 98 | if (!bl->head) | ||
| 99 | bl->tail = NULL; | ||
| 100 | |||
| 101 | bio->bi_next = NULL; | ||
| 102 | } | ||
| 103 | |||
| 104 | return bio; | ||
| 105 | } | ||
| 106 | |||
| 107 | static inline struct bio *bio_list_get(struct bio_list *bl) | ||
| 108 | { | ||
| 109 | struct bio *bio = bl->head; | ||
| 110 | |||
| 111 | bl->head = bl->tail = NULL; | ||
| 112 | |||
| 113 | return bio; | ||
| 114 | } | ||
| 115 | |||
| 116 | #endif /* CONFIG_BLOCK */ | ||
| 117 | #endif | ||
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c index 59ee1b015d2d..559dbb52bc85 100644 --- a/drivers/md/dm-delay.c +++ b/drivers/md/dm-delay.c | |||
| @@ -15,8 +15,6 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/device-mapper.h> | 16 | #include <linux/device-mapper.h> |
| 17 | 17 | ||
| 18 | #include "dm-bio-list.h" | ||
| 19 | |||
| 20 | #define DM_MSG_PREFIX "delay" | 18 | #define DM_MSG_PREFIX "delay" |
| 21 | 19 | ||
| 22 | struct delay_c { | 20 | struct delay_c { |
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 095f77bf9681..6a386ab4f7eb 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
| @@ -8,7 +8,6 @@ | |||
| 8 | #include <linux/device-mapper.h> | 8 | #include <linux/device-mapper.h> |
| 9 | 9 | ||
| 10 | #include "dm-path-selector.h" | 10 | #include "dm-path-selector.h" |
| 11 | #include "dm-bio-list.h" | ||
| 12 | #include "dm-bio-record.h" | 11 | #include "dm-bio-record.h" |
| 13 | #include "dm-uevent.h" | 12 | #include "dm-uevent.h" |
| 14 | 13 | ||
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index 536ef0bef154..076fbb4e967a 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | * This file is released under the GPL. | 5 | * This file is released under the GPL. |
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | #include "dm-bio-list.h" | ||
| 9 | #include "dm-bio-record.h" | 8 | #include "dm-bio-record.h" |
| 10 | 9 | ||
| 11 | #include <linux/init.h> | 10 | #include <linux/init.h> |
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c index 59f8d9df9e1a..7b899be0b087 100644 --- a/drivers/md/dm-region-hash.c +++ b/drivers/md/dm-region-hash.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | #include <linux/vmalloc.h> | 14 | #include <linux/vmalloc.h> |
| 15 | 15 | ||
| 16 | #include "dm.h" | 16 | #include "dm.h" |
| 17 | #include "dm-bio-list.h" | ||
| 18 | 17 | ||
| 19 | #define DM_MSG_PREFIX "region hash" | 18 | #define DM_MSG_PREFIX "region hash" |
| 20 | 19 | ||
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 981a0413068f..d73f17fc7778 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/workqueue.h> | 22 | #include <linux/workqueue.h> |
| 23 | 23 | ||
| 24 | #include "dm-exception-store.h" | 24 | #include "dm-exception-store.h" |
| 25 | #include "dm-bio-list.h" | ||
| 26 | 25 | ||
| 27 | #define DM_MSG_PREFIX "snapshots" | 26 | #define DM_MSG_PREFIX "snapshots" |
| 28 | 27 | ||
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 8a994be035ba..424f7b048c30 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | #include "dm.h" | 8 | #include "dm.h" |
| 9 | #include "dm-bio-list.h" | ||
| 10 | #include "dm-uevent.h" | 9 | #include "dm-uevent.h" |
| 11 | 10 | ||
| 12 | #include <linux/init.h> | 11 | #include <linux/init.h> |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 274b491a11c1..36df9109cde1 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | #include <linux/blkdev.h> | 35 | #include <linux/blkdev.h> |
| 36 | #include <linux/seq_file.h> | 36 | #include <linux/seq_file.h> |
| 37 | #include "md.h" | 37 | #include "md.h" |
| 38 | #include "dm-bio-list.h" | ||
| 39 | #include "raid1.h" | 38 | #include "raid1.h" |
| 40 | #include "bitmap.h" | 39 | #include "bitmap.h" |
| 41 | 40 | ||
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e293d92641ac..81a54f17417e 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/blkdev.h> | 22 | #include <linux/blkdev.h> |
| 23 | #include <linux/seq_file.h> | 23 | #include <linux/seq_file.h> |
| 24 | #include "md.h" | 24 | #include "md.h" |
| 25 | #include "dm-bio-list.h" | ||
| 26 | #include "raid10.h" | 25 | #include "raid10.h" |
| 27 | #include "bitmap.h" | 26 | #include "bitmap.h" |
| 28 | 27 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index b900d2c67d29..b89cf2d82898 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -504,6 +504,115 @@ static inline int bio_has_data(struct bio *bio) | |||
| 504 | return bio && bio->bi_io_vec != NULL; | 504 | return bio && bio->bi_io_vec != NULL; |
| 505 | } | 505 | } |
| 506 | 506 | ||
| 507 | /* | ||
| 508 | * BIO list managment for use by remapping drivers (e.g. DM or MD). | ||
| 509 | * | ||
| 510 | * A bio_list anchors a singly-linked list of bios chained through the bi_next | ||
| 511 | * member of the bio. The bio_list also caches the last list member to allow | ||
| 512 | * fast access to the tail. | ||
| 513 | */ | ||
| 514 | struct bio_list { | ||
| 515 | struct bio *head; | ||
| 516 | struct bio *tail; | ||
| 517 | }; | ||
| 518 | |||
| 519 | static inline int bio_list_empty(const struct bio_list *bl) | ||
| 520 | { | ||
| 521 | return bl->head == NULL; | ||
| 522 | } | ||
| 523 | |||
| 524 | static inline void bio_list_init(struct bio_list *bl) | ||
| 525 | { | ||
| 526 | bl->head = bl->tail = NULL; | ||
| 527 | } | ||
| 528 | |||
| 529 | #define bio_list_for_each(bio, bl) \ | ||
| 530 | for (bio = (bl)->head; bio; bio = bio->bi_next) | ||
| 531 | |||
| 532 | static inline unsigned bio_list_size(const struct bio_list *bl) | ||
| 533 | { | ||
| 534 | unsigned sz = 0; | ||
| 535 | struct bio *bio; | ||
| 536 | |||
| 537 | bio_list_for_each(bio, bl) | ||
| 538 | sz++; | ||
| 539 | |||
| 540 | return sz; | ||
| 541 | } | ||
| 542 | |||
| 543 | static inline void bio_list_add(struct bio_list *bl, struct bio *bio) | ||
| 544 | { | ||
| 545 | bio->bi_next = NULL; | ||
| 546 | |||
| 547 | if (bl->tail) | ||
| 548 | bl->tail->bi_next = bio; | ||
| 549 | else | ||
| 550 | bl->head = bio; | ||
| 551 | |||
| 552 | bl->tail = bio; | ||
| 553 | } | ||
| 554 | |||
| 555 | static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio) | ||
| 556 | { | ||
| 557 | bio->bi_next = bl->head; | ||
| 558 | |||
| 559 | bl->head = bio; | ||
| 560 | |||
| 561 | if (!bl->tail) | ||
| 562 | bl->tail = bio; | ||
| 563 | } | ||
| 564 | |||
| 565 | static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2) | ||
| 566 | { | ||
| 567 | if (!bl2->head) | ||
| 568 | return; | ||
| 569 | |||
| 570 | if (bl->tail) | ||
| 571 | bl->tail->bi_next = bl2->head; | ||
| 572 | else | ||
| 573 | bl->head = bl2->head; | ||
| 574 | |||
| 575 | bl->tail = bl2->tail; | ||
| 576 | } | ||
| 577 | |||
| 578 | static inline void bio_list_merge_head(struct bio_list *bl, | ||
| 579 | struct bio_list *bl2) | ||
| 580 | { | ||
| 581 | if (!bl2->head) | ||
| 582 | return; | ||
| 583 | |||
| 584 | if (bl->head) | ||
| 585 | bl2->tail->bi_next = bl->head; | ||
| 586 | else | ||
| 587 | bl->tail = bl2->tail; | ||
| 588 | |||
| 589 | bl->head = bl2->head; | ||
| 590 | } | ||
| 591 | |||
| 592 | static inline struct bio *bio_list_pop(struct bio_list *bl) | ||
| 593 | { | ||
| 594 | struct bio *bio = bl->head; | ||
| 595 | |||
| 596 | if (bio) { | ||
| 597 | bl->head = bl->head->bi_next; | ||
| 598 | if (!bl->head) | ||
| 599 | bl->tail = NULL; | ||
| 600 | |||
| 601 | bio->bi_next = NULL; | ||
| 602 | } | ||
| 603 | |||
| 604 | return bio; | ||
| 605 | } | ||
| 606 | |||
| 607 | static inline struct bio *bio_list_get(struct bio_list *bl) | ||
| 608 | { | ||
| 609 | struct bio *bio = bl->head; | ||
| 610 | |||
| 611 | bl->head = bl->tail = NULL; | ||
| 612 | |||
| 613 | return bio; | ||
| 614 | } | ||
| 615 | |||
| 507 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | 616 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
| 508 | 617 | ||
| 509 | #define bip_vec_idx(bip, idx) (&(bip->bip_vec[(idx)])) | 618 | #define bip_vec_idx(bip, idx) (&(bip->bip_vec[(idx)])) |
