* Re: [PATCH] virtio_blk: Dont waste major numbers
[not found] ` <200801311553.53653.borntraeger__25311.9055800655$1201791369$gmane$org-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
@ 2008-01-31 21:50 ` Anthony Liguori
[not found] ` <47A242B1.40709-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-03-20 17:38 ` [PATCH] virtio_blk: Dont waste major numbers H. Peter Anvin
0 siblings, 2 replies; 7+ messages in thread
From: Anthony Liguori @ 2008-01-31 21:50 UTC (permalink / raw)
To: Christian Borntraeger
Cc: kvm-devel,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA
Christian Borntraeger wrote:
> Rusty,
>
> currently virtio_blk uses one major number per device. While this works
> quite well on most systems it is wasteful and will exhaust major numbers
> on larger installations.
>
> This patch allocates a major number on init and will use 16 minor numbers
> for each disk. That will allow ~64k virtio_blk disks.
>
There's are some other limitations to the number of virtio block
devices. For instances...
> sprintf(vblk->disk->disk_name, "vd%c", virtblk_index++);
This gets bogus after 64 disks. We also have a hard limit for
virtio-pci based on the number of PCI slots available. One thing I was
considering was whether we should try to support multiple disks per
virtio device.
Otherwise, this patch looks good to me.
Regards,
Anthony Liguori
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 7+ messages in thread[parent not found: <47A242B1.40709-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>]
* Re: [PATCH] virtio_blk: Dont waste major numbers
2008-01-31 21:50 ` [PATCH] virtio_blk: Dont waste major numbers Anthony Liguori
[not found] ` <47A242B1.40709-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
@ 2008-03-20 17:38 ` H. Peter Anvin
1 sibling, 0 replies; 7+ messages in thread
From: H. Peter Anvin @ 2008-03-20 17:38 UTC (permalink / raw)
To: Anthony Liguori; +Cc: kvm-devel, Christian Borntraeger, virtualization
Anthony Liguori wrote:
> Christian Borntraeger wrote:
>> Rusty,
>>
>> currently virtio_blk uses one major number per device. While this works
>> quite well on most systems it is wasteful and will exhaust major numbers
>> on larger installations.
>>
>> This patch allocates a major number on init and will use 16 minor numbers
>> for each disk. That will allow ~64k virtio_blk disks.
>>
>
> There's are some other limitations to the number of virtio block
> devices. For instances...
>
>> sprintf(vblk->disk->disk_name, "vd%c", virtblk_index++);
>
> This gets bogus after 64 disks. We also have a hard limit for
> virtio-pci based on the number of PCI slots available. One thing I was
> considering was whether we should try to support multiple disks per
> virtio device.
>
I would much rather prefer a /dev/vd/dXpY naming scheme, similar to
cciss and other large disk installations.
Unfortunately yet another side effect of people not habitually
registering major numbers is that the namespace is not as well maintained.
-hpa
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] virtio_blk: Dont waste major numbers
@ 2008-01-31 14:53 Christian Borntraeger
2008-03-20 17:36 ` H. Peter Anvin
0 siblings, 1 reply; 7+ messages in thread
From: Christian Borntraeger @ 2008-01-31 14:53 UTC (permalink / raw)
To: Rusty Russell
Cc: kvm-devel,
virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA
Rusty,
currently virtio_blk uses one major number per device. While this works
quite well on most systems it is wasteful and will exhaust major numbers
on larger installations.
This patch allocates a major number on init and will use 16 minor numbers
for each disk. That will allow ~64k virtio_blk disks.
Signed-off-by: Christian Borntraeger <borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
---
drivers/block/virtio_blk.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
Index: kvm/drivers/block/virtio_blk.c
===================================================================
--- kvm.orig/drivers/block/virtio_blk.c
+++ kvm/drivers/block/virtio_blk.c
@@ -7,10 +7,13 @@
#include <linux/scatterlist.h>
#define VIRTIO_MAX_SG (3+MAX_PHYS_SEGMENTS)
+#define PART_BITS 4
MODULE_LICENSE("GPL");
static unsigned char virtblk_index = 'a';
+static int major, minor;
+
struct virtio_blk
{
spinlock_t lock;
@@ -173,10 +176,13 @@ static struct block_device_operations vi
static int virtblk_probe(struct virtio_device *vdev)
{
struct virtio_blk *vblk;
- int err, major;
+ int err;
u64 cap;
u32 v;
+ if (minor >= 1 << MINORBITS)
+ return -ENOSPC;
+
vdev->priv = vblk = kmalloc(sizeof(*vblk), GFP_KERNEL);
if (!vblk) {
err = -ENOMEM;
@@ -200,17 +206,11 @@ static int virtblk_probe(struct virtio_d
goto out_free_vq;
}
- major = register_blkdev(0, "virtblk");
- if (major < 0) {
- err = major;
- goto out_mempool;
- }
-
/* FIXME: How many partitions? How long is a piece of string? */
- vblk->disk = alloc_disk(1 << 4);
+ vblk->disk = alloc_disk(1 << PART_BITS);
if (!vblk->disk) {
err = -ENOMEM;
- goto out_unregister_blkdev;
+ goto out_mempool;
}
vblk->disk->queue = blk_init_queue(do_virtblk_request, &vblk->lock);
@@ -221,10 +221,12 @@ static int virtblk_probe(struct virtio_d
sprintf(vblk->disk->disk_name, "vd%c", virtblk_index++);
vblk->disk->major = major;
- vblk->disk->first_minor = 0;
+ vblk->disk->first_minor = minor;
vblk->disk->private_data = vblk;
vblk->disk->fops = &virtblk_fops;
+ minor += 1 << PART_BITS;
+
/* If barriers are supported, tell block layer that queue is ordered */
if (vdev->config->feature(vdev, VIRTIO_BLK_F_BARRIER))
blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL);
@@ -260,8 +262,6 @@ static int virtblk_probe(struct virtio_d
out_put_disk:
put_disk(vblk->disk);
-out_unregister_blkdev:
- unregister_blkdev(major, "virtblk");
out_mempool:
mempool_destroy(vblk->pool);
out_free_vq:
@@ -302,11 +302,15 @@ static struct virtio_driver virtio_blk =
static int __init init(void)
{
+ major = register_blkdev(0, "virtblk");
+ if (major < 0)
+ return major;
return register_virtio_driver(&virtio_blk);
}
static void __exit fini(void)
{
+ unregister_blkdev(major, "virtblk");
unregister_virtio_driver(&virtio_blk);
}
module_init(init);
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] virtio_blk: Dont waste major numbers
2008-01-31 14:53 Christian Borntraeger
@ 2008-03-20 17:36 ` H. Peter Anvin
0 siblings, 0 replies; 7+ messages in thread
From: H. Peter Anvin @ 2008-03-20 17:36 UTC (permalink / raw)
To: Christian Borntraeger; +Cc: kvm-devel, virtualization
Christian Borntraeger wrote:
> Rusty,
>
> currently virtio_blk uses one major number per device. While this works
> quite well on most systems it is wasteful and will exhaust major numbers
> on larger installations.
>
> This patch allocates a major number on init and will use 16 minor numbers
> for each disk. That will allow ~64k virtio_blk disks.
>
Would it be too much to allow 64 minors (63 partitions)? I have run out
of 16, myself, but never 64.
-hpa
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-03-20 17:38 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200801311553.53653.borntraeger__25311.9055800655$1201791369$gmane$org@de.ibm.com>
[not found] ` <200801311553.53653.borntraeger__25311.9055800655$1201791369$gmane$org-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-01-31 21:50 ` [PATCH] virtio_blk: Dont waste major numbers Anthony Liguori
[not found] ` <47A242B1.40709-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2008-02-01 7:33 ` Christian Borntraeger
[not found] ` <200802010833.51809.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-02-01 8:05 ` [Patch] virtio_blk: implement naming for vda-vdz, vdaa-vdzz, vdaaa-vdzzz Christian Borntraeger
[not found] ` <200802010905.00336.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2008-02-04 12:36 ` Rusty Russell
2008-03-20 17:38 ` [PATCH] virtio_blk: Dont waste major numbers H. Peter Anvin
2008-01-31 14:53 Christian Borntraeger
2008-03-20 17:36 ` H. Peter Anvin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox