* [PATCH 01/14] kvm tools: Move disk image related code under disk directory
@ 2011-05-18 8:19 Asias He
2011-05-18 8:19 ` [PATCH 02/14] kvm tools: Rename disk-image.c to core.c Asias He
` (13 more replies)
0 siblings, 14 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch removes disk-image.c and qcow.c under disk directory.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/Makefile | 4 ++--
tools/kvm/{ => disk}/disk-image.c | 0
tools/kvm/{ => disk}/qcow.c | 0
3 files changed, 2 insertions(+), 2 deletions(-)
rename tools/kvm/{ => disk}/disk-image.c (100%)
rename tools/kvm/{ => disk}/qcow.c (100%)
diff --git a/tools/kvm/Makefile b/tools/kvm/Makefile
index 45897d5..8938f5f 100644
--- a/tools/kvm/Makefile
+++ b/tools/kvm/Makefile
@@ -15,7 +15,7 @@ TAGS = ctags
OBJS += 8250-serial.o
OBJS += cpuid.o
OBJS += read-write.o
-OBJS += disk-image.o
+OBJS += disk/disk-image.o
OBJS += interrupt.o
OBJS += ioport.o
OBJS += kvm.o
@@ -37,7 +37,7 @@ OBJS += util/strbuf.o
OBJS += kvm-help.o
OBJS += kvm-cmd.o
OBJS += kvm-run.o
-OBJS += qcow.o
+OBJS += disk/qcow.o
OBJS += mptable.o
OBJS += threadpool.o
OBJS += irq.o
diff --git a/tools/kvm/disk-image.c b/tools/kvm/disk/disk-image.c
similarity index 100%
rename from tools/kvm/disk-image.c
rename to tools/kvm/disk/disk-image.c
diff --git a/tools/kvm/qcow.c b/tools/kvm/disk/qcow.c
similarity index 100%
rename from tools/kvm/qcow.c
rename to tools/kvm/disk/qcow.c
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 02/14] kvm tools: Rename disk-image.c to core.c
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 03/14] kvm tools: Split raw image and blk device code from disk/core.c Asias He
` (12 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch prepares the splitting of disk-image.c to core.c,
blk.c and raw.c.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/Makefile | 2 +-
tools/kvm/disk/{disk-image.c => core.c} | 0
2 files changed, 1 insertions(+), 1 deletions(-)
rename tools/kvm/disk/{disk-image.c => core.c} (100%)
diff --git a/tools/kvm/Makefile b/tools/kvm/Makefile
index 8938f5f..d7b1233 100644
--- a/tools/kvm/Makefile
+++ b/tools/kvm/Makefile
@@ -15,7 +15,7 @@ TAGS = ctags
OBJS += 8250-serial.o
OBJS += cpuid.o
OBJS += read-write.o
-OBJS += disk/disk-image.o
+OBJS += disk/core.o
OBJS += interrupt.o
OBJS += ioport.o
OBJS += kvm.o
diff --git a/tools/kvm/disk/disk-image.c b/tools/kvm/disk/core.c
similarity index 100%
rename from tools/kvm/disk/disk-image.c
rename to tools/kvm/disk/core.c
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 03/14] kvm tools: Split raw image and blk device code from disk/core.c
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
2011-05-18 8:19 ` [PATCH 02/14] kvm tools: Rename disk-image.c to core.c Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 04/14] kvm tools: Rename disk_image__{read, write}_sector_iov Asias He
` (11 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch moves raw image and blk device code into disk/raw.c
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/Makefile | 3 +-
tools/kvm/disk/core.c | 101 +-----------------------------------
tools/kvm/disk/raw.c | 84 ++++++++++++++++++++++++++++++
tools/kvm/include/kvm/disk-image.h | 15 +++++
4 files changed, 102 insertions(+), 101 deletions(-)
create mode 100644 tools/kvm/disk/raw.c
diff --git a/tools/kvm/Makefile b/tools/kvm/Makefile
index d7b1233..a19fbe8 100644
--- a/tools/kvm/Makefile
+++ b/tools/kvm/Makefile
@@ -15,7 +15,6 @@ TAGS = ctags
OBJS += 8250-serial.o
OBJS += cpuid.o
OBJS += read-write.o
-OBJS += disk/core.o
OBJS += interrupt.o
OBJS += ioport.o
OBJS += kvm.o
@@ -38,6 +37,8 @@ OBJS += kvm-help.o
OBJS += kvm-cmd.o
OBJS += kvm-run.o
OBJS += disk/qcow.o
+OBJS += disk/core.o
+OBJS += disk/raw.o
OBJS += mptable.o
OBJS += threadpool.o
OBJS += irq.o
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 4172b05..4622e99 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -1,21 +1,5 @@
#include "kvm/disk-image.h"
-
-#include "kvm/read-write.h"
#include "kvm/qcow.h"
-#include "kvm/util.h"
-
-#include <linux/fs.h> /* for BLKGETSIZE64 */
-
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <linux/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops)
{
@@ -45,89 +29,6 @@ struct disk_image *disk_image__new_readonly(int fd, u64 size, struct disk_image_
return disk;
}
-static ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
-{
- u64 offset = sector << SECTOR_SHIFT;
-
- return preadv_in_full(disk->fd, iov, iovcount, offset);
-}
-
-static ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
-{
- u64 offset = sector << SECTOR_SHIFT;
-
- return pwritev_in_full(disk->fd, iov, iovcount, offset);
-}
-
-static int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
-{
- u64 offset = sector << SECTOR_SHIFT;
-
- if (offset + dst_len > disk->size)
- return -1;
-
- memcpy(dst, disk->priv + offset, dst_len);
-
- return 0;
-}
-
-static int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
-{
- u64 offset = sector << SECTOR_SHIFT;
-
- if (offset + src_len > disk->size)
- return -1;
-
- memcpy(disk->priv + offset, src, src_len);
-
- return 0;
-}
-
-static void raw_image__close_ro_mmap(struct disk_image *disk)
-{
- if (disk->priv != MAP_FAILED)
- munmap(disk->priv, disk->size);
-}
-
-static struct disk_image_operations raw_image_ops = {
- .read_sector_iov = raw_image__read_sector_iov,
- .write_sector_iov = raw_image__write_sector_iov
-};
-
-static struct disk_image_operations raw_image_ro_mmap_ops = {
- .read_sector = raw_image__read_sector_ro_mmap,
- .write_sector = raw_image__write_sector_ro_mmap,
- .close = raw_image__close_ro_mmap,
-};
-
-static struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
-{
- if (readonly)
- return disk_image__new_readonly(fd, st->st_size, &raw_image_ro_mmap_ops);
- else
- return disk_image__new(fd, st->st_size, &raw_image_ops);
-}
-
-static struct disk_image *blkdev__probe(const char *filename, struct stat *st)
-{
- u64 size;
- int fd;
-
- if (!S_ISBLK(st->st_mode))
- return NULL;
-
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- return NULL;
-
- if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
- close(fd);
- return NULL;
- }
-
- return disk_image__new_readonly(fd, size, &raw_image_ro_mmap_ops);
-}
-
struct disk_image *disk_image__open(const char *filename, bool readonly)
{
struct disk_image *disk;
@@ -209,4 +110,4 @@ ssize_t disk_image__write_sector_iov(struct disk_image *disk, u64 sector, const
}
return (sector - first_sector) << SECTOR_SHIFT;
-}
\ No newline at end of file
+}
diff --git a/tools/kvm/disk/raw.c b/tools/kvm/disk/raw.c
new file mode 100644
index 0000000..b1a484d
--- /dev/null
+++ b/tools/kvm/disk/raw.c
@@ -0,0 +1,84 @@
+#include "kvm/disk-image.h"
+
+static ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+{
+ u64 offset = sector << SECTOR_SHIFT;
+
+ return preadv_in_full(disk->fd, iov, iovcount, offset);
+}
+
+static ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+{
+ u64 offset = sector << SECTOR_SHIFT;
+
+ return pwritev_in_full(disk->fd, iov, iovcount, offset);
+}
+
+static int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
+{
+ u64 offset = sector << SECTOR_SHIFT;
+
+ if (offset + dst_len > disk->size)
+ return -1;
+
+ memcpy(dst, disk->priv + offset, dst_len);
+
+ return 0;
+}
+
+static int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+{
+ u64 offset = sector << SECTOR_SHIFT;
+
+ if (offset + src_len > disk->size)
+ return -1;
+
+ memcpy(disk->priv + offset, src, src_len);
+
+ return 0;
+}
+
+static void raw_image__close_ro_mmap(struct disk_image *disk)
+{
+ if (disk->priv != MAP_FAILED)
+ munmap(disk->priv, disk->size);
+}
+
+static struct disk_image_operations raw_image_ops = {
+ .read_sector_iov = raw_image__read_sector_iov,
+ .write_sector_iov = raw_image__write_sector_iov
+};
+
+static struct disk_image_operations raw_image_ro_mmap_ops = {
+ .read_sector = raw_image__read_sector_ro_mmap,
+ .write_sector = raw_image__write_sector_ro_mmap,
+ .close = raw_image__close_ro_mmap,
+};
+
+struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
+{
+ if (readonly)
+ return disk_image__new_readonly(fd, st->st_size, &raw_image_ro_mmap_ops);
+ else
+ return disk_image__new(fd, st->st_size, &raw_image_ops);
+}
+
+struct disk_image *blkdev__probe(const char *filename, struct stat *st)
+{
+ u64 size;
+ int fd;
+
+ if (!S_ISBLK(st->st_mode))
+ return NULL;
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return NULL;
+
+ if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
+ close(fd);
+ return NULL;
+ }
+
+ return disk_image__new_readonly(fd, size, &raw_image_ro_mmap_ops);
+}
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index cc83f38..87bebd3 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -1,10 +1,22 @@
#ifndef KVM__DISK_IMAGE_H
#define KVM__DISK_IMAGE_H
+#include "kvm/read-write.h"
+#include "kvm/util.h"
+
#include <linux/types.h>
+#include <linux/fs.h> /* for BLKGETSIZE64 */
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
#include <stdbool.h>
#include <sys/uio.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
#include <unistd.h>
+#include <fcntl.h>
#define SECTOR_SHIFT 9
#define SECTOR_SIZE (1UL << SECTOR_SHIFT)
@@ -52,4 +64,7 @@ static inline int disk_image__flush(struct disk_image *disk)
return fsync(disk->fd);
}
+struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly);
+struct disk_image *blkdev__probe(const char *filename, struct stat *st);
+
#endif /* KVM__DISK_IMAGE_H */
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 04/14] kvm tools: Rename disk_image__{read, write}_sector_iov
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
2011-05-18 8:19 ` [PATCH 02/14] kvm tools: Rename disk-image.c to core.c Asias He
2011-05-18 8:19 ` [PATCH 03/14] kvm tools: Split raw image and blk device code from disk/core.c Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 05/14] kvm tools: Remove dead coe disk_image__{read, write}_sector Asias He
` (10 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch renames disk_image__{read, write}_sector_io to
disk_image__{read, write}.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 4 ++--
tools/kvm/include/kvm/disk-image.h | 4 ++--
tools/kvm/virtio/blk.c | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 4622e99..3b12fff 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -75,7 +75,7 @@ void disk_image__close(struct disk_image *disk)
}
/* Fill iov with disk data, starting from sector 'sector'. Return amount of bytes read. */
-ssize_t disk_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
u64 first_sector = sector;
@@ -94,7 +94,7 @@ ssize_t disk_image__read_sector_iov(struct disk_image *disk, u64 sector, const s
}
/* Write iov to disk, starting from sector 'sector'. Return amount of bytes written. */
-ssize_t disk_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
u64 first_sector = sector;
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index 87bebd3..d43457e 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -54,8 +54,8 @@ static inline int disk_image__write_sector(struct disk_image *disk, u64 sector,
return disk->ops->write_sector(disk, sector, src, src_len);
}
-ssize_t disk_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
-ssize_t disk_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
+ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
+ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
static inline int disk_image__flush(struct disk_image *disk)
{
diff --git a/tools/kvm/virtio/blk.c b/tools/kvm/virtio/blk.c
index c9b8a54..de88fe9 100644
--- a/tools/kvm/virtio/blk.c
+++ b/tools/kvm/virtio/blk.c
@@ -140,10 +140,10 @@ static bool virtio_blk_do_io_request(struct kvm *kvm,
switch (req->type) {
case VIRTIO_BLK_T_IN:
- block_cnt = disk_image__read_sector_iov(bdev->disk, req->sector, iov + 1, in + out - 2);
+ block_cnt = disk_image__read(bdev->disk, req->sector, iov + 1, in + out - 2);
break;
case VIRTIO_BLK_T_OUT:
- block_cnt = disk_image__write_sector_iov(bdev->disk, req->sector, iov + 1, in + out - 2);
+ block_cnt = disk_image__write(bdev->disk, req->sector, iov + 1, in + out - 2);
break;
case VIRTIO_BLK_T_FLUSH:
block_cnt = disk_image__flush(bdev->disk);
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 05/14] kvm tools: Remove dead coe disk_image__{read, write}_sector
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (2 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 04/14] kvm tools: Rename disk_image__{read, write}_sector_iov Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 06/14] kvm tools: Consolidate disk_image__{new, new_readonly} Asias He
` (9 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
These code are not used anymore. Let's remove it.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/include/kvm/disk-image.h | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index d43457e..e6d9e8e 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -44,16 +44,6 @@ struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operation
struct disk_image *disk_image__new_readonly(int fd, u64 size, struct disk_image_operations *ops);
void disk_image__close(struct disk_image *disk);
-static inline int disk_image__read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
-{
- return disk->ops->read_sector(disk, sector, dst, dst_len);
-}
-
-static inline int disk_image__write_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
-{
- return disk->ops->write_sector(disk, sector, src, src_len);
-}
-
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 06/14] kvm tools: Consolidate disk_image__{new, new_readonly}
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (3 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 05/14] kvm tools: Remove dead coe disk_image__{read, write}_sector Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 07/14] kvm tools: Split blk device code from raw.c to blk.c Asias He
` (8 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch simplifies the disk image API.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 22 +++++++++-------------
tools/kvm/disk/qcow.c | 14 ++++++++++----
tools/kvm/disk/raw.c | 14 +++++++++++---
tools/kvm/include/kvm/disk-image.h | 6 ++++--
4 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 3b12fff..2990caa 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -1,7 +1,7 @@
#include "kvm/disk-image.h"
#include "kvm/qcow.h"
-struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops)
+struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops, int use_mmap)
{
struct disk_image *disk;
@@ -12,20 +12,16 @@ struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operation
disk->fd = fd;
disk->size = size;
disk->ops = ops;
- return disk;
-}
-
-struct disk_image *disk_image__new_readonly(int fd, u64 size, struct disk_image_operations *ops)
-{
- struct disk_image *disk;
- disk = disk_image__new(fd, size, ops);
- if (!disk)
- return NULL;
+ if (use_mmap == DISK_IMAGE_MMAP) {
+ /*
+ * The write to disk image will be discarded
+ */
+ disk->priv = mmap(NULL, size, PROT_RW, MAP_PRIVATE | MAP_NORESERVE, fd, 0);
+ if (disk->priv == MAP_FAILED)
+ die("mmap() failed");
+ }
- disk->priv = mmap(NULL, size, PROT_RW, MAP_PRIVATE | MAP_NORESERVE, fd, 0);
- if (disk->priv == MAP_FAILED)
- die("mmap() failed");
return disk;
}
diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
index bb2345c..b29efb4 100644
--- a/tools/kvm/disk/qcow.c
+++ b/tools/kvm/disk/qcow.c
@@ -433,10 +433,13 @@ static struct disk_image *qcow2_probe(int fd, bool readonly)
if (qcow_read_l1_table(q) < 0)
goto error;
+ /*
+ * Do not use mmap use read/write instead
+ */
if (readonly)
- disk_image = disk_image__new(fd, h->size, &qcow1_disk_readonly_ops);
+ disk_image = disk_image__new(fd, h->size, &qcow1_disk_readonly_ops, DISK_IMAGE_NOMMAP);
else
- disk_image = disk_image__new(fd, h->size, &qcow1_disk_ops);
+ disk_image = disk_image__new(fd, h->size, &qcow1_disk_ops, DISK_IMAGE_NOMMAP);
if (!disk_image)
goto error;
@@ -527,10 +530,13 @@ static struct disk_image *qcow1_probe(int fd, bool readonly)
if (qcow_read_l1_table(q) < 0)
goto error;
+ /*
+ * Do not use mmap use read/write instead
+ */
if (readonly)
- disk_image = disk_image__new(fd, h->size, &qcow1_disk_readonly_ops);
+ disk_image = disk_image__new(fd, h->size, &qcow1_disk_readonly_ops, DISK_IMAGE_NOMMAP);
else
- disk_image = disk_image__new(fd, h->size, &qcow1_disk_ops);
+ disk_image = disk_image__new(fd, h->size, &qcow1_disk_ops, DISK_IMAGE_NOMMAP);
if (!disk_image)
goto error;
diff --git a/tools/kvm/disk/raw.c b/tools/kvm/disk/raw.c
index b1a484d..a419c32 100644
--- a/tools/kvm/disk/raw.c
+++ b/tools/kvm/disk/raw.c
@@ -57,10 +57,18 @@ static struct disk_image_operations raw_image_ro_mmap_ops = {
struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
{
+
if (readonly)
- return disk_image__new_readonly(fd, st->st_size, &raw_image_ro_mmap_ops);
+ /*
+ * Use mmap's MAP_PRIVATE to implement non-persistent write
+ * FIXME: This does not work on 32-bit host.
+ */
+ return disk_image__new(fd, st->st_size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
else
- return disk_image__new(fd, st->st_size, &raw_image_ops);
+ /*
+ * Use read/write instead of mmap
+ */
+ return disk_image__new(fd, st->st_size, &raw_image_ops, DISK_IMAGE_NOMMAP);
}
struct disk_image *blkdev__probe(const char *filename, struct stat *st)
@@ -80,5 +88,5 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st)
return NULL;
}
- return disk_image__new_readonly(fd, size, &raw_image_ro_mmap_ops);
+ return disk_image__new(fd, size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
}
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index e6d9e8e..efa3e42 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -21,6 +21,9 @@
#define SECTOR_SHIFT 9
#define SECTOR_SIZE (1UL << SECTOR_SHIFT)
+#define DISK_IMAGE_MMAP 0
+#define DISK_IMAGE_NOMMAP 1
+
struct disk_image;
struct disk_image_operations {
@@ -40,8 +43,7 @@ struct disk_image {
};
struct disk_image *disk_image__open(const char *filename, bool readonly);
-struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops);
-struct disk_image *disk_image__new_readonly(int fd, u64 size, struct disk_image_operations *ops);
+struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops, int mmap);
void disk_image__close(struct disk_image *disk);
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 07/14] kvm tools: Split blk device code from raw.c to blk.c
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (4 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 06/14] kvm tools: Consolidate disk_image__{new, new_readonly} Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 08/14] kvm tools: Tune up ops in 'struct disk_image_operations' Asias He
` (7 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/Makefile | 1 +
tools/kvm/disk/blk.c | 30 ++++++++++++++++++++++++++++++
tools/kvm/disk/raw.c | 32 ++++++--------------------------
tools/kvm/include/kvm/disk-image.h | 6 ++++++
4 files changed, 43 insertions(+), 26 deletions(-)
create mode 100644 tools/kvm/disk/blk.c
diff --git a/tools/kvm/Makefile b/tools/kvm/Makefile
index a19fbe8..ffafcba 100644
--- a/tools/kvm/Makefile
+++ b/tools/kvm/Makefile
@@ -39,6 +39,7 @@ OBJS += kvm-run.o
OBJS += disk/qcow.o
OBJS += disk/core.o
OBJS += disk/raw.o
+OBJS += disk/blk.o
OBJS += mptable.o
OBJS += threadpool.o
OBJS += irq.o
diff --git a/tools/kvm/disk/blk.c b/tools/kvm/disk/blk.c
new file mode 100644
index 0000000..ece4d2a
--- /dev/null
+++ b/tools/kvm/disk/blk.c
@@ -0,0 +1,30 @@
+#include "kvm/disk-image.h"
+
+/*
+ * raw image and blk dev are similar, so reuse raw image ops.
+ */
+static struct disk_image_operations raw_image_ro_mmap_ops = {
+ .read_sector = raw_image__read_sector_ro_mmap,
+ .write_sector = raw_image__write_sector_ro_mmap,
+ .close = raw_image__close_ro_mmap,
+};
+
+struct disk_image *blkdev__probe(const char *filename, struct stat *st)
+{
+ u64 size;
+ int fd;
+
+ if (!S_ISBLK(st->st_mode))
+ return NULL;
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return NULL;
+
+ if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
+ close(fd);
+ return NULL;
+ }
+
+ return disk_image__new(fd, size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
+}
diff --git a/tools/kvm/disk/raw.c b/tools/kvm/disk/raw.c
index a419c32..8ee7e3f 100644
--- a/tools/kvm/disk/raw.c
+++ b/tools/kvm/disk/raw.c
@@ -1,20 +1,20 @@
#include "kvm/disk-image.h"
-static ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
u64 offset = sector << SECTOR_SHIFT;
return preadv_in_full(disk->fd, iov, iovcount, offset);
}
-static ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
+ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
u64 offset = sector << SECTOR_SHIFT;
return pwritev_in_full(disk->fd, iov, iovcount, offset);
}
-static int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
+int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -26,7 +26,7 @@ static int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, v
return 0;
}
-static int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -38,7 +38,7 @@ static int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector,
return 0;
}
-static void raw_image__close_ro_mmap(struct disk_image *disk)
+void raw_image__close_ro_mmap(struct disk_image *disk)
{
if (disk->priv != MAP_FAILED)
munmap(disk->priv, disk->size);
@@ -46,7 +46,7 @@ static void raw_image__close_ro_mmap(struct disk_image *disk)
static struct disk_image_operations raw_image_ops = {
.read_sector_iov = raw_image__read_sector_iov,
- .write_sector_iov = raw_image__write_sector_iov
+ .write_sector_iov = raw_image__write_sector_iov,
};
static struct disk_image_operations raw_image_ro_mmap_ops = {
@@ -70,23 +70,3 @@ struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
*/
return disk_image__new(fd, st->st_size, &raw_image_ops, DISK_IMAGE_NOMMAP);
}
-
-struct disk_image *blkdev__probe(const char *filename, struct stat *st)
-{
- u64 size;
- int fd;
-
- if (!S_ISBLK(st->st_mode))
- return NULL;
-
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- return NULL;
-
- if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
- close(fd);
- return NULL;
- }
-
- return disk_image__new(fd, size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
-}
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index efa3e42..463801e 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -59,4 +59,10 @@ static inline int disk_image__flush(struct disk_image *disk)
struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly);
struct disk_image *blkdev__probe(const char *filename, struct stat *st);
+ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
+ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
+int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
+int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len);
+void raw_image__close_ro_mmap(struct disk_image *disk);
+
#endif /* KVM__DISK_IMAGE_H */
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 08/14] kvm tools: Tune up ops in 'struct disk_image_operations'
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (5 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 07/14] kvm tools: Split blk device code from raw.c to blk.c Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 09/14] kvm tools: Rename struct disk_image_operations ops name for raw image Asias He
` (6 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Make read/write ops in 'struct disk_image_operations'
always return the number of bytes read/written and close/flush
ops return int.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 8 +++++---
tools/kvm/disk/qcow.c | 18 ++++++++++--------
tools/kvm/disk/raw.c | 16 ++++++++++------
tools/kvm/include/kvm/disk-image.h | 22 +++++++++++++++-------
4 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 2990caa..a0ccdc5 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -55,19 +55,21 @@ struct disk_image *disk_image__open(const char *filename, bool readonly)
return NULL;
}
-void disk_image__close(struct disk_image *disk)
+int disk_image__close(struct disk_image *disk)
{
/* If there was no disk image then there's nothing to do: */
if (!disk)
- return;
+ return 0;
if (disk->ops->close)
- disk->ops->close(disk);
+ return disk->ops->close(disk);
if (close(disk->fd) < 0)
warning("close() failed");
free(disk);
+
+ return 0;
}
/* Fill iov with disk data, starting from sector 'sector'. Return amount of bytes read. */
diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
index b29efb4..956775e 100644
--- a/tools/kvm/disk/qcow.c
+++ b/tools/kvm/disk/qcow.c
@@ -103,7 +103,7 @@ out_error:
goto out;
}
-static int qcow1_read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
+static ssize_t qcow1_read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
{
struct qcow *q = disk->priv;
struct qcow_header *header = q->header;
@@ -129,7 +129,7 @@ static int qcow1_read_sector(struct disk_image *disk, u64 sector, void *dst, u32
sector += (nr >> SECTOR_SHIFT);
}
- return 0;
+ return dst_len;
}
static inline u64 file_size(int fd)
@@ -291,7 +291,7 @@ error:
return -1;
}
-static int qcow1_write_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+static ssize_t qcow1_write_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
struct qcow *q = disk->priv;
struct qcow_header *header = q->header;
@@ -317,33 +317,35 @@ static int qcow1_write_sector(struct disk_image *disk, u64 sector, void *src, u3
offset += nr;
}
- return 0;
+ return nr_written;
}
-static int qcow1_nowrite_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+static ssize_t qcow1_nowrite_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
/* I/O error */
return -1;
}
-static void qcow1_disk_close(struct disk_image *disk)
+static int qcow1_disk_close(struct disk_image *disk)
{
struct qcow *q;
if (!disk)
- return;
+ return 0;
q = disk->priv;
free(q->table.l1_table);
free(q->header);
free(q);
+
+ return 0;
}
static struct disk_image_operations qcow1_disk_readonly_ops = {
.read_sector = qcow1_read_sector,
.write_sector = qcow1_nowrite_sector,
- .close = qcow1_disk_close
+ .close = qcow1_disk_close,
};
static struct disk_image_operations qcow1_disk_ops = {
diff --git a/tools/kvm/disk/raw.c b/tools/kvm/disk/raw.c
index 8ee7e3f..b58837b 100644
--- a/tools/kvm/disk/raw.c
+++ b/tools/kvm/disk/raw.c
@@ -14,7 +14,7 @@ ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const s
return pwritev_in_full(disk->fd, iov, iovcount, offset);
}
-int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
+ssize_t raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -23,10 +23,10 @@ int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *ds
memcpy(dst, disk->priv + offset, dst_len);
- return 0;
+ return dst_len;
}
-int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+ssize_t raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -35,13 +35,17 @@ int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *s
memcpy(disk->priv + offset, src, src_len);
- return 0;
+ return src_len;
}
-void raw_image__close_ro_mmap(struct disk_image *disk)
+int raw_image__close_ro_mmap(struct disk_image *disk)
{
+ int ret = 0;
+
if (disk->priv != MAP_FAILED)
- munmap(disk->priv, disk->size);
+ ret = munmap(disk->priv, disk->size);
+
+ return ret;
}
static struct disk_image_operations raw_image_ops = {
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index 463801e..6531a93 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -27,12 +27,20 @@
struct disk_image;
struct disk_image_operations {
- int (*read_sector)(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
- int (*write_sector)(struct disk_image *disk, u64 sector, void *src, u32 src_len);
+ /*
+ * The following two are used for reading or writing with a single buffer.
+ * The implentation can use readv/writev or memcpy.
+ */
+ ssize_t (*read_sector)(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
+ ssize_t (*write_sector)(struct disk_image *disk, u64 sector, void *src, u32 src_len);
+ /*
+ * The following two are used for reading or writing with multiple buffers.
+ * The implentation can use readv/writev or memcpy.
+ */
ssize_t (*read_sector_iov)(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t (*write_sector_iov)(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
int (*flush)(struct disk_image *disk);
- void (*close)(struct disk_image *disk);
+ int (*close)(struct disk_image *disk);
};
struct disk_image {
@@ -44,7 +52,7 @@ struct disk_image {
struct disk_image *disk_image__open(const char *filename, bool readonly);
struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops, int mmap);
-void disk_image__close(struct disk_image *disk);
+int disk_image__close(struct disk_image *disk);
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
@@ -61,8 +69,8 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st);
ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
-int raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
-int raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len);
-void raw_image__close_ro_mmap(struct disk_image *disk);
+ssize_t raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
+ssize_t raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len);
+int raw_image__close_ro_mmap(struct disk_image *disk);
#endif /* KVM__DISK_IMAGE_H */
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 09/14] kvm tools: Rename struct disk_image_operations ops name for raw image
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (6 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 08/14] kvm tools: Tune up ops in 'struct disk_image_operations' Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops Asias He
` (5 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch renames:
raw_image__read_sector_ro_mmap to raw_image__read_sector
raw_image__write_sector_ro_mmap to raw_image__write_sector
raw_image__close_ro_mmap to raw_image__close
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/blk.c | 10 +++++-----
tools/kvm/disk/qcow.c | 2 +-
tools/kvm/disk/raw.c | 26 ++++++++++++++++----------
tools/kvm/include/kvm/disk-image.h | 6 +++---
4 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/tools/kvm/disk/blk.c b/tools/kvm/disk/blk.c
index ece4d2a..7383967 100644
--- a/tools/kvm/disk/blk.c
+++ b/tools/kvm/disk/blk.c
@@ -3,10 +3,10 @@
/*
* raw image and blk dev are similar, so reuse raw image ops.
*/
-static struct disk_image_operations raw_image_ro_mmap_ops = {
- .read_sector = raw_image__read_sector_ro_mmap,
- .write_sector = raw_image__write_sector_ro_mmap,
- .close = raw_image__close_ro_mmap,
+static struct disk_image_operations raw_image_ops = {
+ .read_sector = raw_image__read_sector,
+ .write_sector = raw_image__write_sector,
+ .close = raw_image__close,
};
struct disk_image *blkdev__probe(const char *filename, struct stat *st)
@@ -26,5 +26,5 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st)
return NULL;
}
- return disk_image__new(fd, size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
+ return disk_image__new(fd, size, &raw_image_ops, DISK_IMAGE_MMAP);
}
diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
index 956775e..dd11ed97 100644
--- a/tools/kvm/disk/qcow.c
+++ b/tools/kvm/disk/qcow.c
@@ -351,7 +351,7 @@ static struct disk_image_operations qcow1_disk_readonly_ops = {
static struct disk_image_operations qcow1_disk_ops = {
.read_sector = qcow1_read_sector,
.write_sector = qcow1_write_sector,
- .close = qcow1_disk_close
+ .close = qcow1_disk_close,
};
static int qcow_read_l1_table(struct qcow *q)
diff --git a/tools/kvm/disk/raw.c b/tools/kvm/disk/raw.c
index b58837b..7f3f8db 100644
--- a/tools/kvm/disk/raw.c
+++ b/tools/kvm/disk/raw.c
@@ -14,7 +14,7 @@ ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const s
return pwritev_in_full(disk->fd, iov, iovcount, offset);
}
-ssize_t raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
+ssize_t raw_image__read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -26,7 +26,7 @@ ssize_t raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void
return dst_len;
}
-ssize_t raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len)
+ssize_t raw_image__write_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
u64 offset = sector << SECTOR_SHIFT;
@@ -38,7 +38,7 @@ ssize_t raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, voi
return src_len;
}
-int raw_image__close_ro_mmap(struct disk_image *disk)
+int raw_image__close(struct disk_image *disk)
{
int ret = 0;
@@ -48,15 +48,21 @@ int raw_image__close_ro_mmap(struct disk_image *disk)
return ret;
}
-static struct disk_image_operations raw_image_ops = {
+/*
+ * multiple buffer based disk image operations
+ */
+static struct disk_image_operations raw_image_iov_ops = {
.read_sector_iov = raw_image__read_sector_iov,
.write_sector_iov = raw_image__write_sector_iov,
};
-static struct disk_image_operations raw_image_ro_mmap_ops = {
- .read_sector = raw_image__read_sector_ro_mmap,
- .write_sector = raw_image__write_sector_ro_mmap,
- .close = raw_image__close_ro_mmap,
+/*
+ * single buffer based disk image operations
+ */
+static struct disk_image_operations raw_image_ops = {
+ .read_sector = raw_image__read_sector,
+ .write_sector = raw_image__write_sector,
+ .close = raw_image__close,
};
struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
@@ -67,10 +73,10 @@ struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly)
* Use mmap's MAP_PRIVATE to implement non-persistent write
* FIXME: This does not work on 32-bit host.
*/
- return disk_image__new(fd, st->st_size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP);
+ return disk_image__new(fd, st->st_size, &raw_image_ops, DISK_IMAGE_MMAP);
else
/*
* Use read/write instead of mmap
*/
- return disk_image__new(fd, st->st_size, &raw_image_ops, DISK_IMAGE_NOMMAP);
+ return disk_image__new(fd, st->st_size, &raw_image_iov_ops, DISK_IMAGE_NOMMAP);
}
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index 6531a93..82884fb 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -69,8 +69,8 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st);
ssize_t raw_image__read_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t raw_image__write_sector_iov(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
-ssize_t raw_image__read_sector_ro_mmap(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
-ssize_t raw_image__write_sector_ro_mmap(struct disk_image *disk, u64 sector, void *src, u32 src_len);
-int raw_image__close_ro_mmap(struct disk_image *disk);
+ssize_t raw_image__read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len);
+ssize_t raw_image__write_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len);
+int raw_image__close(struct disk_image *disk);
#endif /* KVM__DISK_IMAGE_H */
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (7 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 09/14] kvm tools: Rename struct disk_image_operations ops name for raw image Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:51 ` Ingo Molnar
2011-05-18 8:19 ` [PATCH 11/14] kvm tools: Remove unnecessary S_ISBLK check Asias He
` (4 subsequent siblings)
13 siblings, 1 reply; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
This patch also adds some comments to disk/blk.c
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/blk.c | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/tools/kvm/disk/blk.c b/tools/kvm/disk/blk.c
index 7383967..59294e8 100644
--- a/tools/kvm/disk/blk.c
+++ b/tools/kvm/disk/blk.c
@@ -3,7 +3,7 @@
/*
* raw image and blk dev are similar, so reuse raw image ops.
*/
-static struct disk_image_operations raw_image_ops = {
+static struct disk_image_operations blk_dev_ops = {
.read_sector = raw_image__read_sector,
.write_sector = raw_image__write_sector,
.close = raw_image__close,
@@ -17,7 +17,11 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st)
if (!S_ISBLK(st->st_mode))
return NULL;
- fd = open(filename, O_RDONLY);
+ /*
+ * Be careful! We are opening host block device!
+ * Open it readonly since we do not want to break user's data on disk.
+ */
+ fd = open(filename, O_RDONLY);
if (fd < 0)
return NULL;
@@ -26,5 +30,10 @@ struct disk_image *blkdev__probe(const char *filename, struct stat *st)
return NULL;
}
- return disk_image__new(fd, size, &raw_image_ops, DISK_IMAGE_MMAP);
+ /*
+ * FIXME: This will not work on 32-bit host because we can not
+ * mmap large disk. There is not enough virtual address space
+ * in 32-bit host. However, this works on 64-bit host.
+ */
+ return disk_image__new(fd, size, &blk_dev_ops, DISK_IMAGE_MMAP);
}
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 11/14] kvm tools: Remove unnecessary S_ISBLK check
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (8 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 12/14] kvm tools: Do not use 'inline' for disk_image__flush Asias He
` (3 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Let's do it in blkdev__probe.
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index a0ccdc5..6894b17 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -34,18 +34,22 @@ struct disk_image *disk_image__open(const char *filename, bool readonly)
if (stat(filename, &st) < 0)
return NULL;
- if (S_ISBLK(st.st_mode))
- return blkdev__probe(filename, &st);
+ /* blk device ?*/
+ disk = blkdev__probe(filename, &st);
+ if (disk)
+ return disk;
fd = open(filename, readonly ? O_RDONLY : O_RDWR);
if (fd < 0)
return NULL;
- disk = qcow_probe(fd, readonly);
+ /* qcow image ?*/
+ disk = qcow_probe(fd, readonly);
if (disk)
return disk;
- disk = raw_image__probe(fd, &st, readonly);
+ /* raw image ?*/
+ disk = raw_image__probe(fd, &st, readonly);
if (disk)
return disk;
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 12/14] kvm tools: Do not use 'inline' for disk_image__flush
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (9 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 11/14] kvm tools: Remove unnecessary S_ISBLK check Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 13/14] kvm tools: Add debug info for disk_image__{read, write} Asias He
` (2 subsequent siblings)
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 8 ++++++++
tools/kvm/include/kvm/disk-image.h | 9 +--------
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 6894b17..f3dd0bb 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -59,6 +59,14 @@ struct disk_image *disk_image__open(const char *filename, bool readonly)
return NULL;
}
+int disk_image__flush(struct disk_image *disk)
+{
+ if (disk->ops->flush)
+ return disk->ops->flush(disk);
+
+ return fsync(disk->fd);
+}
+
int disk_image__close(struct disk_image *disk)
{
/* If there was no disk image then there's nothing to do: */
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index 82884fb..ac394e8 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -53,17 +53,10 @@ struct disk_image {
struct disk_image *disk_image__open(const char *filename, bool readonly);
struct disk_image *disk_image__new(int fd, u64 size, struct disk_image_operations *ops, int mmap);
int disk_image__close(struct disk_image *disk);
-
+int disk_image__flush(struct disk_image *disk);
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
-static inline int disk_image__flush(struct disk_image *disk)
-{
- if (disk->ops->flush)
- return disk->ops->flush(disk);
- return fsync(disk->fd);
-}
-
struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly);
struct disk_image *blkdev__probe(const char *filename, struct stat *st);
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 13/14] kvm tools: Add debug info for disk_image__{read, write}
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (10 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 12/14] kvm tools: Do not use 'inline' for disk_image__flush Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:19 ` [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector Asias He
2011-05-18 8:42 ` [PATCH 01/14] kvm tools: Move disk image related code under disk directory Ingo Molnar
13 siblings, 0 replies; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Print debug info when read/write error occurs
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/core.c | 91 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 65 insertions(+), 26 deletions(-)
diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index f3dd0bb..b229f83 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -84,40 +84,79 @@ int disk_image__close(struct disk_image *disk)
return 0;
}
-/* Fill iov with disk data, starting from sector 'sector'. Return amount of bytes read. */
+/*
+ * Fill iov with disk data, starting from sector 'sector'.
+ * Return amount of bytes read.
+ */
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
- u64 first_sector = sector;
+ ssize_t total = 0;
+ ssize_t nr;
- if (disk->ops->read_sector_iov)
- return disk->ops->read_sector_iov(disk, sector, iov, iovcount);
-
- while (iovcount--) {
- if (disk->ops->read_sector(disk, sector, iov->iov_base, iov->iov_len) < 0)
+ if (disk->ops->read_sector_iov) {
+ /*
+ * Try mulitple buffer based operation first
+ */
+ total = disk->ops->read_sector_iov(disk, sector, iov, iovcount);
+ if (total < 0) {
+ info("disk_image__read error: total=%ld\n", (long)total);
return -1;
-
- sector += iov->iov_len >> SECTOR_SHIFT;
- iov++;
- }
-
- return (sector - first_sector) << SECTOR_SHIFT;
+ }
+ } else if (disk->ops->read_sector) {
+ /*
+ * Fallback to single buffer based operation
+ */
+ while (iovcount--) {
+ nr = disk->ops->read_sector(disk, sector, iov->iov_base, iov->iov_len);
+ if (nr != (ssize_t)iov->iov_len) {
+ info("disk_image__read error: nr = %ld iov_len=%ld\n", (long)nr, (long)iov->iov_len);
+ return -1;
+ }
+ sector += iov->iov_len >> SECTOR_SHIFT;
+ iov++;
+ total += nr;
+ }
+ } else
+ die("No disk image operation for read\n");
+
+ return total;
}
-/* Write iov to disk, starting from sector 'sector'. Return amount of bytes written. */
+/*
+ * Write iov to disk, starting from sector 'sector'.
+ * Return amount of bytes written.
+ */
ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount)
{
- u64 first_sector = sector;
+ ssize_t total = 0;
+ ssize_t nr;
- if (disk->ops->write_sector_iov)
- return disk->ops->write_sector_iov(disk, sector, iov, iovcount);
-
- while (iovcount--) {
- if (disk->ops->write_sector(disk, sector, iov->iov_base, iov->iov_len) < 0)
+ if (disk->ops->write_sector_iov) {
+ /*
+ * Try writev based operation first
+ */
+ total = disk->ops->write_sector_iov(disk, sector, iov, iovcount);
+ if (total < 0) {
+ info("disk_image__write error: total=%ld\n", (long)total);
return -1;
-
- sector += iov->iov_len >> SECTOR_SHIFT;
- iov++;
- }
-
- return (sector - first_sector) << SECTOR_SHIFT;
+ }
+ } else if (disk->ops->write_sector) {
+ /*
+ * Fallback to single buffer based operation
+ */
+ while (iovcount--) {
+ nr = disk->ops->write_sector(disk, sector, iov->iov_base, iov->iov_len);
+ if (nr != (ssize_t)iov->iov_len) {
+ info("disk_image__write error: nr=%ld iov_len=%ld\n", (long)nr, (long)iov->iov_len);
+ return -1;
+ }
+
+ sector += iov->iov_len >> SECTOR_SHIFT;
+ iov++;
+ total += nr;
+ }
+ } else
+ die("No disk image operation for read\n");
+
+ return total;
}
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (11 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 13/14] kvm tools: Add debug info for disk_image__{read, write} Asias He
@ 2011-05-18 8:19 ` Asias He
2011-05-18 8:45 ` Ingo Molnar
2011-05-18 8:42 ` [PATCH 01/14] kvm tools: Move disk image related code under disk directory Ingo Molnar
13 siblings, 1 reply; 20+ messages in thread
From: Asias He @ 2011-05-18 8:19 UTC (permalink / raw)
To: Pekka Enberg
Cc: Cyrill Gorcunov, Ingo Molnar, Sasha Levin, Prasad Joshi, kvm, Asias He
Print debug info when we are in qcow1_nowrite_sector
Signed-off-by: Asias He <asias.hejun@gmail.com>
---
tools/kvm/disk/qcow.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
index dd11ed97..29964b9 100644
--- a/tools/kvm/disk/qcow.c
+++ b/tools/kvm/disk/qcow.c
@@ -323,6 +323,7 @@ static ssize_t qcow1_write_sector(struct disk_image *disk, u64 sector, void *src
static ssize_t qcow1_nowrite_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
{
/* I/O error */
+ info("qcow1_nowrite_sector: no write support\n");
return -1;
}
--
1.7.5.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 01/14] kvm tools: Move disk image related code under disk directory
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
` (12 preceding siblings ...)
2011-05-18 8:19 ` [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector Asias He
@ 2011-05-18 8:42 ` Ingo Molnar
2011-05-18 8:43 ` Ingo Molnar
13 siblings, 1 reply; 20+ messages in thread
From: Ingo Molnar @ 2011-05-18 8:42 UTC (permalink / raw)
To: Asias He; +Cc: Pekka Enberg, Cyrill Gorcunov, Sasha Levin, Prasad Joshi, kvm
* Asias He <asias.hejun@gmail.com> wrote:
> This patch removes disk-image.c and qcow.c under disk directory.
>
> Signed-off-by: Asias He <asias.hejun@gmail.com>
> ---
> tools/kvm/Makefile | 4 ++--
> tools/kvm/{ => disk}/disk-image.c | 0
btw., you may want to name it 'image.c' and thus have the intuitive:
tools/kvm/disk-image.c =>
tools/kvm/disk/image.c
replacement instead of tools/kvm/disk/disk-image.c which repeats 'disk' twice.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 01/14] kvm tools: Move disk image related code under disk directory
2011-05-18 8:42 ` [PATCH 01/14] kvm tools: Move disk image related code under disk directory Ingo Molnar
@ 2011-05-18 8:43 ` Ingo Molnar
0 siblings, 0 replies; 20+ messages in thread
From: Ingo Molnar @ 2011-05-18 8:43 UTC (permalink / raw)
To: Asias He; +Cc: Pekka Enberg, Cyrill Gorcunov, Sasha Levin, Prasad Joshi, kvm
* Ingo Molnar <mingo@elte.hu> wrote:
>
> * Asias He <asias.hejun@gmail.com> wrote:
>
> > This patch removes disk-image.c and qcow.c under disk directory.
> >
> > Signed-off-by: Asias He <asias.hejun@gmail.com>
> > ---
> > tools/kvm/Makefile | 4 ++--
> > tools/kvm/{ => disk}/disk-image.c | 0
>
> btw., you may want to name it 'image.c' and thus have the intuitive:
>
> tools/kvm/disk-image.c =>
> tools/kvm/disk/image.c
>
> replacement instead of tools/kvm/disk/disk-image.c which repeats 'disk' twice.
oh, stupid me: you rename it to core.c in patch #2!
I should really do what i do normally, read patch series from the end backwards
;-)
Thanks,
Ingo
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector
2011-05-18 8:19 ` [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector Asias He
@ 2011-05-18 8:45 ` Ingo Molnar
2011-05-18 8:46 ` Ingo Molnar
2011-05-18 8:47 ` Cyrill Gorcunov
0 siblings, 2 replies; 20+ messages in thread
From: Ingo Molnar @ 2011-05-18 8:45 UTC (permalink / raw)
To: Asias He; +Cc: Pekka Enberg, Cyrill Gorcunov, Sasha Levin, Prasad Joshi, kvm
* Asias He <asias.hejun@gmail.com> wrote:
> Print debug info when we are in qcow1_nowrite_sector
>
> Signed-off-by: Asias He <asias.hejun@gmail.com>
> ---
> tools/kvm/disk/qcow.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
> index dd11ed97..29964b9 100644
> --- a/tools/kvm/disk/qcow.c
> +++ b/tools/kvm/disk/qcow.c
> @@ -323,6 +323,7 @@ static ssize_t qcow1_write_sector(struct disk_image *disk, u64 sector, void *src
> static ssize_t qcow1_nowrite_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
> {
> /* I/O error */
> + info("qcow1_nowrite_sector: no write support\n");
Could we make this pr_info(), to roughly match the in-kernel equivalent?
There's also pr_warn(), pr_err(), etc.
For us poor kernel namespace infested folks :)
Thanks,
Ingo
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector
2011-05-18 8:45 ` Ingo Molnar
@ 2011-05-18 8:46 ` Ingo Molnar
2011-05-18 8:47 ` Cyrill Gorcunov
1 sibling, 0 replies; 20+ messages in thread
From: Ingo Molnar @ 2011-05-18 8:46 UTC (permalink / raw)
To: Asias He; +Cc: Pekka Enberg, Cyrill Gorcunov, Sasha Levin, Prasad Joshi, kvm
* Ingo Molnar <mingo@elte.hu> wrote:
> Could we make this pr_info(), to roughly match the in-kernel equivalent?
>
> There's also pr_warn(), pr_err(), etc.
>
> For us poor kernel namespace infested folks :)
btw., if it's fine with Pekka: because you are already carrying a large number
of patches my suggestions could be done on top, no need to redo the series.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector
2011-05-18 8:45 ` Ingo Molnar
2011-05-18 8:46 ` Ingo Molnar
@ 2011-05-18 8:47 ` Cyrill Gorcunov
1 sibling, 0 replies; 20+ messages in thread
From: Cyrill Gorcunov @ 2011-05-18 8:47 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Asias He, Pekka Enberg, Sasha Levin, Prasad Joshi, kvm
On Wed, May 18, 2011 at 12:45 PM, Ingo Molnar <mingo@elte.hu> wrote:
>
> * Asias He <asias.hejun@gmail.com> wrote:
>
>> Print debug info when we are in qcow1_nowrite_sector
>>
>> Signed-off-by: Asias He <asias.hejun@gmail.com>
>> ---
>> tools/kvm/disk/qcow.c | 1 +
>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c
>> index dd11ed97..29964b9 100644
>> --- a/tools/kvm/disk/qcow.c
>> +++ b/tools/kvm/disk/qcow.c
>> @@ -323,6 +323,7 @@ static ssize_t qcow1_write_sector(struct disk_image *disk, u64 sector, void *src
>> static ssize_t qcow1_nowrite_sector(struct disk_image *disk, u64 sector, void *src, u32 src_len)
>> {
>> /* I/O error */
>> + info("qcow1_nowrite_sector: no write support\n");
>
> Could we make this pr_info(), to roughly match the in-kernel equivalent?
>
> There's also pr_warn(), pr_err(), etc.
>
> For us poor kernel namespace infested folks :)
>
> Thanks,
>
> Ingo
>
It's my fault Ingo, I've introduced them. Will fix them at evening, ok?
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops
2011-05-18 8:19 ` [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops Asias He
@ 2011-05-18 8:51 ` Ingo Molnar
0 siblings, 0 replies; 20+ messages in thread
From: Ingo Molnar @ 2011-05-18 8:51 UTC (permalink / raw)
To: Asias He; +Cc: Pekka Enberg, Cyrill Gorcunov, Sasha Levin, Prasad Joshi, kvm
* Asias He <asias.hejun@gmail.com> wrote:
> - fd = open(filename, O_RDONLY);
> + /*
> + * Be careful! We are opening host block device!
> + * Open it readonly since we do not want to break user's data on disk.
> + */
> + fd = open(filename, O_RDONLY);
> if (fd < 0)
> return NULL;
btw., this is a repeating pattern i noticed: you align assignment vertically
even if it's a stand-alone assignment.
We want to apply vertical alignment only when it helps readability - and
repeated assingments such as:
*job = (struct thread_pool__job) {
.kvm = kvm,
.data = data,
.callback = callback,
.mutex = PTHREAD_MUTEX_INITIALIZER
};
indeed look *much* better when aligned vertically. Same goes for structure
definitions. Thanks for applying those concepts uniformly around tools/kvm/,
it makes the code visibly more pleasant to read.
But the above standalone assignment of 'fd' does not seem to be such a case:
the right side of the assignment just 'floats' freely in space with no other
similar assingment next to it giving it structure.
Thus the old-fashioned:
fd = open(filename, O_RDONLY);
if (fd < 0)
return NULL;
is a lot more readable form IMO.
There's many similar examples of isolated assignments looking weird, all around
the code.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2011-05-18 8:52 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-18 8:19 [PATCH 01/14] kvm tools: Move disk image related code under disk directory Asias He
2011-05-18 8:19 ` [PATCH 02/14] kvm tools: Rename disk-image.c to core.c Asias He
2011-05-18 8:19 ` [PATCH 03/14] kvm tools: Split raw image and blk device code from disk/core.c Asias He
2011-05-18 8:19 ` [PATCH 04/14] kvm tools: Rename disk_image__{read, write}_sector_iov Asias He
2011-05-18 8:19 ` [PATCH 05/14] kvm tools: Remove dead coe disk_image__{read, write}_sector Asias He
2011-05-18 8:19 ` [PATCH 06/14] kvm tools: Consolidate disk_image__{new, new_readonly} Asias He
2011-05-18 8:19 ` [PATCH 07/14] kvm tools: Split blk device code from raw.c to blk.c Asias He
2011-05-18 8:19 ` [PATCH 08/14] kvm tools: Tune up ops in 'struct disk_image_operations' Asias He
2011-05-18 8:19 ` [PATCH 09/14] kvm tools: Rename struct disk_image_operations ops name for raw image Asias He
2011-05-18 8:19 ` [PATCH 10/14] kvm tools: Rename raw_image_ops to blk_dev_ops Asias He
2011-05-18 8:51 ` Ingo Molnar
2011-05-18 8:19 ` [PATCH 11/14] kvm tools: Remove unnecessary S_ISBLK check Asias He
2011-05-18 8:19 ` [PATCH 12/14] kvm tools: Do not use 'inline' for disk_image__flush Asias He
2011-05-18 8:19 ` [PATCH 13/14] kvm tools: Add debug info for disk_image__{read, write} Asias He
2011-05-18 8:19 ` [PATCH 14/14] kvm tools: Print debug info for qcow1_nowrite_sector Asias He
2011-05-18 8:45 ` Ingo Molnar
2011-05-18 8:46 ` Ingo Molnar
2011-05-18 8:47 ` Cyrill Gorcunov
2011-05-18 8:42 ` [PATCH 01/14] kvm tools: Move disk image related code under disk directory Ingo Molnar
2011-05-18 8:43 ` Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.