diff -urN 2.4.19pre2/fs/intermezzo/super.c max-bytes/fs/intermezzo/super.c --- 2.4.19pre2/fs/intermezzo/super.c Mon Feb 25 22:05:08 2002 +++ max-bytes/fs/intermezzo/super.c Mon Mar 11 05:50:26 2002 @@ -306,6 +306,8 @@ goto out_err; } mysb = fstype->read_super(presto_sb, cache_data, silent); + sb_limit_maxbytes(presto_sb); + /* this might have been freed above */ if (cache_data) { PRESTO_FREE(cache_data, PAGE_SIZE); diff -urN 2.4.19pre2/fs/super.c max-bytes/fs/super.c --- 2.4.19pre2/fs/super.c Fri Mar 1 00:09:38 2002 +++ max-bytes/fs/super.c Mon Mar 11 05:49:38 2002 @@ -558,6 +558,12 @@ kdevname(dev)); } +void sb_limit_maxbytes(struct super_block * s) +{ + if (s->s_maxbytes > MAX_LFS_FILESIZE) + s->s_maxbytes = MAX_LFS_FILESIZE; +} + static struct super_block *get_sb_bdev(struct file_system_type *fs_type, char *dev_name, int flags, void * data) { @@ -644,6 +650,7 @@ lock_super(s); if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + sb_limit_maxbytes(s); s->s_flags |= MS_ACTIVE; unlock_super(s); path_release(&nd); @@ -676,6 +683,7 @@ lock_super(s); if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + sb_limit_maxbytes(s); s->s_flags |= MS_ACTIVE; unlock_super(s); return s; @@ -720,6 +728,7 @@ lock_super(s); if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0)) goto out_fail; + sb_limit_maxbytes(s); s->s_flags |= MS_ACTIVE; unlock_super(s); return s; diff -urN 2.4.19pre2/include/linux/fs.h max-bytes/include/linux/fs.h --- 2.4.19pre2/include/linux/fs.h Fri Mar 1 00:09:39 2002 +++ max-bytes/include/linux/fs.h Mon Mar 11 05:50:02 2002 @@ -558,6 +558,8 @@ #define MAX_LFS_FILESIZE 0x7fffffffffffffff #endif +extern void sb_limit_maxbytes(struct super_block * s); + #define FL_POSIX 1 #define FL_FLOCK 2 #define FL_BROKEN 4 /* broken flock() emulation */