git.samba.org
/
sfrench
/
cifs-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[sfrench/cifs-2.6.git]
/
drivers
/
block
/
viodasd.c
diff --git
a/drivers/block/viodasd.c
b/drivers/block/viodasd.c
index e824b672e05a23c75473d6d2a04b4462eb709bec..41ca721d2523fec5987e02db1e9e7a26f35f60bb 100644
(file)
--- a/
drivers/block/viodasd.c
+++ b/
drivers/block/viodasd.c
@@
-41,6
+41,7
@@
#include <linux/dma-mapping.h>
#include <linux/completion.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/completion.h>
#include <linux/device.h>
+#include <linux/scatterlist.h>
#include <asm/uaccess.h>
#include <asm/vio.h>
#include <asm/uaccess.h>
#include <asm/vio.h>
@@
-228,13
+229,10
@@
static struct block_device_operations viodasd_fops = {
/*
* End a request
*/
/*
* End a request
*/
-static void viodasd_end_request(struct request *req, int
uptodate
,
+static void viodasd_end_request(struct request *req, int
error
,
int num_sectors)
{
int num_sectors)
{
- if (end_that_request_first(req, uptodate, num_sectors))
- return;
- add_disk_randomness(req->rq_disk);
- end_that_request_last(req, uptodate);
+ __blk_end_request(req, error, num_sectors << 9);
}
/*
}
/*
@@
-270,6
+268,7
@@
static int send_request(struct request *req)
d = req->rq_disk->private_data;
/* Now build the scatter-gather list */
d = req->rq_disk->private_data;
/* Now build the scatter-gather list */
+ sg_init_table(sg, VIOMAXBLOCKDMA);
nsg = blk_rq_map_sg(req->q, req, sg);
nsg = dma_map_sg(d->dev, sg, nsg, direction);
nsg = blk_rq_map_sg(req->q, req, sg);
nsg = dma_map_sg(d->dev, sg, nsg, direction);
@@
-372,12
+371,12
@@
static void do_viodasd_request(struct request_queue *q)
blkdev_dequeue_request(req);
/* check that request contains a valid command */
if (!blk_fs_request(req)) {
blkdev_dequeue_request(req);
/* check that request contains a valid command */
if (!blk_fs_request(req)) {
- viodasd_end_request(req,
0
, req->hard_nr_sectors);
+ viodasd_end_request(req,
-EIO
, req->hard_nr_sectors);
continue;
}
/* Try sending the request */
if (send_request(req) != 0)
continue;
}
/* Try sending the request */
if (send_request(req) != 0)
- viodasd_end_request(req,
0
, req->hard_nr_sectors);
+ viodasd_end_request(req,
-EIO
, req->hard_nr_sectors);
}
}
}
}
@@
-529,8
+528,7
@@
static int block_event_to_scatterlist(const struct vioblocklpevent *bevent,
numsg = VIOMAXBLOCKDMA;
*total_len = 0;
numsg = VIOMAXBLOCKDMA;
*total_len = 0;
- memset(sg, 0, sizeof(sg[0]) * VIOMAXBLOCKDMA);
-
+ sg_init_table(sg, VIOMAXBLOCKDMA);
for (i = 0; (i < numsg) && (rw_data->dma_info[i].len > 0); ++i) {
sg_dma_address(&sg[i]) = rw_data->dma_info[i].token;
sg_dma_len(&sg[i]) = rw_data->dma_info[i].len;
for (i = 0; (i < numsg) && (rw_data->dma_info[i].len > 0); ++i) {
sg_dma_address(&sg[i]) = rw_data->dma_info[i].token;
sg_dma_len(&sg[i]) = rw_data->dma_info[i].len;
@@
-589,7
+587,7
@@
static int viodasd_handle_read_write(struct vioblocklpevent *bevent)
num_req_outstanding--;
spin_unlock_irqrestore(&viodasd_spinlock, irq_flags);
num_req_outstanding--;
spin_unlock_irqrestore(&viodasd_spinlock, irq_flags);
- error =
event->xRc != HvLpEvent_Rc_Good
;
+ error =
(event->xRc == HvLpEvent_Rc_Good) ? 0 : -EIO
;
if (error) {
const struct vio_error_entry *err;
err = vio_lookup_rc(viodasd_err_table, bevent->sub_result);
if (error) {
const struct vio_error_entry *err;
err = vio_lookup_rc(viodasd_err_table, bevent->sub_result);
@@
-599,7
+597,7
@@
static int viodasd_handle_read_write(struct vioblocklpevent *bevent)
}
qlock = req->q->queue_lock;
spin_lock_irqsave(qlock, irq_flags);
}
qlock = req->q->queue_lock;
spin_lock_irqsave(qlock, irq_flags);
- viodasd_end_request(req,
!
error, num_sect);
+ viodasd_end_request(req, error, num_sect);
spin_unlock_irqrestore(qlock, irq_flags);
/* Finally, try to get more requests off of this device's queue */
spin_unlock_irqrestore(qlock, irq_flags);
/* Finally, try to get more requests off of this device's queue */