From 5c1355287fa772a3f0480d174ce8b39bc28d5735 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Wed, 25 Jul 2007 20:36:26 -0700 Subject: [PATCH] vps_filesystem_ramfs Large blocksize support in ramfs The simplest file system to use for larg blocksize support is ramfs. Add a mount parameter that specifies the page order of the pages that ramfs should use. Note that ramfs does not use the lower layers (buffer I/O etc) so this case is useful for initial testing of changes to large buffer size support if one just wants to exercise the higher layers. If you apply this patch and then you can f.e. try this: mount -tramfs -o10 none /media Mounts a ramfs filesystem with order 10 pages (4 MB) cp linux-2.6.21-rc7.tar.gz /media Populate the ramfs. Note that we allocate 14 pages of 4M each instead of 13508.. umount /media Gets rid of the large pages again Signed-off-by: Christoph Lameter --- fs/ramfs/inode.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index ef2b46d..b317f80 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c @@ -60,7 +60,8 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) inode->i_blocks = 0; inode->i_mapping->a_ops = &ramfs_aops; inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; - mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); + mapping_setup(inode->i_mapping, GFP_HIGHUSER, + sb->s_blocksize_bits - PAGE_SHIFT); inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; switch (mode & S_IFMT) { default: @@ -164,10 +165,15 @@ static int ramfs_fill_super(struct super_block * sb, void * data, int silent) { struct inode * inode; struct dentry * root; + int order = 0; + char *options = data; + + if (options && *options) + order = simple_strtoul(options, NULL, 10); sb->s_maxbytes = MAX_LFS_FILESIZE; - sb->s_blocksize = PAGE_CACHE_SIZE; - sb->s_blocksize_bits = PAGE_CACHE_SHIFT; + sb->s_blocksize = PAGE_CACHE_SIZE << order; + sb->s_blocksize_bits = order + PAGE_CACHE_SHIFT; sb->s_magic = RAMFS_MAGIC; sb->s_op = &ramfs_ops; sb->s_time_gran = 1; -- 1.4.4.4