[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 3/6] block/raw-posix: implement bdrv_prealloc
From: |
Hu Tao |
Subject: |
[Qemu-devel] [RFC PATCH v2 3/6] block/raw-posix: implement bdrv_preallocate |
Date: |
Wed, 27 Nov 2013 10:15:41 +0800 |
Signed-off-by: Hu Tao <address@hidden>
---
block/raw-posix.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index f836c8e..c563073 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1050,6 +1050,39 @@ static int64_t
raw_get_allocated_file_size(BlockDriverState *bs)
return (int64_t)st.st_blocks * 512;
}
+#ifdef __linux__
+static int raw_preallocate2(int fd, int64_t offset, int64_t length)
+{
+ int ret = -1;
+
+ ret = fallocate(fd, 0, offset, length);
+
+ /* fallback to posix_fallocate() if fallocate() is not supported */
+ if (ret < 0 && (errno == ENOSYS || errno == EOPNOTSUPP)) {
+ ret = posix_fallocate(fd, offset, length);
+ }
+
+ return ret;
+}
+#else
+static int raw_preallocate2(int fd, int64_t offset, int64_t length)
+{
+ return posix_fallocate(fd, offset, length);
+}
+#endif
+
+static int raw_preallocate(BlockDriverState *bs, int64_t offset, int64_t
length)
+{
+ BDRVRawState *s = bs->opaque;
+ int64_t len = bdrv_getlength(bs);
+
+ if (offset + length < 0 || offset + length > len) {
+ return -1;
+ }
+
+ return raw_preallocate2(s->fd, offset, length);
+}
+
static int raw_create(const char *filename, QEMUOptionParameter *options,
Error **errp)
{
@@ -1221,6 +1254,7 @@ static BlockDriver bdrv_file = {
.bdrv_close = raw_close,
.bdrv_create = raw_create,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_preallocate = raw_preallocate,
.bdrv_co_get_block_status = raw_co_get_block_status,
.bdrv_aio_readv = raw_aio_readv,
--
1.8.3.1
- [Qemu-devel] [RFC PATCH v2 0/6] qemu-img: add preallocation=full, Hu Tao, 2013/11/26
- [Qemu-devel] [RFC PATCH v2 1/6] block: introduce prealloc_mode, Hu Tao, 2013/11/26
- [Qemu-devel] [RFC PATCH v2 2/6] block: add BlockDriver.bdrv_preallocate., Hu Tao, 2013/11/26
- [Qemu-devel] [RFC PATCH v2 3/6] block/raw-posix: implement bdrv_preallocate,
Hu Tao <=
- [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Hu Tao, 2013/11/26
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Fam Zheng, 2013/11/26
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Hu Tao, 2013/11/27
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Fam Zheng, 2013/11/27
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Peter Lieven, 2013/11/27
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Fam Zheng, 2013/11/27
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Peter Lieven, 2013/11/27
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Hu Tao, 2013/11/28
- Re: [Qemu-devel] [RFC PATCH v2 5/6] qcow2: implement bdrv_preallocate, Peter Lieven, 2013/11/28