block/raw-posix: Use raw_normalize_devicepath()

The filename given to qemu_open() in block/raw-posix.c should generally
have been processed by raw_normalize_devicepath(); unless we are only
probing (in which case the caller often checks whether the file is a
block device or not, and this property will be changed by
raw_normalize_devicepath() on NetBSD) or it is about a deprecated device
(i.e. floppy).

Signed-off-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Max Reitz 2015-08-12 17:33:31 +02:00 committed by Kevin Wolf
parent 137a905fdf
commit bdd03cdf5d

View File

@ -670,11 +670,17 @@ static int raw_reopen_prepare(BDRVReopenState *state,
/* If we cannot use fcntl, or fcntl failed, fall back to qemu_open() */ /* If we cannot use fcntl, or fcntl failed, fall back to qemu_open() */
if (raw_s->fd == -1) { if (raw_s->fd == -1) {
assert(!(raw_s->open_flags & O_CREAT)); const char *normalized_filename = state->bs->filename;
raw_s->fd = qemu_open(state->bs->filename, raw_s->open_flags); ret = raw_normalize_devicepath(&normalized_filename);
if (raw_s->fd == -1) { if (ret < 0) {
error_setg_errno(errp, errno, "Could not reopen file"); error_setg_errno(errp, -ret, "Could not normalize device path");
ret = -1; } else {
assert(!(raw_s->open_flags & O_CREAT));
raw_s->fd = qemu_open(normalized_filename, raw_s->open_flags);
if (raw_s->fd == -1) {
error_setg_errno(errp, errno, "Could not reopen file");
ret = -1;
}
} }
} }
@ -2314,6 +2320,12 @@ static int hdev_create(const char *filename, QemuOpts *opts,
(void)has_prefix; (void)has_prefix;
ret = raw_normalize_devicepath(&filename);
if (ret < 0) {
error_setg_errno(errp, -ret, "Could not normalize device path");
return ret;
}
/* Read out options */ /* Read out options */
total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0), total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
BDRV_SECTOR_SIZE); BDRV_SECTOR_SIZE);