lkml.org 
[lkml]   [2003]   [Oct]   [14]   [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
H. Peter Anvin wrote:
> Followup to: <3F8C1BB6.9010202@sun.com>
> By author: Mike Waychison <Michael.Waychison@Sun.COM>
> 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);
\
 
 \ /
  Last update: 2005-03-22 13:49    [W:0.052 / U:0.824 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site