--- linux-work/fs/intermezzo/super.c-MAXLFS Fri Feb 1 07:25:58 2002 +++ linux-work/fs/intermezzo/super.c Mon Feb 4 11:28:53 2002 @@ -306,6 +306,9 @@ goto out_err; } mysb = fstype->read_super(presto_sb, cache_data, silent); + if (presto_sb->s_maxbytes > MAX_LFS_FILESIZE) + presto_sb->s_maxbytes = MAX_LFS_FILESIZE; + /* this might have been freed above */ if (cache_data) { PRESTO_FREE(cache_data, PAGE_SIZE); --- linux-work/fs/super.c-MAXLFS Fri Feb 1 07:26:19 2002 +++ linux-work/fs/super.c Mon Feb 4 11:36:39 2002 @@ -620,6 +620,9 @@ lock_super(s); if (!type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + if (s->s_maxbytes > MAX_LFS_FILESIZE) + s->s_maxbytes = MAX_LFS_FILESIZE; + s->s_flags |= MS_ACTIVE; unlock_super(s); /* tell bdcache that we are going to keep this one */ @@ -754,6 +757,8 @@ lock_super(s); if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + if (s->s_maxbytes > MAX_LFS_FILESIZE) + s->s_maxbytes = MAX_LFS_FILESIZE; s->s_flags |= MS_ACTIVE; unlock_super(s); path_release(&nd); @@ -818,6 +823,8 @@ lock_super(s); if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + if (s->s_maxbytes > MAX_LFS_FILESIZE) + s->s_maxbytes = MAX_LFS_FILESIZE; s->s_flags |= MS_ACTIVE; unlock_super(s); return s; --- linux-work/include/linux/fs.h-MAXLFS Mon Feb 4 02:13:18 2002 +++ linux-work/include/linux/fs.h Mon Feb 4 13:26:02 2002 @@ -588,6 +588,13 @@ extern int init_private_file(struct file *, struct dentry *, int); #define MAX_NON_LFS ((1UL<<31) - 1) +/* Page cache limit. The filesystems should put that into their s_maxbytes + limits, otherwise bad things can happen in VM. */ +#if BITS_PER_LONG==32 +#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1) +#elif BITS_PER_LONG==64 +#define MAX_LFS_FILESIZE 0x7fffffffffffffff +#endif #define FL_POSIX 1 #define FL_FLOCK 2