Loading block/raw-posix.c +24 −14 Original line number Diff line number Diff line Loading @@ -185,6 +185,28 @@ static int raw_normalize_devicepath(const char **filename) } #endif static void raw_parse_flags(int bdrv_flags, int *open_flags) { assert(open_flags != NULL); *open_flags |= O_BINARY; *open_flags &= ~O_ACCMODE; if (bdrv_flags & BDRV_O_RDWR) { *open_flags |= O_RDWR; } else { *open_flags |= O_RDONLY; } /* Use O_DSYNC for write-through caching, no flags for write-back caching, * and O_DIRECT for no caching. */ if ((bdrv_flags & BDRV_O_NOCACHE)) { *open_flags |= O_DIRECT; } if (!(bdrv_flags & BDRV_O_CACHE_WB)) { *open_flags |= O_DSYNC; } } #ifdef CONFIG_LINUX_AIO static int raw_set_aio(void **aio_ctx, int *use_aio, int bdrv_flags) { Loading Loading @@ -228,20 +250,8 @@ static int raw_open_common(BlockDriverState *bs, const char *filename, return ret; } s->open_flags = open_flags | O_BINARY; s->open_flags &= ~O_ACCMODE; if (bdrv_flags & BDRV_O_RDWR) { s->open_flags |= O_RDWR; } else { s->open_flags |= O_RDONLY; } /* Use O_DSYNC for write-through caching, no flags for write-back caching, * and O_DIRECT for no caching. */ if ((bdrv_flags & BDRV_O_NOCACHE)) s->open_flags |= O_DIRECT; if (!(bdrv_flags & BDRV_O_CACHE_WB)) s->open_flags |= O_DSYNC; s->open_flags = open_flags; raw_parse_flags(bdrv_flags, &s->open_flags); s->fd = -1; fd = qemu_open(filename, s->open_flags, 0644); Loading block/raw-win32.c +23 −20 Original line number Diff line number Diff line Loading @@ -77,6 +77,26 @@ static int set_sparse(int fd) NULL, 0, NULL, 0, &returned, NULL); } static void raw_parse_flags(int flags, int *access_flags, DWORD *overlapped) { assert(access_flags != NULL); assert(overlapped != NULL); if (flags & BDRV_O_RDWR) { *access_flags = GENERIC_READ | GENERIC_WRITE; } else { *access_flags = GENERIC_READ; } *overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) { *overlapped |= FILE_FLAG_NO_BUFFERING; } if (!(flags & BDRV_O_CACHE_WB)) { *overlapped |= FILE_FLAG_WRITE_THROUGH; } } static int raw_open(BlockDriverState *bs, const char *filename, int flags) { BDRVRawState *s = bs->opaque; Loading @@ -85,17 +105,8 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags) s->type = FTYPE_FILE; if (flags & BDRV_O_RDWR) { access_flags = GENERIC_READ | GENERIC_WRITE; } else { access_flags = GENERIC_READ; } raw_parse_flags(flags, &access_flags, &overlapped); overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) overlapped |= FILE_FLAG_NO_BUFFERING; if (!(flags & BDRV_O_CACHE_WB)) overlapped |= FILE_FLAG_WRITE_THROUGH; s->hfile = CreateFile(filename, access_flags, FILE_SHARE_READ, NULL, OPEN_EXISTING, overlapped, NULL); Loading Loading @@ -374,18 +385,10 @@ static int hdev_open(BlockDriverState *bs, const char *filename, int flags) } s->type = find_device_type(bs, filename); if (flags & BDRV_O_RDWR) { access_flags = GENERIC_READ | GENERIC_WRITE; } else { access_flags = GENERIC_READ; } raw_parse_flags(flags, &access_flags, &overlapped); create_flags = OPEN_EXISTING; overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) overlapped |= FILE_FLAG_NO_BUFFERING; if (!(flags & BDRV_O_CACHE_WB)) overlapped |= FILE_FLAG_WRITE_THROUGH; s->hfile = CreateFile(filename, access_flags, FILE_SHARE_READ, NULL, create_flags, overlapped, NULL); Loading Loading
block/raw-posix.c +24 −14 Original line number Diff line number Diff line Loading @@ -185,6 +185,28 @@ static int raw_normalize_devicepath(const char **filename) } #endif static void raw_parse_flags(int bdrv_flags, int *open_flags) { assert(open_flags != NULL); *open_flags |= O_BINARY; *open_flags &= ~O_ACCMODE; if (bdrv_flags & BDRV_O_RDWR) { *open_flags |= O_RDWR; } else { *open_flags |= O_RDONLY; } /* Use O_DSYNC for write-through caching, no flags for write-back caching, * and O_DIRECT for no caching. */ if ((bdrv_flags & BDRV_O_NOCACHE)) { *open_flags |= O_DIRECT; } if (!(bdrv_flags & BDRV_O_CACHE_WB)) { *open_flags |= O_DSYNC; } } #ifdef CONFIG_LINUX_AIO static int raw_set_aio(void **aio_ctx, int *use_aio, int bdrv_flags) { Loading Loading @@ -228,20 +250,8 @@ static int raw_open_common(BlockDriverState *bs, const char *filename, return ret; } s->open_flags = open_flags | O_BINARY; s->open_flags &= ~O_ACCMODE; if (bdrv_flags & BDRV_O_RDWR) { s->open_flags |= O_RDWR; } else { s->open_flags |= O_RDONLY; } /* Use O_DSYNC for write-through caching, no flags for write-back caching, * and O_DIRECT for no caching. */ if ((bdrv_flags & BDRV_O_NOCACHE)) s->open_flags |= O_DIRECT; if (!(bdrv_flags & BDRV_O_CACHE_WB)) s->open_flags |= O_DSYNC; s->open_flags = open_flags; raw_parse_flags(bdrv_flags, &s->open_flags); s->fd = -1; fd = qemu_open(filename, s->open_flags, 0644); Loading
block/raw-win32.c +23 −20 Original line number Diff line number Diff line Loading @@ -77,6 +77,26 @@ static int set_sparse(int fd) NULL, 0, NULL, 0, &returned, NULL); } static void raw_parse_flags(int flags, int *access_flags, DWORD *overlapped) { assert(access_flags != NULL); assert(overlapped != NULL); if (flags & BDRV_O_RDWR) { *access_flags = GENERIC_READ | GENERIC_WRITE; } else { *access_flags = GENERIC_READ; } *overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) { *overlapped |= FILE_FLAG_NO_BUFFERING; } if (!(flags & BDRV_O_CACHE_WB)) { *overlapped |= FILE_FLAG_WRITE_THROUGH; } } static int raw_open(BlockDriverState *bs, const char *filename, int flags) { BDRVRawState *s = bs->opaque; Loading @@ -85,17 +105,8 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags) s->type = FTYPE_FILE; if (flags & BDRV_O_RDWR) { access_flags = GENERIC_READ | GENERIC_WRITE; } else { access_flags = GENERIC_READ; } raw_parse_flags(flags, &access_flags, &overlapped); overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) overlapped |= FILE_FLAG_NO_BUFFERING; if (!(flags & BDRV_O_CACHE_WB)) overlapped |= FILE_FLAG_WRITE_THROUGH; s->hfile = CreateFile(filename, access_flags, FILE_SHARE_READ, NULL, OPEN_EXISTING, overlapped, NULL); Loading Loading @@ -374,18 +385,10 @@ static int hdev_open(BlockDriverState *bs, const char *filename, int flags) } s->type = find_device_type(bs, filename); if (flags & BDRV_O_RDWR) { access_flags = GENERIC_READ | GENERIC_WRITE; } else { access_flags = GENERIC_READ; } raw_parse_flags(flags, &access_flags, &overlapped); create_flags = OPEN_EXISTING; overlapped = FILE_ATTRIBUTE_NORMAL; if (flags & BDRV_O_NOCACHE) overlapped |= FILE_FLAG_NO_BUFFERING; if (!(flags & BDRV_O_CACHE_WB)) overlapped |= FILE_FLAG_WRITE_THROUGH; s->hfile = CreateFile(filename, access_flags, FILE_SHARE_READ, NULL, create_flags, overlapped, NULL); Loading