diff options
Diffstat (limited to 'drivers/block/ps3disk.c')
-rw-r--r-- | drivers/block/ps3disk.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c index bccc42bb9212..aaeeb544228a 100644 --- a/drivers/block/ps3disk.c +++ b/drivers/block/ps3disk.c | |||
@@ -134,13 +134,12 @@ static int ps3disk_submit_request_sg(struct ps3_storage_device *dev, | |||
134 | rq_for_each_segment(bv, req, iter) | 134 | rq_for_each_segment(bv, req, iter) |
135 | n++; | 135 | n++; |
136 | dev_dbg(&dev->sbd.core, | 136 | dev_dbg(&dev->sbd.core, |
137 | "%s:%u: %s req has %u bvecs for %lu sectors %lu hard sectors\n", | 137 | "%s:%u: %s req has %u bvecs for %u sectors\n", |
138 | __func__, __LINE__, op, n, req->nr_sectors, | 138 | __func__, __LINE__, op, n, blk_rq_sectors(req)); |
139 | req->hard_nr_sectors); | ||
140 | #endif | 139 | #endif |
141 | 140 | ||
142 | start_sector = req->sector * priv->blocking_factor; | 141 | start_sector = blk_rq_pos(req) * priv->blocking_factor; |
143 | sectors = req->nr_sectors * priv->blocking_factor; | 142 | sectors = blk_rq_sectors(req) * priv->blocking_factor; |
144 | dev_dbg(&dev->sbd.core, "%s:%u: %s %llu sectors starting at %llu\n", | 143 | dev_dbg(&dev->sbd.core, "%s:%u: %s %llu sectors starting at %llu\n", |
145 | __func__, __LINE__, op, sectors, start_sector); | 144 | __func__, __LINE__, op, sectors, start_sector); |
146 | 145 | ||
@@ -158,7 +157,7 @@ static int ps3disk_submit_request_sg(struct ps3_storage_device *dev, | |||
158 | if (res) { | 157 | if (res) { |
159 | dev_err(&dev->sbd.core, "%s:%u: %s failed %d\n", __func__, | 158 | dev_err(&dev->sbd.core, "%s:%u: %s failed %d\n", __func__, |
160 | __LINE__, op, res); | 159 | __LINE__, op, res); |
161 | end_request(req, 0); | 160 | __blk_end_request_all(req, -EIO); |
162 | return 0; | 161 | return 0; |
163 | } | 162 | } |
164 | 163 | ||
@@ -180,7 +179,7 @@ static int ps3disk_submit_flush_request(struct ps3_storage_device *dev, | |||
180 | if (res) { | 179 | if (res) { |
181 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%llx\n", | 180 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%llx\n", |
182 | __func__, __LINE__, res); | 181 | __func__, __LINE__, res); |
183 | end_request(req, 0); | 182 | __blk_end_request_all(req, -EIO); |
184 | return 0; | 183 | return 0; |
185 | } | 184 | } |
186 | 185 | ||
@@ -195,7 +194,7 @@ static void ps3disk_do_request(struct ps3_storage_device *dev, | |||
195 | 194 | ||
196 | dev_dbg(&dev->sbd.core, "%s:%u\n", __func__, __LINE__); | 195 | dev_dbg(&dev->sbd.core, "%s:%u\n", __func__, __LINE__); |
197 | 196 | ||
198 | while ((req = elv_next_request(q))) { | 197 | while ((req = blk_fetch_request(q))) { |
199 | if (blk_fs_request(req)) { | 198 | if (blk_fs_request(req)) { |
200 | if (ps3disk_submit_request_sg(dev, req)) | 199 | if (ps3disk_submit_request_sg(dev, req)) |
201 | break; | 200 | break; |
@@ -205,7 +204,7 @@ static void ps3disk_do_request(struct ps3_storage_device *dev, | |||
205 | break; | 204 | break; |
206 | } else { | 205 | } else { |
207 | blk_dump_rq_flags(req, DEVICE_NAME " bad request"); | 206 | blk_dump_rq_flags(req, DEVICE_NAME " bad request"); |
208 | end_request(req, 0); | 207 | __blk_end_request_all(req, -EIO); |
209 | continue; | 208 | continue; |
210 | } | 209 | } |
211 | } | 210 | } |
@@ -231,7 +230,6 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data) | |||
231 | struct request *req; | 230 | struct request *req; |
232 | int res, read, error; | 231 | int res, read, error; |
233 | u64 tag, status; | 232 | u64 tag, status; |
234 | unsigned long num_sectors; | ||
235 | const char *op; | 233 | const char *op; |
236 | 234 | ||
237 | res = lv1_storage_get_async_status(dev->sbd.dev_id, &tag, &status); | 235 | res = lv1_storage_get_async_status(dev->sbd.dev_id, &tag, &status); |
@@ -261,11 +259,9 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data) | |||
261 | if (req->cmd_type == REQ_TYPE_LINUX_BLOCK && | 259 | if (req->cmd_type == REQ_TYPE_LINUX_BLOCK && |
262 | req->cmd[0] == REQ_LB_OP_FLUSH) { | 260 | req->cmd[0] == REQ_LB_OP_FLUSH) { |
263 | read = 0; | 261 | read = 0; |
264 | num_sectors = req->hard_cur_sectors; | ||
265 | op = "flush"; | 262 | op = "flush"; |
266 | } else { | 263 | } else { |
267 | read = !rq_data_dir(req); | 264 | read = !rq_data_dir(req); |
268 | num_sectors = req->nr_sectors; | ||
269 | op = read ? "read" : "write"; | 265 | op = read ? "read" : "write"; |
270 | } | 266 | } |
271 | if (status) { | 267 | if (status) { |
@@ -281,7 +277,7 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data) | |||
281 | } | 277 | } |
282 | 278 | ||
283 | spin_lock(&priv->lock); | 279 | spin_lock(&priv->lock); |
284 | __blk_end_request(req, error, num_sectors << 9); | 280 | __blk_end_request_all(req, error); |
285 | priv->req = NULL; | 281 | priv->req = NULL; |
286 | ps3disk_do_request(dev, priv->queue); | 282 | ps3disk_do_request(dev, priv->queue); |
287 | spin_unlock(&priv->lock); | 283 | spin_unlock(&priv->lock); |
@@ -481,7 +477,7 @@ static int __devinit ps3disk_probe(struct ps3_system_bus_device *_dev) | |||
481 | blk_queue_max_sectors(queue, dev->bounce_size >> 9); | 477 | blk_queue_max_sectors(queue, dev->bounce_size >> 9); |
482 | blk_queue_segment_boundary(queue, -1UL); | 478 | blk_queue_segment_boundary(queue, -1UL); |
483 | blk_queue_dma_alignment(queue, dev->blk_size-1); | 479 | blk_queue_dma_alignment(queue, dev->blk_size-1); |
484 | blk_queue_hardsect_size(queue, dev->blk_size); | 480 | blk_queue_logical_block_size(queue, dev->blk_size); |
485 | 481 | ||
486 | blk_queue_ordered(queue, QUEUE_ORDERED_DRAIN_FLUSH, | 482 | blk_queue_ordered(queue, QUEUE_ORDERED_DRAIN_FLUSH, |
487 | ps3disk_prepare_flush); | 483 | ps3disk_prepare_flush); |