diff options
author | Christoph Hellwig <hch@lst.de> | 2010-01-28 15:19:12 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2010-02-10 11:57:03 -0600 |
commit | 15dc2697a51ab39a0e9da95c8ce01675c1cb7090 (patch) | |
tree | a3b937b008d6472dadca8c1d8d88745fcc8cc6bd /block.c | |
parent | eaa6c85f5df022e65a3c5c14908cd191430cbff5 (diff) |
block: saner flags filtering in bdrv_open2
Clean up the current mess about figuring out which flags to pass to the
driver. BDRV_O_FILE, BDRV_O_SNAPSHOT and BDRV_O_NO_BACKING are flags
only used by the block layer internally so filter them out directly.
Previously BDRV_O_NO_BACKING could accidentally be passed to the drivers,
but wasn't ever used.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -451,13 +451,20 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, bs->enable_write_cache = 1; bs->read_only = (flags & BDRV_O_RDWR) == 0; - if (!(flags & BDRV_O_FILE)) { - open_flags = (flags & (BDRV_O_RDWR | BDRV_O_CACHE_MASK|BDRV_O_NATIVE_AIO)); - if (bs->is_temporary) { /* snapshot should be writeable */ - open_flags |= BDRV_O_RDWR; - } - } else { - open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT); + + /* + * Clear flags that are internal to the block layer before opening the + * image. + */ + open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); + + /* + * Snapshots should be writeable. + * + * XXX(hch): and what is the point of a snapshot during a read-only open? + */ + if (!(flags & BDRV_O_FILE) && bs->is_temporary) { + open_flags |= BDRV_O_RDWR; } ret = drv->bdrv_open(bs, filename, open_flags); |