Re: [NFS] RE: [autofs] multiple servers per automount

From: Mike Waychison
Date: Tue Oct 14 2003 - 18:14:30 EST


H. Peter Anvin wrote:
Followup to: <3F8C1BB6.9010202@xxxxxxx>
By author: Mike Waychison <Michael.Waychison@xxxxxxx>
In newsgroup: linux.dev.kernel

Here is the quick fix for this in RH 2.1AS kernels:

http://www.kernelnewbies.org/kernels/rh21as/SOURCES/linux-2.4.9-moreunnamed.patch

It makes unnamed block devices use majors 12, 14, 38, 39, as well as 0.

I don't know if anyone is working out a better scheme for get_unnamed_dev in 2.6 yet. It does need to be done though. A simple patch for 2.6 would maybe see the unnamed_dev_in_use bitmap grow to PAGE_SIZE, automatically allowing for 32768 unnamed devices.



dev_t enlargement, which solves this without a bunch of auxilliary
majors, should be in 2.6.

-hpa

The problem still remains in 2.6 that we limit the count to 256. I've attached a quick patch that I've compiled and tested. I don't know if there is a better way to handle dynamic assignment of minors (haven't kept up to date in that realm), but if there is, then we should probably use it instead.

Mike Waychison ===== fs/super.c 1.108 vs edited =====
--- 1.108/fs/super.c Wed Oct 1 15:36:45 2003
+++ edited/fs/super.c Tue Oct 14 22:52:12 2003
@@ -528,14 +528,22 @@
* filesystems which don't use real block-devices. -- jrs
*/

-enum {Max_anon = 256};
-static unsigned long unnamed_dev_in_use[Max_anon/(8*sizeof(unsigned long))];
+enum {Max_anon = PAGE_SIZE * 8};
+static void *unnamed_dev_in_use = NULL;
static spinlock_t unnamed_dev_lock = SPIN_LOCK_UNLOCKED;/* protects the above */

int set_anon_super(struct super_block *s, void *data)
{
int dev;
spin_lock(&unnamed_dev_lock);
+
+ if (!unnamed_dev_in_use)
+ unnamed_dev_in_use = (void *)get_zeroed_page(GFP_KERNEL);
+ if (!unnamed_dev_in_use) {
+ spin_unlock(&unnamed_dev_lock);
+ return -ENOMEM;
+ }
+
dev = find_first_zero_bit(unnamed_dev_in_use, Max_anon);
if (dev == Max_anon) {
spin_unlock(&unnamed_dev_lock);