From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Fmqwo-0002Br-9f for qemu-devel@nongnu.org; Sun, 04 Jun 2006 07:39:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Fmqwm-0002Bf-P8 for qemu-devel@nongnu.org; Sun, 04 Jun 2006 07:39:09 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Fmqwm-0002Bc-Ka for qemu-devel@nongnu.org; Sun, 04 Jun 2006 07:39:08 -0400 Received: from [199.232.41.3] (helo=savannah.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.52) id 1Fmr3g-0002xG-VO for qemu-devel@nongnu.org; Sun, 04 Jun 2006 07:46:17 -0400 Received: from savannah.gnu.org ([127.0.0.1]) by savannah.gnu.org with esmtp (Exim 3.36 #1 (Debian)) id 1Fmqwl-0007dv-00 for ; Sun, 04 Jun 2006 07:39:07 -0400 Received: from pbrook by savannah.gnu.org with local (Exim 4.50) id 1Fmqwl-0007ds-Aw for qemu-devel@nongnu.org; Sun, 04 Jun 2006 11:39:07 +0000 Message-Id: From: Paul Brook Date: Sun, 04 Jun 2006 11:39:07 +0000 Subject: [Qemu-devel] qemu block-cow.c block-qcow.c block-vmdk.c bloc... Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org CVSROOT: /sources/qemu Module name: qemu Changes by: Paul Brook 06/06/04 11:39:07 Modified files: . : block-cow.c block-qcow.c block-vmdk.c block-vvfat.c block.c block_int.h vl.h hw : ide.c scsi-disk.c Log message: Disk cache flush support. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/qemu/block-cow.c?cvsroot=qemu&r1=1.5&r2=1.6 http://cvs.savannah.gnu.org/viewcvs/qemu/block-qcow.c?cvsroot=qemu&r1=1.6&r2=1.7 http://cvs.savannah.gnu.org/viewcvs/qemu/block-vmdk.c?cvsroot=qemu&r1=1.7&r2=1.8 http://cvs.savannah.gnu.org/viewcvs/qemu/block-vvfat.c?cvsroot=qemu&r1=1.5&r2=1.6 http://cvs.savannah.gnu.org/viewcvs/qemu/block.c?cvsroot=qemu&r1=1.26&r2=1.27 http://cvs.savannah.gnu.org/viewcvs/qemu/block_int.h?cvsroot=qemu&r1=1.4&r2=1.5 http://cvs.savannah.gnu.org/viewcvs/qemu/vl.h?cvsroot=qemu&r1=1.123&r2=1.124 http://cvs.savannah.gnu.org/viewcvs/qemu/hw/ide.c?cvsroot=qemu&r1=1.44&r2=1.45 http://cvs.savannah.gnu.org/viewcvs/qemu/hw/scsi-disk.c?cvsroot=qemu&r1=1.6&r2=1.7 Patches: Index: block-cow.c =================================================================== RCS file: /sources/qemu/qemu/block-cow.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -b -r1.5 -r1.6 --- block-cow.c 28 Apr 2005 21:09:32 -0000 1.5 +++ block-cow.c 4 Jun 2006 11:39:06 -0000 1.6 @@ -250,6 +250,12 @@ return 0; } +static void cow_flush(BlockDriverState *bs) +{ + BDRVCowState *s = bs->opaque; + fsync(s->fd); +} + BlockDriver bdrv_cow = { "cow", sizeof(BDRVCowState), @@ -259,6 +265,7 @@ cow_write, cow_close, cow_create, + cow_flush, cow_is_allocated, }; #endif Index: block-qcow.c =================================================================== RCS file: /sources/qemu/qemu/block-qcow.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -b -r1.6 -r1.7 --- block-qcow.c 18 Dec 2005 18:28:15 -0000 1.6 +++ block-qcow.c 4 Jun 2006 11:39:06 -0000 1.7 @@ -693,6 +693,12 @@ return 0; } +static void qcow_flush(BlockDriverState *bs) +{ + BDRVQcowState *s = bs->opaque; + fsync(s->fd); +} + BlockDriver bdrv_qcow = { "qcow", sizeof(BDRVQcowState), @@ -702,6 +708,7 @@ qcow_write, qcow_close, qcow_create, + qcow_flush, qcow_is_allocated, qcow_set_key, qcow_make_empty Index: block-vmdk.c =================================================================== RCS file: /sources/qemu/qemu/block-vmdk.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -b -r1.7 -r1.8 --- block-vmdk.c 30 Oct 2005 20:53:51 -0000 1.7 +++ block-vmdk.c 4 Jun 2006 11:39:07 -0000 1.8 @@ -426,6 +426,12 @@ close(s->fd); } +static void vmdk_flush(BlockDriverState *bs) +{ + BDRVVmdkState *s = bs->opaque; + fsync(s->fd); +} + BlockDriver bdrv_vmdk = { "vmdk", sizeof(BDRVVmdkState), @@ -435,5 +441,6 @@ vmdk_write, vmdk_close, vmdk_create, + vmdk_flush, vmdk_is_allocated, }; Index: block-vvfat.c =================================================================== RCS file: /sources/qemu/qemu/block-vvfat.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -b -r1.5 -r1.6 --- block-vvfat.c 23 Apr 2006 14:36:41 -0000 1.5 +++ block-vvfat.c 4 Jun 2006 11:39:07 -0000 1.6 @@ -2772,6 +2772,7 @@ vvfat_read, vvfat_write, vvfat_close, + NULL, /* ??? Not sure if we can do any meaningful flushing. */ NULL, vvfat_is_allocated }; Index: block.c =================================================================== RCS file: /sources/qemu/qemu/block.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -b -r1.26 -r1.27 --- block.c 25 Apr 2006 22:36:06 -0000 1.26 +++ block.c 4 Jun 2006 11:39:07 -0000 1.27 @@ -615,6 +615,14 @@ return bs->device_name; } +void bdrv_flush(BlockDriverState *bs) +{ + if (bs->drv->bdrv_flush) + bs->drv->bdrv_flush(bs); + if (bs->backing_hd) + bdrv_flush(bs->backing_hd); +} + void bdrv_info(void) { BlockDriverState *bs; @@ -770,6 +778,12 @@ return 0; } +static void raw_flush(BlockDriverState *bs) +{ + BDRVRawState *s = bs->opaque; + fsync(s->fd); +} + BlockDriver bdrv_raw = { "raw", sizeof(BDRVRawState), @@ -779,6 +793,7 @@ raw_write, raw_close, raw_create, + raw_flush, }; void bdrv_init(void) Index: block_int.h =================================================================== RCS file: /sources/qemu/qemu/block_int.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -b -r1.4 -r1.5 --- block_int.h 18 Dec 2005 18:28:15 -0000 1.4 +++ block_int.h 4 Jun 2006 11:39:07 -0000 1.5 @@ -36,6 +36,7 @@ void (*bdrv_close)(BlockDriverState *bs); int (*bdrv_create)(const char *filename, int64_t total_sectors, const char *backing_file, int flags); + void (*bdrv_flush)(BlockDriverState *bs); int (*bdrv_is_allocated)(BlockDriverState *bs, int64_t sector_num, int nb_sectors, int *pnum); int (*bdrv_set_key)(BlockDriverState *bs, const char *key); Index: vl.h =================================================================== RCS file: /sources/qemu/qemu/vl.h,v retrieving revision 1.123 retrieving revision 1.124 diff -u -b -r1.123 -r1.124 --- vl.h 30 May 2006 01:48:12 -0000 1.123 +++ vl.h 4 Jun 2006 11:39:07 -0000 1.124 @@ -496,6 +496,8 @@ void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr); int bdrv_commit(BlockDriverState *bs); void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size); +/* Ensure contents are flushed to disk. */ +void bdrv_flush(BlockDriverState *bs); #define BDRV_TYPE_HD 0 #define BDRV_TYPE_CDROM 1 Index: hw/ide.c =================================================================== RCS file: /sources/qemu/qemu/hw/ide.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -b -r1.44 -r1.45 --- hw/ide.c 25 May 2006 23:58:51 -0000 1.44 +++ hw/ide.c 4 Jun 2006 11:39:07 -0000 1.45 @@ -1656,6 +1656,11 @@ break; case WIN_FLUSH_CACHE: case WIN_FLUSH_CACHE_EXT: + if (s->bs) + bdrv_flush(s->bs); + s->status = READY_STAT; + ide_set_irq(s); + break; case WIN_STANDBYNOW1: case WIN_IDLEIMMEDIATE: s->status = READY_STAT; Index: hw/scsi-disk.c =================================================================== RCS file: /sources/qemu/qemu/hw/scsi-disk.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -b -r1.6 -r1.7 --- hw/scsi-disk.c 3 Jun 2006 14:23:34 -0000 1.6 +++ hw/scsi-disk.c 4 Jun 2006 11:39:07 -0000 1.7 @@ -373,7 +373,7 @@ break; case 0x35: DPRINTF("Syncronise cache (sector %d, count %d)\n", lba, len); - /* ??? Extend block layer and use fsync to implement this. */ + bdrv_flush(s->bdrv); break; case 0x43: {