vserver 1.9.5.x5
[linux-2.6.git] / init / do_mounts_rd.c
index 6f8900e..c10b08a 100644 (file)
@@ -122,7 +122,8 @@ identify_ramdisk_image(int fd, int start_block)
                printk(KERN_NOTICE
                       "RAMDISK: ext2 filesystem found at block %d\n",
                       start_block);
-               nblocks = le32_to_cpu(ext2sb->s_blocks_count);
+               nblocks = le32_to_cpu(ext2sb->s_blocks_count) <<
+                       le32_to_cpu(ext2sb->s_log_block_size);
                goto done;
        }
 
@@ -173,10 +174,15 @@ int __init rd_load_image(char *from)
        }
 
        /*
-        * NOTE NOTE: nblocks suppose that the blocksize is BLOCK_SIZE, so
-        * rd_load_image will work only with filesystem BLOCK_SIZE wide!
-        * So make sure to use 1k blocksize while generating ext2fs
-        * ramdisk-images.
+        * NOTE NOTE: nblocks is not actually blocks but
+        * the number of kibibytes of data to load into a ramdisk.
+        * So any ramdisk block size that is a multiple of 1KiB should
+        * work when the appropriate ramdisk_blocksize is specified
+        * on the command line.
+        *
+        * The default ramdisk_blocksize is 1KiB and it is generally
+        * silly to use anything else, so make sure to use 1KiB
+        * blocksize while generating ext2fs ramdisk-images.
         */
        if (sys_ioctl(out_fd, BLKGETSIZE, (unsigned long)&rd_blocks) < 0)
                rd_blocks = 0;
@@ -184,7 +190,7 @@ int __init rd_load_image(char *from)
                rd_blocks >>= 1;
 
        if (nblocks > rd_blocks) {
-               printk("RAMDISK: image too big! (%d/%ld blocks)\n",
+               printk("RAMDISK: image too big! (%dKiB/%ldKiB)\n",
                       nblocks, rd_blocks);
                goto done;
        }
@@ -211,7 +217,7 @@ int __init rd_load_image(char *from)
                goto done;
        }
 
-       printk(KERN_NOTICE "RAMDISK: Loading %d blocks [%ld disk%s] into ram disk... ", 
+       printk(KERN_NOTICE "RAMDISK: Loading %dKiB [%ld disk%s] into ram disk... ",
                nblocks, ((nblocks-1)/devblocks)+1, nblocks>devblocks ? "s" : "");
        for (i = 0, disk = 1; i < nblocks; i++) {
                if (i && (i % devblocks == 0)) {
@@ -303,14 +309,15 @@ static int crd_infd, crd_outfd;
 #define Tracecv(c,x)
 
 #define STATIC static
-
-static int  fill_inbuf(void);
-static void flush_window(void);
-static void *malloc(size_t size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
+#define INIT __init
+
+static int  __init fill_inbuf(void);
+static void __init flush_window(void);
+static void __init *malloc(size_t size);
+static void __init free(void *where);
+static void __init error(char *m);
+static void __init gzip_mark(void **);
+static void __init gzip_release(void **);
 
 #include "../lib/inflate.c"