Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5988ce23 authored by Namhyung Kim's avatar Namhyung Kim Committed by Jens Axboe
Browse files

nbd: adjust 'max_part' according to part_shift



The 'max_part' parameter determines how many partitions are supported
on each nbd device. However the actual number can be changed to the
power of 2 minus 1 form during the module initialization as
alloc_disk() is called with (1 << part_shift) for some reason.

So adjust 'max_part' also at least for consistency with loop and brd.
It is exported via sysfs already, and a user should check this value
after module loading if [s]he wants to use that number correctly
(i.e. fdisk or something).

Signed-off-by: default avatarNamhyung Kim <namhyung@gmail.com>
Cc: Laurent Vivier <Laurent.Vivier@bull.net>
Cc: Paul Clements <Paul.Clements@steeleye.com>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent 3b271082
Loading
Loading
Loading
Loading
+12 −1
Original line number Original line Diff line number Diff line
@@ -754,9 +754,20 @@ static int __init nbd_init(void)
		return -ENOMEM;
		return -ENOMEM;


	part_shift = 0;
	part_shift = 0;
	if (max_part > 0)
	if (max_part > 0) {
		part_shift = fls(max_part);
		part_shift = fls(max_part);


		/*
		 * Adjust max_part according to part_shift as it is exported
		 * to user space so that user can know the max number of
		 * partition kernel should be able to manage.
		 *
		 * Note that -1 is required because partition 0 is reserved
		 * for the whole disk.
		 */
		max_part = (1UL << part_shift) - 1;
	}

	if ((1UL << part_shift) > DISK_MAX_PARTS)
	if ((1UL << part_shift) > DISK_MAX_PARTS)
		return -EINVAL;
		return -EINVAL;