• Ilya Dryomov's avatar
    rbd: add support for single-major device number allocation scheme · 9b60e70b
    Ilya Dryomov authored
    Currently each rbd device is allocated its own major number, which
    leads to a hard limit of 230-250 images mapped at once.  This commit
    adds support for a new single-major device number allocation scheme,
    which is hidden behind a new single_major boolean module parameter and
    is disabled by default for backwards compatibility reasons.  (Old
    userspace cannot correctly unmap images mapped under single-major
    scheme and would essentially just unmap a random image, if that.)
    
    $ rbd showmapped
    id pool image snap device
    0  rbd  b100  -    /dev/rbd0
    1  rbd  b101  -    /dev/rbd1
    2  rbd  b102  -    /dev/rbd2
    3  rbd  b103  -    /dev/rbd3
    
    Old scheme (modprobe rbd):
    
    $ ls -l /dev/rbd*
    brw-rw---- 1 root disk 253, 0 Dec 10 12:24 /dev/rbd0
    brw-rw---- 1 root disk 252, 0 Dec 10 12:28 /dev/rbd1
    brw-rw---- 1 root disk 252, 1 Dec 10 12:28 /dev/rbd1p1
    brw-rw---- 1 root disk 252, 2 Dec 10 12:28 /dev/rbd1p2
    brw-rw---- 1 root disk 252, 3 Dec 10 12:28 /dev/rbd1p3
    brw-rw---- 1 root disk 251, 0 Dec 10 12:28 /dev/rbd2
    brw-rw---- 1 root disk 251, 1 Dec 10 12:28 /dev/rbd2p1
    brw-rw---- 1 root disk 250, 0 Dec 10 12:24 /dev/rbd3
    
    New scheme (modprobe rbd single_major=Y):
    
    $ ls -l /dev/rbd*
    brw-rw---- 1 root disk 253,   0 Dec 10 12:30 /dev/rbd0
    brw-rw---- 1 root disk 253, 256 Dec 10 12:30 /dev/rbd1
    brw-rw---- 1 root disk 253, 257 Dec 10 12:30 /dev/rbd1p1
    brw-rw---- 1 root disk 253, 258 Dec 10 12:30 /dev/rbd1p2
    brw-rw---- 1 root disk 253, 259 Dec 10 12:30 /dev/rbd1p3
    brw-rw---- 1 root disk 253, 512 Dec 10 12:30 /dev/rbd2
    brw-rw---- 1 root disk 253, 513 Dec 10 12:30 /dev/rbd2p1
    brw-rw---- 1 root disk 253, 768 Dec 10 12:30 /dev/rbd3
    
    (major 253 was assigned dynamically at module load time)
    
    The new limit is 4096 images mapped at once, and it comes from the fact
    that, as before, 256 minor numbers are reserved for each mapping.
    (A follow-up commit changes the number of minors reserved and the way
    we deal with partitions over that number.)
    
    If single_major is set to true, two new sysfs interfaces show up:
    /sys/bus/rbd/{add,remove}_single_major.  These are to be used instead
    of /sys/bus/rbd/{add,remove}, which are disabled for backwards
    compatibility reasons outlined above.
    Signed-off-by: default avatarIlya Dryomov <ilya.dryomov@inktank.com>
    Reviewed-by: default avatarAlex Elder <elder@linaro.org>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    9b60e70b
rbd.c 138 KB