diff options
| author | Roger Pau Monne <roger.pau@citrix.com> | 2014-02-04 05:26:15 -0500 |
|---|---|---|
| committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2014-02-07 13:03:53 -0500 |
| commit | 80bfa2f6e2e81049fc6cd3bfaeedcb64db3a9ba6 (patch) | |
| tree | 8f0ac299cbc57192b2cf23de645799fc1b879b4c | |
| parent | c05f3e3c85df1d89673e00cee7ece5ae4eb4c6ec (diff) | |
xen-blkif: drop struct blkif_request_segment_aligned
This was wrongly introduced in commit 402b27f9, the only difference
between blkif_request_segment_aligned and blkif_request_segment is
that the former has a named padding, while both share the same
memory layout.
Also correct a few minor glitches in the description, including for it
to no longer assume PAGE_SIZE == 4096.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
[Description fix by Jan Beulich]
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reported-by: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Tested-by: Matt Rushton <mrushton@amazon.com>
Cc: Matt Wilson <msw@amazon.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
| -rw-r--r-- | drivers/block/xen-blkback/blkback.c | 2 | ||||
| -rw-r--r-- | drivers/block/xen-blkback/common.h | 2 | ||||
| -rw-r--r-- | drivers/block/xen-blkfront.c | 6 | ||||
| -rw-r--r-- | include/xen/interface/io/blkif.h | 34 |
4 files changed, 19 insertions, 25 deletions
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index 394fa2eabf87..e612627ae981 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c | |||
| @@ -847,7 +847,7 @@ static int xen_blkbk_parse_indirect(struct blkif_request *req, | |||
| 847 | struct grant_page **pages = pending_req->indirect_pages; | 847 | struct grant_page **pages = pending_req->indirect_pages; |
| 848 | struct xen_blkif *blkif = pending_req->blkif; | 848 | struct xen_blkif *blkif = pending_req->blkif; |
| 849 | int indirect_grefs, rc, n, nseg, i; | 849 | int indirect_grefs, rc, n, nseg, i; |
| 850 | struct blkif_request_segment_aligned *segments = NULL; | 850 | struct blkif_request_segment *segments = NULL; |
| 851 | 851 | ||
| 852 | nseg = pending_req->nr_pages; | 852 | nseg = pending_req->nr_pages; |
| 853 | indirect_grefs = INDIRECT_PAGES(nseg); | 853 | indirect_grefs = INDIRECT_PAGES(nseg); |
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h index e40326a7f707..9eb34e24b4fe 100644 --- a/drivers/block/xen-blkback/common.h +++ b/drivers/block/xen-blkback/common.h | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | #define MAX_INDIRECT_SEGMENTS 256 | 57 | #define MAX_INDIRECT_SEGMENTS 256 |
| 58 | 58 | ||
| 59 | #define SEGS_PER_INDIRECT_FRAME \ | 59 | #define SEGS_PER_INDIRECT_FRAME \ |
| 60 | (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned)) | 60 | (PAGE_SIZE/sizeof(struct blkif_request_segment)) |
| 61 | #define MAX_INDIRECT_PAGES \ | 61 | #define MAX_INDIRECT_PAGES \ |
| 62 | ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) | 62 | ((MAX_INDIRECT_SEGMENTS + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) |
| 63 | #define INDIRECT_PAGES(_segs) \ | 63 | #define INDIRECT_PAGES(_segs) \ |
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index c4a4c9006288..7d09dfc9735c 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c | |||
| @@ -162,7 +162,7 @@ static DEFINE_SPINLOCK(minor_lock); | |||
| 162 | #define DEV_NAME "xvd" /* name in /dev */ | 162 | #define DEV_NAME "xvd" /* name in /dev */ |
| 163 | 163 | ||
| 164 | #define SEGS_PER_INDIRECT_FRAME \ | 164 | #define SEGS_PER_INDIRECT_FRAME \ |
| 165 | (PAGE_SIZE/sizeof(struct blkif_request_segment_aligned)) | 165 | (PAGE_SIZE/sizeof(struct blkif_request_segment)) |
| 166 | #define INDIRECT_GREFS(_segs) \ | 166 | #define INDIRECT_GREFS(_segs) \ |
| 167 | ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) | 167 | ((_segs + SEGS_PER_INDIRECT_FRAME - 1)/SEGS_PER_INDIRECT_FRAME) |
| 168 | 168 | ||
| @@ -393,7 +393,7 @@ static int blkif_queue_request(struct request *req) | |||
| 393 | unsigned long id; | 393 | unsigned long id; |
| 394 | unsigned int fsect, lsect; | 394 | unsigned int fsect, lsect; |
| 395 | int i, ref, n; | 395 | int i, ref, n; |
| 396 | struct blkif_request_segment_aligned *segments = NULL; | 396 | struct blkif_request_segment *segments = NULL; |
| 397 | 397 | ||
| 398 | /* | 398 | /* |
| 399 | * Used to store if we are able to queue the request by just using | 399 | * Used to store if we are able to queue the request by just using |
| @@ -550,7 +550,7 @@ static int blkif_queue_request(struct request *req) | |||
| 550 | } else { | 550 | } else { |
| 551 | n = i % SEGS_PER_INDIRECT_FRAME; | 551 | n = i % SEGS_PER_INDIRECT_FRAME; |
| 552 | segments[n] = | 552 | segments[n] = |
| 553 | (struct blkif_request_segment_aligned) { | 553 | (struct blkif_request_segment) { |
| 554 | .gref = ref, | 554 | .gref = ref, |
| 555 | .first_sect = fsect, | 555 | .first_sect = fsect, |
| 556 | .last_sect = lsect }; | 556 | .last_sect = lsect }; |
diff --git a/include/xen/interface/io/blkif.h b/include/xen/interface/io/blkif.h index ae665ac59c36..32ec05a6572f 100644 --- a/include/xen/interface/io/blkif.h +++ b/include/xen/interface/io/blkif.h | |||
| @@ -113,13 +113,13 @@ typedef uint64_t blkif_sector_t; | |||
| 113 | * it's less than the number provided by the backend. The indirect_grefs field | 113 | * it's less than the number provided by the backend. The indirect_grefs field |
| 114 | * in blkif_request_indirect should be filled by the frontend with the | 114 | * in blkif_request_indirect should be filled by the frontend with the |
| 115 | * grant references of the pages that are holding the indirect segments. | 115 | * grant references of the pages that are holding the indirect segments. |
| 116 | * This pages are filled with an array of blkif_request_segment_aligned | 116 | * These pages are filled with an array of blkif_request_segment that hold the |
| 117 | * that hold the information about the segments. The number of indirect | 117 | * information about the segments. The number of indirect pages to use is |
| 118 | * pages to use is determined by the maximum number of segments | 118 | * determined by the number of segments an indirect request contains. Every |
| 119 | * a indirect request contains. Every indirect page can contain a maximum | 119 | * indirect page can contain a maximum of |
| 120 | * of 512 segments (PAGE_SIZE/sizeof(blkif_request_segment_aligned)), | 120 | * (PAGE_SIZE / sizeof(struct blkif_request_segment)) segments, so to |
| 121 | * so to calculate the number of indirect pages to use we have to do | 121 | * calculate the number of indirect pages to use we have to do |
| 122 | * ceil(indirect_segments/512). | 122 | * ceil(indirect_segments / (PAGE_SIZE / sizeof(struct blkif_request_segment))). |
| 123 | * | 123 | * |
| 124 | * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not* | 124 | * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not* |
| 125 | * create the "feature-max-indirect-segments" node! | 125 | * create the "feature-max-indirect-segments" node! |
| @@ -135,13 +135,12 @@ typedef uint64_t blkif_sector_t; | |||
| 135 | 135 | ||
| 136 | #define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 | 136 | #define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 |
| 137 | 137 | ||
| 138 | struct blkif_request_segment_aligned { | 138 | struct blkif_request_segment { |
| 139 | grant_ref_t gref; /* reference to I/O buffer frame */ | 139 | grant_ref_t gref; /* reference to I/O buffer frame */ |
| 140 | /* @first_sect: first sector in frame to transfer (inclusive). */ | 140 | /* @first_sect: first sector in frame to transfer (inclusive). */ |
| 141 | /* @last_sect: last sector in frame to transfer (inclusive). */ | 141 | /* @last_sect: last sector in frame to transfer (inclusive). */ |
| 142 | uint8_t first_sect, last_sect; | 142 | uint8_t first_sect, last_sect; |
| 143 | uint16_t _pad; /* padding to make it 8 bytes, so it's cache-aligned */ | 143 | }; |
| 144 | } __attribute__((__packed__)); | ||
| 145 | 144 | ||
| 146 | struct blkif_request_rw { | 145 | struct blkif_request_rw { |
| 147 | uint8_t nr_segments; /* number of segments */ | 146 | uint8_t nr_segments; /* number of segments */ |
| @@ -151,12 +150,7 @@ struct blkif_request_rw { | |||
| 151 | #endif | 150 | #endif |
| 152 | uint64_t id; /* private guest value, echoed in resp */ | 151 | uint64_t id; /* private guest value, echoed in resp */ |
| 153 | blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ | 152 | blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ |
| 154 | struct blkif_request_segment { | 153 | struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; |
| 155 | grant_ref_t gref; /* reference to I/O buffer frame */ | ||
| 156 | /* @first_sect: first sector in frame to transfer (inclusive). */ | ||
| 157 | /* @last_sect: last sector in frame to transfer (inclusive). */ | ||
| 158 | uint8_t first_sect, last_sect; | ||
| 159 | } seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; | ||
| 160 | } __attribute__((__packed__)); | 154 | } __attribute__((__packed__)); |
| 161 | 155 | ||
| 162 | struct blkif_request_discard { | 156 | struct blkif_request_discard { |
