diff options
author | kaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk> | 2003-03-10 00:02:02 +0000 |
---|---|---|
committer | kaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk> | 2003-03-10 00:02:02 +0000 |
commit | de64d4ffa1925e59bb01e8ce5e9f72fd482b2b3c (patch) | |
tree | 38165d0f21a977f47b5abf616ede2ef3370f6afc /xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers | |
parent | 6607af3a4627f1e17459cd798379136763c0c86a (diff) | |
download | xen-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/arch/xeno/drivers')
-rw-r--r-- | xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_block.c | 10 |
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; } |