Michael S. Tsirkin
2012-Mar-28 10:58 UTC
[PATCH] virtio_blk: add helper function to support mass of disks naming
On Wed, Mar 28, 2012 at 02:54:43PM +0800, Ren Mingxin wrote:> Hi, > > The current virtblk's naming algorithm just supports 26^3 > disks. If there are mass of virtblks(exceeding 26^3), there > will be disks with the same name. > > According to "sd_format_disk_name()", I add function > "virtblk_name_format()" for virtblk to support mass of > disks. > > Signed-off-by: Ren Mingxin <renmx at cn.fujitsu.com>Nod. This is basically what 3e1a7ff8a0a7b948f2684930166954f9e8e776fe did. Except, maybe we should move this function into block core instead of duplicating it? Where would be a good place to put it? Jens, care to comment?> --- > virtio_blk.c | 37 +++++++++++++++++++++++++------------ > 1 file changed, 25 insertions(+), 12 deletions(-) > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > index c4a60ba..07b8bf9 100644 > --- a/drivers/block/virtio_blk.c > +++ b/drivers/block/virtio_blk.c > @@ -374,6 +374,30 @@ static int init_vq(struct virtio_blk *vblk) > return err; > } > > +static int virtblk_name_format(char *prefix, int index, char *buf, > int buflen) > +{ > + const int base = 'z' - 'a' + 1; > + char *begin = buf + strlen(prefix); > + char *begin = buf + strlen(prefix); > + char *end = buf + buflen; > + char *p; > + int unit; > + > + p = end - 1; > + *p = '\0'; > + unit = base; > + do { > + if (p == begin) > + return -EINVAL; > + *--p = 'a' + (index % unit); > + index = (index / unit) - 1; > + } while (index >= 0); > + > + memmove(begin, p, end - p); > + memcpy(buf, prefix, strlen(prefix)); > + > + return 0; > +} > + > static int __devinit virtblk_probe(struct virtio_device *vdev) > { > struct virtio_blk *vblk; > @@ -442,18 +466,7 @@ static int __devinit virtblk_probe(struct > virtio_device *vdev) > > q->queuedata = vblk; > > - if (index < 26) { > - sprintf(vblk->disk->disk_name, "vd%c", 'a' + index % 26); > - } else if (index < (26 + 1) * 26) { > - sprintf(vblk->disk->disk_name, "vd%c%c", > - 'a' + index / 26 - 1, 'a' + index % 26); > - } else { > - const unsigned int m1 = (index / 26 - 1) / 26 - 1; > - const unsigned int m2 = (index / 26 - 1) % 26; > - const unsigned int m3 = index % 26; > - sprintf(vblk->disk->disk_name, "vd%c%c%c", > - 'a' + m1, 'a' + m2, 'a' + m3); > - } > + virtblk_name_format("vd", index, vblk->disk->disk_name, > DISK_NAME_LEN); > > vblk->disk->major = major; > vblk->disk->first_minor = index_to_minor(index);
Rusty Russell
2012-Mar-29 04:40 UTC
[PATCH] virtio_blk: add helper function to support mass of disks naming
On Wed, 28 Mar 2012 12:58:21 +0200, "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Wed, Mar 28, 2012 at 02:54:43PM +0800, Ren Mingxin wrote: > > Hi, > > > > The current virtblk's naming algorithm just supports 26^3 > > disks. If there are mass of virtblks(exceeding 26^3), there > > will be disks with the same name. > > > > According to "sd_format_disk_name()", I add function > > "virtblk_name_format()" for virtblk to support mass of > > disks. > > > > Signed-off-by: Ren Mingxin <renmx at cn.fujitsu.com> > > Nod. This is basically what 3e1a7ff8a0a7b948f2684930166954f9e8e776fe > did. Except, maybe we should move this function into block core > instead of duplicating it? Where would be a good place to put it? > Jens, care to comment?Indeed. Cheers, Rusty. -- How could I marry someone with more hair than me? http://baldalex.org
Ren Mingxin
2012-Mar-29 05:36 UTC
[PATCH] virtio_blk: add helper function to support mass of disks naming
On 03/28/2012 06:58 PM, Michael S. Tsirkin wrote:> On Wed, Mar 28, 2012 at 02:54:43PM +0800, Ren Mingxin wrote: >> Hi, >> >> The current virtblk's naming algorithm just supports 26^3 >> disks. If there are mass of virtblks(exceeding 26^3), there >> will be disks with the same name. >> >> According to "sd_format_disk_name()", I add function >> "virtblk_name_format()" for virtblk to support mass of >> disks. >> >> Signed-off-by: Ren Mingxin<renmx at cn.fujitsu.com> > Nod. This is basically what 3e1a7ff8a0a7b948f2684930166954f9e8e776fe > did. Except, maybe we should move this function into block core > instead of duplicating it? Where would be a good place to put it?Yes, this was also what I thought. How about placing the "sd_format_disk_name()" as "disk_name_format()" into "block/genhd.c" ("include/linux/genhd.h")? Thanks. Ren
Seemingly Similar Threads
- [PATCH] virtio_blk: add helper function to support mass of disks naming
- [PATCH 0/4] block: move sd_format_disk_name() into block core as disk_name_format()
- [PATCH 0/4] block: move sd_format_disk_name() into block core as disk_name_format()
- [PATCH] virtio_blk: Add help function to format mass of disks
- [PATCH] virtio_blk: Add help function to format mass of disks