Revision a6599793

b/block.c
439 439
    bs->drv = drv;
440 440
    bs->opaque = qemu_mallocz(drv->instance_size);
441 441

  
442
    /*
443
     * Yes, BDRV_O_NOCACHE aka O_DIRECT means we have to present a
444
     * write cache to the guest.  We do need the fdatasync to flush
445
     * out transactions for block allocations, and we maybe have a
446
     * volatile write cache in our backing device to deal with.
447
     */
448
    if (flags & (BDRV_O_CACHE_WB|BDRV_O_NOCACHE))
442
    if (flags & BDRV_O_CACHE_WB)
449 443
        bs->enable_write_cache = 1;
450 444

  
451 445
    /*
b/block/qcow2.c
229 229
    }
230 230

  
231 231
    /* alloc L2 table/refcount block cache */
232
    writethrough = ((flags & BDRV_O_CACHE_MASK) == 0);
232
    writethrough = ((flags & BDRV_O_CACHE_WB) == 0);
233 233
    s->l2_table_cache = qcow2_cache_create(bs, L2_CACHE_SIZE, writethrough);
234 234
    s->refcount_block_cache = qcow2_cache_create(bs, REFCOUNT_CACHE_SIZE,
235 235
        writethrough);
b/block/raw-posix.c
154 154
     * and O_DIRECT for no caching. */
155 155
    if ((bdrv_flags & BDRV_O_NOCACHE))
156 156
        s->open_flags |= O_DIRECT;
157
    else if (!(bdrv_flags & BDRV_O_CACHE_WB))
157
    if (!(bdrv_flags & BDRV_O_CACHE_WB))
158 158
        s->open_flags |= O_DSYNC;
159 159

  
160 160
    s->fd = -1;
b/block/raw-win32.c
88 88
    }
89 89

  
90 90
    overlapped = FILE_ATTRIBUTE_NORMAL;
91
    if ((flags & BDRV_O_NOCACHE))
92
        overlapped |= FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH;
93
    else if (!(flags & BDRV_O_CACHE_WB))
91
    if (flags & BDRV_O_NOCACHE)
92
        overlapped |= FILE_FLAG_NO_BUFFERING;
93
    if (!(flags & BDRV_O_CACHE_WB))
94 94
        overlapped |= FILE_FLAG_WRITE_THROUGH;
95 95
    s->hfile = CreateFile(filename, access_flags,
96 96
                          FILE_SHARE_READ, NULL,
......
349 349
    create_flags = OPEN_EXISTING;
350 350

  
351 351
    overlapped = FILE_ATTRIBUTE_NORMAL;
352
    if ((flags & BDRV_O_NOCACHE))
353
        overlapped |= FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH;
354
    else if (!(flags & BDRV_O_CACHE_WB))
352
    if (flags & BDRV_O_NOCACHE)
353
        overlapped |= FILE_FLAG_NO_BUFFERING;
354
    if (!(flags & BDRV_O_CACHE_WB))
355 355
        overlapped |= FILE_FLAG_WRITE_THROUGH;
356 356
    s->hfile = CreateFile(filename, access_flags,
357 357
                          FILE_SHARE_READ, NULL,
b/blockdev.c
326 326

  
327 327
    if ((buf = qemu_opt_get(opts, "cache")) != NULL) {
328 328
        if (!strcmp(buf, "off") || !strcmp(buf, "none")) {
329
            bdrv_flags |= BDRV_O_NOCACHE;
329
            bdrv_flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
330 330
        } else if (!strcmp(buf, "writeback")) {
331 331
            bdrv_flags |= BDRV_O_CACHE_WB;
332 332
        } else if (!strcmp(buf, "unsafe")) {
b/qemu-io.c
1655 1655
			flags |= BDRV_O_SNAPSHOT;
1656 1656
			break;
1657 1657
		case 'n':
1658
			flags |= BDRV_O_NOCACHE;
1658
			flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
1659 1659
			break;
1660 1660
		case 'r':
1661 1661
			readonly = 1;
......
1751 1751
			flags |= BDRV_O_SNAPSHOT;
1752 1752
			break;
1753 1753
		case 'n':
1754
			flags |= BDRV_O_NOCACHE;
1754
			flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
1755 1755
			break;
1756 1756
		case 'c':
1757 1757
			add_user_command(optarg);
b/qemu-nbd.c
238 238
            flags |= BDRV_O_SNAPSHOT;
239 239
            break;
240 240
        case 'n':
241
            flags |= BDRV_O_NOCACHE;
241
            flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
242 242
            break;
243 243
        case 'b':
244 244
            bindto = optarg;

Also available in: Unified diff