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