aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse
diff options
context:
space:
mode:
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-03-10 00:02:02 +0000
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-03-10 00:02:02 +0000
commitde64d4ffa1925e59bb01e8ce5e9f72fd482b2b3c (patch)
tree38165d0f21a977f47b5abf616ede2ef3370f6afc /xenolinux-2.4.21-pre4-sparse
parent6607af3a4627f1e17459cd798379136763c0c86a (diff)
downloadxen-de64d4ffa1925e59bb01e8ce5e9f72fd482b2b3c.tar.gz
xen-de64d4ffa1925e59bb01e8ce5e9f72fd482b2b3c.tar.bz2
xen-de64d4ffa1925e59bb01e8ce5e9f72fd482b2b3c.zip
bitkeeper revision 1.116 (3e6bd5fanPF3nYb2uWLHO7p0PnxDhg)
xl_block.c, blkdev.h, xen_block.c: Improved error handling for blkdev data accesses. Added sanity checking for read requests -- test if buffer modified.
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c
index 40f93cc251..bfdfa50c3e 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c
@@ -440,13 +440,15 @@ static void xlblk_response_int(int irq, void *dev_id, struct pt_regs *ptregs)
{
case XEN_BLOCK_READ:
case XEN_BLOCK_WRITE:
+ if ( bret->status )
+ printk(KERN_ALERT "Bad return from blkdev data request\n");
for ( bh = (struct buffer_head *)bret->id;
bh != NULL;
bh = next_bh )
{
next_bh = bh->b_reqnext;
bh->b_reqnext = NULL;
- bh->b_end_io(bh, 1);
+ bh->b_end_io(bh, !bret->status);
}
break;
@@ -454,6 +456,8 @@ static void xlblk_response_int(int irq, void *dev_id, struct pt_regs *ptregs)
case XEN_BLOCK_SEG_DELETE:
case XEN_BLOCK_PROBE_SEG:
case XEN_BLOCK_PROBE_BLK:
+ if ( bret->status )
+ printk(KERN_ALERT "Bad return from blkdev control request\n");
xlblk_control_msg_pending = 0;
break;
@@ -488,7 +492,7 @@ int xenolinux_control_msg(int operation, char *buffer, int size)
char *aligned_buf;
/* We copy from an aligned buffer, as interface needs sector alignment. */
- aligned_buf = get_free_page(GFP_KERNEL);
+ aligned_buf = (char *)get_free_page(GFP_KERNEL);
if ( aligned_buf == NULL ) BUG();
xlblk_control_msg_pending = 1;
@@ -501,7 +505,7 @@ int xenolinux_control_msg(int operation, char *buffer, int size)
while ( xlblk_control_msg_pending ) barrier();
memcpy(buffer, aligned_buf, size);
- free_page(aligned_buf);
+ free_page((unsigned long)aligned_buf);
return 0;
}