lkml.org 
[lkml]   [2003]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [NFS] RE: [autofs] multiple servers per automount
Ingo Oeser wrote:
> On Wednesday 15 October 2003 01:12, Mike Waychison wrote:
>
>>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.
>
>
>
> In your patch you allocate inside the spinlock.
>
> I would suggest to do sth. like the following:
>

Better yet.. we could move it into an __init section that will panic if
the allocation fails (this should be the desired behaviour..). This way
we don't even have to grab the lock either.

Mike Waychison
===== fs/namespace.c 1.49 vs edited =====
--- 1.49/fs/namespace.c Thu Jul 17 22:30:49 2003
+++ edited/fs/namespace.c Wed Oct 15 15:59:11 2003
@@ -23,6 +23,7 @@
#include <linux/mount.h>
#include <asm/uaccess.h>

+extern void __init super_init(void);
extern int __init init_rootfs(void);
extern int __init sysfs_init(void);

@@ -1154,6 +1155,7 @@
d++;
i--;
} while (i);
+ super_init();
sysfs_init();
init_rootfs();
init_mount_tree();
===== fs/super.c 1.108 vs edited =====
--- 1.108/fs/super.c Wed Oct 1 15:36:45 2003
+++ edited/fs/super.c Wed Oct 15 15:59:50 2003
@@ -24,6 +24,7 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
+#include <linux/init.h>
#include <linux/acct.h>
#include <linux/blkdev.h>
#include <linux/quotaops.h>
@@ -527,15 +528,22 @@
* Unnamed block devices are dummy devices used by virtual
* 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;
static spinlock_t unnamed_dev_lock = SPIN_LOCK_UNLOCKED;/* protects the above */

+void __init super_init(void)
+{
+ unnamed_dev_in_use = (void *)get_zeroed_page(GFP_KERNEL);
+ if (!unnamed_dev_in_use)
+ panic("Could not allocate anonymous device map");
+}
+
int set_anon_super(struct super_block *s, void *data)
{
int dev;
spin_lock(&unnamed_dev_lock);
+
dev = find_first_zero_bit(unnamed_dev_in_use, Max_anon);
if (dev == Max_anon) {
spin_unlock(&unnamed_dev_lock);
\
 
 \ /
  Last update: 2005-03-22 13:49    [W:0.162 / U:0.164 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site