linux/drivers
Laurent Vivier d71a6d7332 NBD: add partition support
Permit the use of partitions with network block devices (NBD).

A new parameter is introduced to define how many partition we want to be able
to manage per network block device.  This parameter is "max_part".

For instance, to manage 63 partitions / loop device, we will do:

   [on the server side]
# nbd-server 1234 /dev/sdb
   [on the client side]
# modprobe nbd max_part=63
# ls -l /dev/nbd*
brw-rw---- 1 root disk 43,   0 2008-03-25 11:14 /dev/nbd0
brw-rw---- 1 root disk 43,  64 2008-03-25 11:11 /dev/nbd1
brw-rw---- 1 root disk 43, 640 2008-03-25 11:11 /dev/nbd10
brw-rw---- 1 root disk 43, 704 2008-03-25 11:11 /dev/nbd11
brw-rw---- 1 root disk 43, 768 2008-03-25 11:11 /dev/nbd12
brw-rw---- 1 root disk 43, 832 2008-03-25 11:11 /dev/nbd13
brw-rw---- 1 root disk 43, 896 2008-03-25 11:11 /dev/nbd14
brw-rw---- 1 root disk 43, 960 2008-03-25 11:11 /dev/nbd15
brw-rw---- 1 root disk 43, 128 2008-03-25 11:11 /dev/nbd2
brw-rw---- 1 root disk 43, 192 2008-03-25 11:11 /dev/nbd3
brw-rw---- 1 root disk 43, 256 2008-03-25 11:11 /dev/nbd4
brw-rw---- 1 root disk 43, 320 2008-03-25 11:11 /dev/nbd5
brw-rw---- 1 root disk 43, 384 2008-03-25 11:11 /dev/nbd6
brw-rw---- 1 root disk 43, 448 2008-03-25 11:11 /dev/nbd7
brw-rw---- 1 root disk 43, 512 2008-03-25 11:11 /dev/nbd8
brw-rw---- 1 root disk 43, 576 2008-03-25 11:11 /dev/nbd9
# nbd-client localhost 1234 /dev/nbd0
Negotiation: ..size = 80418240KB
bs=1024, sz=80418240

-------NOTE, RFC: partition table is not automatically read.
The driver sets bdev->bd_invalidated to 1 to force the read of the partition
table of the device, but this is done only on an open of the device.
So we have to do a "touch /dev/nbdX" or something like that.
It can't be done from the nbd-client or nbd driver because at this
level we can't ask to read the partition table and to serve the request
at the same time (-> deadlock)

If someone has a better idea, I'm open to any suggestion.
-------NOTE, RFC

# fdisk -l /dev/nbd0

Disk /dev/nbd0: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

     Device Boot      Start         End      Blocks   Id  System
/dev/nbd0p1   *           1        9965    80043831   83  Linux
/dev/nbd0p2            9966       10011      369495    5  Extended
/dev/nbd0p5            9966       10011      369463+  82  Linux swap / Solaris

# ls -l /dev/nbd0*
brw-rw---- 1 root disk 43,   0 2008-03-25 11:16 /dev/nbd0
brw-rw---- 1 root disk 43,   1 2008-03-25 11:16 /dev/nbd0p1
brw-rw---- 1 root disk 43,   2 2008-03-25 11:16 /dev/nbd0p2
brw-rw---- 1 root disk 43,   5 2008-03-25 11:16 /dev/nbd0p5
# mount /dev/nbd0p1 /mnt
# ls /mnt
bin    dev   initrd      lost+found  opt   sbin     sys  var
boot   etc   initrd.img  media       proc  selinux  tmp  vmlinuz
cdrom  home  lib         mnt         root  srv      usr
# umount /mnt
# nbd-client -d /dev/nbd0
# ls -l /dev/nbd0*
brw-rw---- 1 root disk 43, 0 2008-03-25 11:16 /dev/nbd0
-------NOTE
On "nbd-client -d", we can do an iocl(BLKRRPART) to update partition table:
as the size of the device is 0, we don't have to serve the partition manager
request (-> no deadlock).
-------NOTE

Signed-off-by: Paul Clements <paul.clements@steeleye.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-29 08:06:23 -07:00
..
acorn/char
acpi acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
amba
ata typo in sata_fsl 2008-04-28 10:03:31 -07:00
atm drivers: atm, char fix integer as NULL pointer warnings 2008-04-28 17:29:18 -07:00
auxdisplay
base firmware loader: printk when requesting firmware 2008-04-29 08:06:05 -07:00
block NBD: add partition support 2008-04-29 08:06:23 -07:00
bluetooth
cdrom drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
char drivers: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
clocksource
connector
cpufreq [CPUFREQ] fix show_trans_table 2008-04-28 15:05:44 -04:00
cpuidle
crypto
dca
dio
dma
edac
eisa
firewire
firmware edd: add default mode CONFIG_EDD_OFF=n, override with edd={on,off} 2008-04-29 08:06:23 -07:00
gpio gpiochip_reserve() 2008-04-28 08:58:34 -07:00
hid usbhid endianness annotations and fixes 2008-04-28 10:03:31 -07:00
hwmon
i2c
ide drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
ieee1394
infiniband IB: expand ib_umem_get() prototype 2008-04-29 08:06:12 -07:00
input drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
isdn isdn: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
leds
lguest
macintosh
mca proc: remove proc_root from drivers 2008-04-29 08:06:18 -07:00
md drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
media drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
memstick
message drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
mfd mfd: use shorter set_current_state() 2008-04-28 08:58:32 -07:00
misc drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
mmc
mtd drivers: fix integer as NULL pointer warnings 2008-04-28 17:31:13 -07:00
net netdev: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
nubus proc: convert /proc/bus/nubus to seq_file interface 2008-04-29 08:06:19 -07:00
of
oprofile oprofile: change cpu_buffer from array to per_cpu variable 2008-04-28 08:58:31 -07:00
parisc parisc: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
parport
pci drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
pcmcia ARM: always select HAVE_IDE 2008-04-28 23:44:43 +02:00
pnp drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
power x86: olpc: add One Laptop Per Child architecture support 2008-04-29 08:06:07 -07:00
ps3
rapidio
rtc drivers: use non-racy method for proc entries creation (2) 2008-04-29 08:06:22 -07:00
s390 s390: use non-racy method for proc entries creation 2008-04-29 08:06:21 -07:00
sbus
scsi scsi: use non-racy method for proc entries creation 2008-04-29 08:06:21 -07:00
serial Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus 2008-04-28 10:51:43 -07:00
sh
sn
spi spi: spi_imx updates 2008-04-28 08:58:31 -07:00
ssb
tc
telephony
thermal
uio
usb usb: use non-racy method for proc entries creation 2008-04-29 08:06:21 -07:00
video proc: remove proc_root from drivers 2008-04-29 08:06:18 -07:00
virtio
w1
watchdog
xen
zorro zorro: use non-racy method for proc entries creation 2008-04-29 08:06:21 -07:00
Kconfig
Makefile