1 /* BlockDriver implementation for "raw"
3 * Copyright (C) 2010, 2013, Red Hat, Inc.
4 * Copyright (C) 2010, Blue Swirl <blauwirbel@gmail.com>
7 * Laszlo Ersek <lersek@redhat.com>
9 * Permission is hereby granted, free of charge, to any person obtaining a copy
10 * of this software and associated documentation files (the "Software"), to
11 * deal in the Software without restriction, including without limitation the
12 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
13 * sell copies of the Software, and to permit persons to whom the Software is
14 * furnished to do so, subject to the following conditions:
16 * The above copyright notice and this permission notice shall be included in
17 * all copies or substantial portions of the Software.
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28 #include "block/block_int.h"
29 #include "qemu/option.h"
31 static const QEMUOptionParameter raw_create_options
[] = {
33 .name
= BLOCK_OPT_SIZE
,
35 .help
= "Virtual disk size"
40 static TYPE
raw_reopen_prepare(BlockDriverState
*bs
)
42 return bdrv_reopen_prepare(bs
->file
);
45 static TYPE
raw_co_readv(BlockDriverState
*bs
)
47 BLKDBG_EVENT(bs
->file
, BLKDBG_READ_AIO
);
48 return bdrv_co_readv(bs
->file
);
51 static TYPE
raw_co_writev(BlockDriverState
*bs
)
53 BLKDBG_EVENT(bs
->file
, BLKDBG_WRITE_AIO
);
54 return bdrv_co_writev(bs
->file
);
57 static TYPE
raw_co_is_allocated(BlockDriverState
*bs
)
59 return bdrv_co_is_allocated(bs
->file
);
62 static TYPE
raw_co_write_zeroes(BlockDriverState
*bs
)
64 return bdrv_co_write_zeroes(bs
->file
);
67 static TYPE
raw_co_discard(BlockDriverState
*bs
)
69 return bdrv_co_discard(bs
->file
);
72 static TYPE
raw_getlength(BlockDriverState
*bs
)
74 return bdrv_getlength(bs
->file
);
77 static TYPE
raw_get_info(BlockDriverState
*bs
)
79 return bdrv_get_info(bs
->file
);
82 static TYPE
raw_truncate(BlockDriverState
*bs
)
84 return bdrv_truncate(bs
->file
);
87 static TYPE
raw_is_inserted(BlockDriverState
*bs
)
89 return bdrv_is_inserted(bs
->file
);
92 static TYPE
raw_media_changed(BlockDriverState
*bs
)
94 return bdrv_media_changed(bs
->file
);
97 static TYPE
raw_eject(BlockDriverState
*bs
)
99 return bdrv_eject(bs
->file
);
102 static TYPE
raw_lock_medium(BlockDriverState
*bs
)
104 return bdrv_lock_medium(bs
->file
);
107 static TYPE
raw_ioctl(BlockDriverState
*bs
)
109 return bdrv_ioctl(bs
->file
);
112 static TYPE
raw_aio_ioctl(BlockDriverState
*bs
)
114 return bdrv_aio_ioctl(bs
->file
);
117 static TYPE
raw_has_zero_init(BlockDriverState
*bs
)
119 return bdrv_has_zero_init(bs
->file
);
122 static TYPE
raw_create(void)
124 return bdrv_create_file();
127 static const char *raw_format_name(void)
132 static int raw_open(BlockDriverState
*bs
)
134 bs
->sg
= bs
->file
->sg
;
138 static void raw_close(void)
142 static int raw_probe(void)
144 /* smallest possible positive score so that raw is used if and only if no
145 * other block driver works