virtio_blk: allow read-only disks
Hello Rusty, sometimes it is useful to share a disk (e.g. usr). To avoid file system corruption, the disk should be mounted read-only in that case. This patch adds a new feature flag, that allows the host to specify, if the disk should be considered read-only. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Rusty Russell
parent
a16ffe93c4
commit
3ef5360954
@@ -260,6 +260,10 @@ static int virtblk_probe(struct virtio_device *vdev)
|
|||||||
if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER))
|
if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER))
|
||||||
blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL);
|
blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL);
|
||||||
|
|
||||||
|
/* If disk is read-only in the host, the guest should obey */
|
||||||
|
if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO))
|
||||||
|
set_disk_ro(vblk->disk, 1);
|
||||||
|
|
||||||
/* Host must always specify the capacity. */
|
/* Host must always specify the capacity. */
|
||||||
vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity),
|
vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity),
|
||||||
&cap, sizeof(cap));
|
&cap, sizeof(cap));
|
||||||
@@ -326,7 +330,7 @@ static struct virtio_device_id id_table[] = {
|
|||||||
|
|
||||||
static unsigned int features[] = {
|
static unsigned int features[] = {
|
||||||
VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX,
|
VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX,
|
||||||
VIRTIO_BLK_F_GEOMETRY,
|
VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct virtio_driver virtio_blk = {
|
static struct virtio_driver virtio_blk = {
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */
|
#define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */
|
||||||
#define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */
|
#define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */
|
||||||
#define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */
|
#define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */
|
||||||
|
#define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
|
||||||
|
|
||||||
struct virtio_blk_config
|
struct virtio_blk_config
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user