|
@@ -196,13 +196,12 @@ static void ps3disk_do_request(struct ps3_storage_device *dev,
|
|
|
dev_dbg(&dev->sbd.core, "%s:%u\n", __func__, __LINE__);
|
|
|
|
|
|
while ((req = blk_fetch_request(q))) {
|
|
|
- if (req->cmd_type == REQ_TYPE_FS) {
|
|
|
- if (ps3disk_submit_request_sg(dev, req))
|
|
|
- break;
|
|
|
- } else if (req->cmd_type == REQ_TYPE_LINUX_BLOCK &&
|
|
|
- req->cmd[0] == REQ_LB_OP_FLUSH) {
|
|
|
+ if (req->cmd_flags & REQ_FLUSH) {
|
|
|
if (ps3disk_submit_flush_request(dev, req))
|
|
|
break;
|
|
|
+ } else if (req->cmd_type == REQ_TYPE_FS) {
|
|
|
+ if (ps3disk_submit_request_sg(dev, req))
|
|
|
+ break;
|
|
|
} else {
|
|
|
blk_dump_rq_flags(req, DEVICE_NAME " bad request");
|
|
|
__blk_end_request_all(req, -EIO);
|
|
@@ -257,8 +256,7 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
- if (req->cmd_type == REQ_TYPE_LINUX_BLOCK &&
|
|
|
- req->cmd[0] == REQ_LB_OP_FLUSH) {
|
|
|
+ if (req->cmd_flags & REQ_FLUSH) {
|
|
|
read = 0;
|
|
|
op = "flush";
|
|
|
} else {
|
|
@@ -398,16 +396,6 @@ static int ps3disk_identify(struct ps3_storage_device *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void ps3disk_prepare_flush(struct request_queue *q, struct request *req)
|
|
|
-{
|
|
|
- struct ps3_storage_device *dev = q->queuedata;
|
|
|
-
|
|
|
- dev_dbg(&dev->sbd.core, "%s:%u\n", __func__, __LINE__);
|
|
|
-
|
|
|
- req->cmd_type = REQ_TYPE_LINUX_BLOCK;
|
|
|
- req->cmd[0] = REQ_LB_OP_FLUSH;
|
|
|
-}
|
|
|
-
|
|
|
static unsigned long ps3disk_mask;
|
|
|
|
|
|
static DEFINE_MUTEX(ps3disk_mask_mutex);
|
|
@@ -480,8 +468,7 @@ static int __devinit ps3disk_probe(struct ps3_system_bus_device *_dev)
|
|
|
blk_queue_dma_alignment(queue, dev->blk_size-1);
|
|
|
blk_queue_logical_block_size(queue, dev->blk_size);
|
|
|
|
|
|
- blk_queue_ordered(queue, QUEUE_ORDERED_DRAIN_FLUSH,
|
|
|
- ps3disk_prepare_flush);
|
|
|
+ blk_queue_ordered(queue, QUEUE_ORDERED_DRAIN_FLUSH, NULL);
|
|
|
|
|
|
blk_queue_max_segments(queue, -1);
|
|
|
blk_queue_max_segment_size(queue, dev->bounce_size);
|