[libvirt] [PATCH] Create raw storage files with O_DSYNC

When creating preallocated large raw files opening them with O_DSYNC prevents long delays in reading because cache pages can be immediately reused without writing them on a disk first. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/storage/storage_backend.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index e79294a..8aab9ab 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -301,7 +301,7 @@ virStorageBackendCreateRaw(virConnectPtr conn, goto cleanup; } - if ((fd = open(vol->target.path, O_RDWR | O_EXCL)) < 0) { + if ((fd = open(vol->target.path, O_RDWR | O_EXCL | O_DSYNC)) < 0) { virReportSystemError(conn, errno, _("cannot open new path '%s'"), vol->target.path); -- 1.6.6.1

On Mon, Feb 08, 2010 at 04:59:31PM +0100, Jiri Denemark wrote:
When creating preallocated large raw files opening them with O_DSYNC prevents long delays in reading because cache pages can be immediately reused without writing them on a disk first.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/storage/storage_backend.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index e79294a..8aab9ab 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -301,7 +301,7 @@ virStorageBackendCreateRaw(virConnectPtr conn, goto cleanup; }
- if ((fd = open(vol->target.path, O_RDWR | O_EXCL)) < 0) { + if ((fd = open(vol->target.path, O_RDWR | O_EXCL | O_DSYNC)) < 0) { virReportSystemError(conn, errno, _("cannot open new path '%s'"), vol->target.path); --
ACK, O_DSYNC isn't ideal, but since there are soo many ways in which the file ends up being written, it is the simplest option to get what we need Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index e79294a..8aab9ab 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -301,7 +301,7 @@ virStorageBackendCreateRaw(virConnectPtr conn, goto cleanup; }
- if ((fd = open(vol->target.path, O_RDWR | O_EXCL)) < 0) { + if ((fd = open(vol->target.path, O_RDWR | O_EXCL | O_DSYNC)) < 0) { virReportSystemError(conn, errno, _("cannot open new path '%s'"), vol->target.path); --
ACK, O_DSYNC isn't ideal, but since there are soo many ways in which the file ends up being written, it is the simplest option to get what we need
Thanks. Rebased and pushed. Jirka
participants (2)
-
Daniel P. Berrange
-
Jiri Denemark