qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [4836] Add a parameter to disable host cache, by Laurent Vi


From: Thiemo Seufer
Subject: [Qemu-devel] [4836] Add a parameter to disable host cache, by Laurent Vivier.
Date: Thu, 03 Jul 2008 11:47:47 +0000

Revision: 4836
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4836
Author:   ths
Date:     2008-07-03 11:47:46 +0000 (Thu, 03 Jul 2008)

Log Message:
-----------
Add a parameter to disable host cache, by Laurent Vivier.

Modified Paths:
--------------
    trunk/Makefile
    trunk/block-raw-posix.c
    trunk/nbd.c
    trunk/nbd.h
    trunk/qemu-nbd.c
    trunk/qemu-nbd.texi

Modified: trunk/Makefile
===================================================================
--- trunk/Makefile      2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/Makefile      2008-07-03 11:47:46 UTC (rev 4836)
@@ -177,8 +177,11 @@
 %.o: %.c
        $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
 
+qemu-nbd-%.o: %.c
+       $(CC) $(CFLAGS) $(CPPFLAGS) -DQEMU_NBD -c -o $@ $<
+
 qemu-nbd$(EXESUF):  qemu-nbd.o nbd.o qemu-img-block.o \
-                   $(QEMU_IMG_BLOCK_OBJS)
+                   osdep.o qemu-nbd-block-raw-posix.o $(BLOCK_OBJS)
        $(CC) $(LDFLAGS) -o $@ $^ -lz $(LIBS)
 
 # dyngen host tool

Modified: trunk/block-raw-posix.c
===================================================================
--- trunk/block-raw-posix.c     2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/block-raw-posix.c     2008-07-03 11:47:46 UTC (rev 4836)
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu-common.h"
-#ifndef QEMU_IMG
+#if !defined(QEMU_IMG) && !defined(QEMU_NBD)
 #include "qemu-timer.h"
 #include "exec-all.h"
 #endif
@@ -59,7 +59,7 @@
 //#define DEBUG_FLOPPY
 
 //#define DEBUG_BLOCK
-#if defined(DEBUG_BLOCK) && !defined(QEMU_IMG)
+#if defined(DEBUG_BLOCK) && !defined(QEMU_IMG) && !defined(QEMU_NBD)
 #define DEBUG_BLOCK_PRINT(formatCstr, args...) do { if (loglevel != 0) \
     { fprintf(logfile, formatCstr, ##args); fflush(logfile); } } while (0)
 #else
@@ -434,7 +434,7 @@
 
 static void aio_signal_handler(int signum)
 {
-#ifndef QEMU_IMG
+#if !defined(QEMU_IMG) && !defined(QEMU_NBD)
     CPUState *env = cpu_single_env;
     if (env) {
         /* stop the currently executing cpu because a timer occured */
@@ -544,7 +544,7 @@
     sigset_t set;
     int nb_sigs;
 
-#ifndef QEMU_IMG
+#if !defined(QEMU_IMG) && !defined(QEMU_NBD)
     if (qemu_bh_poll())
         return;
 #endif
@@ -586,7 +586,7 @@
     return acb;
 }
 
-#ifndef QEMU_IMG
+#if !defined(QEMU_IMG) && !defined(QEMU_NBD)
 static void raw_aio_em_cb(void* opaque)
 {
     RawAIOCB *acb = opaque;
@@ -605,7 +605,7 @@
      * If O_DIRECT is used and the buffer is not aligned fall back
      * to synchronous IO.
      */
-#if defined(O_DIRECT) && !defined(QEMU_IMG)
+#if defined(O_DIRECT) && !defined(QEMU_IMG) && !defined(QEMU_NBD)
     BDRVRawState *s = bs->opaque;
 
     if (unlikely(s->aligned_buf != NULL && ((uintptr_t) buf % 512))) {
@@ -638,7 +638,7 @@
      * If O_DIRECT is used and the buffer is not aligned fall back
      * to synchronous IO.
      */
-#if defined(O_DIRECT) && !defined(QEMU_IMG)
+#if defined(O_DIRECT) && !defined(QEMU_IMG) && !defined(QEMU_NBD)
     BDRVRawState *s = bs->opaque;
 
     if (unlikely(s->aligned_buf != NULL && ((uintptr_t) buf % 512))) {
@@ -941,7 +941,7 @@
     return 0;
 }
 
-#if defined(__linux__) && !defined(QEMU_IMG)
+#if defined(__linux__) && !defined(QEMU_IMG) && !defined(QEMU_NBD)
 
 /* Note: we do not have a reliable method to detect if the floppy is
    present. The current method is to try to open the floppy at every

Modified: trunk/nbd.c
===================================================================
--- trunk/nbd.c 2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/nbd.c 2008-07-03 11:47:46 UTC (rev 4836)
@@ -404,13 +404,9 @@
        return ret;
 }
 
-int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset, 
off_t *offset, bool readonly)
+int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset,
+             off_t *offset, bool readonly, uint8_t *data, int data_size)
 {
-#ifndef _REENTRANT
-       static uint8_t data[1024 * 1024]; // keep this off of the stack
-#else
-       uint8_t data[1024 * 1024];
-#endif
        uint8_t buf[4 + 4 + 8 + 8 + 4];
        uint32_t magic;
        uint32_t type;
@@ -449,9 +445,9 @@
                return -1;
        }
 
-       if (len > sizeof(data)) {
-               LOG("len (%u) is larger than max len (%lu)",
-                   len, (unsigned long)sizeof(data));
+       if (len > data_size) {
+               LOG("len (%u) is larger than max len (%u)",
+                   len, data_size);
                errno = EINVAL;
                return -1;
        }

Modified: trunk/nbd.h
===================================================================
--- trunk/nbd.h 2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/nbd.h 2008-07-03 11:47:46 UTC (rev 4836)
@@ -33,7 +33,8 @@
 int nbd_negotiate(BlockDriverState *bs, int csock, off_t size);
 int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize);
 int nbd_init(int fd, int csock, off_t size, size_t blocksize);
-int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset, 
off_t *offset, bool readonly);
+int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset,
+             off_t *offset, bool readonly, uint8_t *data, int data_size);
 int nbd_client(int fd, int csock);
 int nbd_disconnect(int fd);
 

Modified: trunk/qemu-nbd.c
===================================================================
--- trunk/qemu-nbd.c    2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/qemu-nbd.c    2008-07-03 11:47:46 UTC (rev 4836)
@@ -34,6 +34,8 @@
 
 #define SOCKET_PATH    "/var/lock/qemu-nbd-%s"
 
+#define NBD_BUFFER_SIZE (1024*1024)
+
 int verbose;
 
 static void usage(const char *name)
@@ -49,6 +51,8 @@
 "                       (default '"SOCKET_PATH"')\n"
 "  -r, --read-only      export read-only\n"
 "  -P, --partition=NUM  only expose partition NUM\n"
+"  -s, --snapshot       use snapshot file\n"
+"  -n, --nocache        disable host cache\n"
 "  -c, --connect=DEV    connect FILE to the local NBD device DEV\n"
 "  -d, --disconnect     disconnect the specified device\n"
 "  -v, --verbose        display extra debugging information\n"
@@ -185,7 +189,7 @@
     char *device = NULL;
     char *socket = NULL;
     char sockpath[128];
-    const char *sopt = "hVbo:p:rsP:c:dvk:";
+    const char *sopt = "hVbo:p:rsnP:c:dvk:";
     struct option lopt[] = {
         { "help", 0, 0, 'h' },
         { "version", 0, 0, 'V' },
@@ -198,6 +202,7 @@
         { "connect", 1, 0, 'c' },
         { "disconnect", 0, 0, 'd' },
         { "snapshot", 0, 0, 's' },
+        { "nocache", 0, 0, 'n' },
         { "verbose", 0, 0, 'v' },
         { NULL, 0, 0, 0 }
     };
@@ -205,16 +210,20 @@
     int opt_ind = 0;
     int li;
     char *end;
-    bool snapshot = false;
+    int flags = 0;
     int partition = -1;
     int fd;
     int ret;
+    uint8_t *data;
 
     while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) {
         switch (ch) {
         case 's':
-            snapshot = true;
+            flags |= BDRV_O_SNAPSHOT;
             break;
+        case 'n':
+            flags |= BDRV_O_DIRECT;
+            break;
         case 'b':
             bindto = optarg;
             break;
@@ -301,7 +310,7 @@
     if (bs == NULL)
         return 1;
 
-    if (bdrv_open(bs, argv[optind], snapshot) == -1)
+    if (bdrv_open(bs, argv[optind], flags) == -1)
         return 1;
 
     fd_size = bs->total_sectors * 512;
@@ -394,7 +403,10 @@
     if (nbd_negotiate(bs, csock, fd_size) == -1)
         return 1;
 
-    while (nbd_trip(bs, csock, fd_size, dev_offset, &offset, readonly) == 0);
+    data = qemu_memalign(512, NBD_BUFFER_SIZE);
+    while (nbd_trip(bs, csock, fd_size, dev_offset, &offset, readonly,
+                    data, NBD_BUFFER_SIZE) == 0);
+    qemu_free(data);
 
     close(csock);
     close(sock);

Modified: trunk/qemu-nbd.texi
===================================================================
--- trunk/qemu-nbd.texi 2008-07-03 11:29:15 UTC (rev 4835)
+++ trunk/qemu-nbd.texi 2008-07-03 11:47:46 UTC (rev 4836)
@@ -26,6 +26,10 @@
   export read-only
 @item -P, --partition=NUM
   only expose partition NUM
address@hidden -s, --snapshot
+  use snapshot file
address@hidden -n, --nocache
+  disable host cache
 @item -c, --connect
   connect FILE to NBD device DEV
 @item -d, --disconnect






reply via email to

[Prev in Thread] Current Thread [Next in Thread]