--- 2.4.19rc1aa3/drivers/block/loop.c.~1~ Tue Jul 16 11:03:28 2002 +++ 2.4.19rc1aa3/drivers/block/loop.c Tue Jul 16 11:44:40 2002 @@ -157,7 +157,7 @@ struct loop_func_table *xfer_funcs[MAX_L static unsigned long compute_loop_size(struct loop_device *lo, struct dentry * lo_dentry, kdev_t lodev) { if (S_ISREG(lo_dentry->d_inode->i_mode)) - return (lo_dentry->d_inode->i_size - lo->lo_offset) >> BLOCK_SIZE_BITS; + return (i_size_read(lo_dentry->d_inode) - lo->lo_offset) >> BLOCK_SIZE_BITS; if (blk_size[MAJOR(lodev)]) return blk_size[MAJOR(lodev)][MINOR(lodev)] - (lo->lo_offset >> BLOCK_SIZE_BITS); --- 2.4.19rc1aa3/fs/buffer.c.~1~ Tue Jul 16 11:03:45 2002 +++ 2.4.19rc1aa3/fs/buffer.c Tue Jul 16 11:23:52 2002 @@ -1747,7 +1747,7 @@ int block_read_full_page(struct page *pa blocks = PAGE_CACHE_SIZE >> inode->i_blkbits; iblock = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits); - lblock = (inode->i_size+blocksize-1) >> inode->i_blkbits; + lblock = (i_size_read(inode)+blocksize-1) >> inode->i_blkbits; bh = head; nr = 0; i = 0; @@ -1966,8 +1966,12 @@ int generic_commit_write(struct file *fi loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; __block_commit_write(inode,page,from,to); kunmap(page); + /* + * No need of using i_size_read here, the i_size + * cannot change under us because we hold the i_sem. + */ if (pos > inode->i_size) { - inode->i_size = pos; + i_size_write(inode, pos); mark_inode_dirty(inode); } return 0; @@ -2051,7 +2055,8 @@ out: int block_write_full_page(struct page *page, get_block_t *get_block) { struct inode *inode = page->mapping->host; - unsigned long end_index = inode->i_size >> PAGE_CACHE_SHIFT; + loff_t i_size = i_size_read(inode); + unsigned long end_index = i_size >> PAGE_CACHE_SHIFT; unsigned offset; int err; @@ -2060,7 +2065,7 @@ int block_write_full_page(struct page *p return __block_write_full_page(inode, page, get_block); /* things got complicated... */ - offset = inode->i_size & (PAGE_CACHE_SIZE-1); + offset = i_size & (PAGE_CACHE_SIZE-1); /* OK, are we completely out? */ if (page->index >= end_index+1 || !offset) { UnlockPage(page); --- 2.4.19rc1aa3/fs/open.c.~1~ Tue Jul 16 11:03:35 2002 +++ 2.4.19rc1aa3/fs/open.c Tue Jul 16 11:24:52 2002 @@ -917,7 +917,7 @@ asmlinkage long sys_vhangup(void) */ int generic_file_open(struct inode * inode, struct file * filp) { - if (!(filp->f_flags & O_LARGEFILE) && inode->i_size > MAX_NON_LFS) + if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS) return -EFBIG; return 0; } --- 2.4.19rc1aa3/fs/ioctl.c.~1~ Tue Jul 16 11:03:40 2002 +++ 2.4.19rc1aa3/fs/ioctl.c Tue Jul 16 11:28:15 2002 @@ -38,7 +38,7 @@ static int file_ioctl(struct file *filp, return -EBADF; return put_user(inode->i_sb->s_blocksize, (int *) arg); case FIONREAD: - return put_user(inode->i_size - filp->f_pos, (int *) arg); + return put_user(i_size_read(inode) - filp->f_pos, (int *) arg); } if (filp->f_op && filp->f_op->ioctl) return filp->f_op->ioctl(inode, filp, cmd, arg); --- 2.4.19rc1aa3/fs/read_write.c.~1~ Tue Jul 16 11:03:27 2002 +++ 2.4.19rc1aa3/fs/read_write.c Tue Jul 16 11:26:04 2002 @@ -31,7 +31,7 @@ loff_t generic_file_llseek(struct file * switch (origin) { case 2: - offset += file->f_dentry->d_inode->i_size; + offset += i_size_read(file->f_dentry->d_inode); break; case 1: offset += file->f_pos; @@ -59,7 +59,7 @@ loff_t default_llseek(struct file *file, switch (origin) { case 2: - offset += file->f_dentry->d_inode->i_size; + offset += i_size_read(file->f_dentry->d_inode); break; case 1: offset += file->f_pos; --- 2.4.19rc1aa3/fs/binfmt_aout.c.~1~ Tue Jan 22 18:55:26 2002 +++ 2.4.19rc1aa3/fs/binfmt_aout.c Tue Jul 16 11:27:10 2002 @@ -263,7 +263,7 @@ static int load_aout_binary(struct linux if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != OMAGIC && N_MAGIC(ex) != QMAGIC && N_MAGIC(ex) != NMAGIC) || N_TRSIZE(ex) || N_DRSIZE(ex) || - bprm->file->f_dentry->d_inode->i_size < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) { + i_size_read(bprm->file->f_dentry->d_inode) < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) { return -ENOEXEC; } @@ -443,7 +443,7 @@ static int load_aout_library(struct file /* We come in here for the regular a.out style of shared libraries */ if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != QMAGIC) || N_TRSIZE(ex) || N_DRSIZE(ex) || ((ex.a_entry & 0xfff) && N_MAGIC(ex) == ZMAGIC) || - inode->i_size < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) { + i_size_read(inode) < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) { goto out; } --- 2.4.19rc1aa3/fs/block_dev.c.~1~ Tue Jul 16 11:03:35 2002 +++ 2.4.19rc1aa3/fs/block_dev.c Tue Jul 16 11:27:33 2002 @@ -165,7 +165,7 @@ static int blkdev_commit_write(struct fi static loff_t block_llseek(struct file *file, loff_t offset, int origin) { /* ewww */ - loff_t size = file->f_dentry->d_inode->i_bdev->bd_inode->i_size; + loff_t size = i_size_read(file->f_dentry->d_inode->i_bdev->bd_inode); loff_t retval; switch (origin) { --- 2.4.19rc1aa3/fs/locks.c.~1~ Tue Jul 16 11:03:28 2002 +++ 2.4.19rc1aa3/fs/locks.c Tue Jul 16 11:29:08 2002 @@ -260,7 +260,7 @@ static int flock_to_posix_lock(struct fi start = filp->f_pos; break; case 2: /*SEEK_END*/ - start = filp->f_dentry->d_inode->i_size; + start = i_size_read(filp->f_dentry->d_inode); break; default: return -EINVAL; @@ -310,7 +310,7 @@ static int flock64_to_posix_lock(struct start = filp->f_pos; break; case 2: /*SEEK_END*/ - start = filp->f_dentry->d_inode->i_size; + start = i_size_read(filp->f_dentry->d_inode); break; default: return -EINVAL; --- 2.4.19rc1aa3/fs/stat.c.~1~ Tue Jan 22 18:53:53 2002 +++ 2.4.19rc1aa3/fs/stat.c Tue Jul 16 11:31:42 2002 @@ -36,6 +36,7 @@ static int cp_old_stat(struct inode * in { static int warncount = 5; struct __old_kernel_stat tmp; + loff_t i_size; if (warncount > 0) { warncount--; @@ -53,11 +54,13 @@ static int cp_old_stat(struct inode * in SET_OLDSTAT_UID(tmp, inode->i_uid); SET_OLDSTAT_GID(tmp, inode->i_gid); tmp.st_rdev = kdev_t_to_nr(inode->i_rdev); + + i_size = i_size_read(inode); #if BITS_PER_LONG == 32 - if (inode->i_size > MAX_NON_LFS) + if (i_size > MAX_NON_LFS) return -EOVERFLOW; #endif - tmp.st_size = inode->i_size; + tmp.st_size = i_size; tmp.st_atime = inode->i_atime; tmp.st_mtime = inode->i_mtime; tmp.st_ctime = inode->i_ctime; @@ -70,6 +73,7 @@ static int cp_new_stat(struct inode * in { struct stat tmp; unsigned int blocks, indirect; + loff_t i_size; memset(&tmp, 0, sizeof(tmp)); tmp.st_dev = kdev_t_to_nr(inode->i_dev); @@ -79,11 +83,13 @@ static int cp_new_stat(struct inode * in SET_STAT_UID(tmp, inode->i_uid); SET_STAT_GID(tmp, inode->i_gid); tmp.st_rdev = kdev_t_to_nr(inode->i_rdev); + + i_size = i_size_read(inode); #if BITS_PER_LONG == 32 - if (inode->i_size > MAX_NON_LFS) + if (i_size > MAX_NON_LFS) return -EOVERFLOW; #endif - tmp.st_size = inode->i_size; + tmp.st_size = i_size; tmp.st_atime = inode->i_atime; tmp.st_mtime = inode->i_mtime; tmp.st_ctime = inode->i_ctime; @@ -289,7 +295,7 @@ static long cp_new_stat64(struct inode * tmp.st_atime = inode->i_atime; tmp.st_mtime = inode->i_mtime; tmp.st_ctime = inode->i_ctime; - tmp.st_size = inode->i_size; + tmp.st_size = i_size_read(inode); /* * st_blocks and st_blksize are approximated with a simple algorithm if * they aren't supported directly by the filesystem. The minix and msdos --- 2.4.19rc1aa3/ipc/shm.c.~1~ Tue Jul 16 11:03:29 2002 +++ 2.4.19rc1aa3/ipc/shm.c Tue Jul 16 11:32:14 2002 @@ -627,7 +627,7 @@ asmlinkage long sys_shmat (int shmid, ch return -EACCES; } file = shp->shm_file; - size = file->f_dentry->d_inode->i_size; + size = i_size_read(file->f_dentry->d_inode); shp->shm_nattch++; shm_unlock(shmid); --- 2.4.19rc1aa3/mm/filemap.c.~1~ Tue Jul 16 11:03:41 2002 +++ 2.4.19rc1aa3/mm/filemap.c Tue Jul 16 12:03:58 2002 @@ -1158,7 +1158,7 @@ static void generic_file_readahead(int r unsigned long raend; int max_readahead = get_max_readahead(inode); - end_index = inode->i_size >> PAGE_CACHE_SHIFT; + end_index = i_size_read(inode) >> PAGE_CACHE_SHIFT; raend = filp->f_raend; max_ahead = 0; @@ -1338,14 +1338,15 @@ void __do_generic_file_read(struct file for (;;) { struct page *page, **hash; unsigned long end_index, nr, ret; + loff_t i_size = i_size_read(inode); - end_index = inode->i_size >> PAGE_CACHE_SHIFT; + end_index = i_size >> PAGE_CACHE_SHIFT; if (index > end_index) break; nr = PAGE_CACHE_SIZE; if (index == end_index) { - nr = inode->i_size & ~PAGE_CACHE_MASK; + nr = i_size & ~PAGE_CACHE_MASK; if (nr <= offset) break; } @@ -1515,7 +1516,7 @@ static ssize_t generic_file_direct_IO(in struct kiobuf * iobuf; struct address_space * mapping = filp->f_dentry->d_inode->i_mapping; struct inode * inode = mapping->host; - loff_t size = inode->i_size; + loff_t size = i_size_read(inode); new_iobuf = 0; iobuf = filp->f_iobuf; @@ -1660,7 +1661,7 @@ ssize_t generic_file_read(struct file * retval = 0; if (!count) goto out; /* skip atime */ - size = inode->i_size; + size = i_size_read(inode); if (pos < size) { retval = generic_file_direct_IO(READ, filp, buf, count, pos); if (retval > 0) @@ -1790,7 +1791,7 @@ static ssize_t do_readahead(struct file return -EINVAL; /* Limit it to the size of the file.. */ - max = (mapping->host->i_size + ~PAGE_CACHE_MASK) >> PAGE_CACHE_SHIFT; + max = (i_size_read(mapping->host) + ~PAGE_CACHE_MASK) >> PAGE_CACHE_SHIFT; if (index > max) return 0; max -= index; @@ -1915,7 +1916,7 @@ retry_all: * An external ptracer can access pages that normally aren't * accessible.. */ - size = (inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; + size = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; if ((pgoff >= size) && (area->vm_mm == current->mm)) return NULL; @@ -2435,7 +2436,7 @@ static long madvise_willneed(struct vm_a if (!vma->vm_file) return error; file = vma->vm_file; - size = (file->f_dentry->d_inode->i_size + PAGE_CACHE_SIZE - 1) >> + size = (i_size_read(file->f_dentry->d_inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; --- 2.4.19rc1aa3/mm/memory.c.~1~ Tue Jul 16 11:03:45 2002 +++ 2.4.19rc1aa3/mm/memory.c Tue Jul 16 11:42:59 2002 @@ -1102,7 +1102,7 @@ int vmtruncate(struct inode * inode, lof if (inode->i_size < offset) goto do_expand; - inode->i_size = offset; + i_size_write(inode, offset); spin_lock(&mapping->i_shared_lock); if (!mapping->i_mmap && !mapping->i_mmap_shared) goto out_unlock; @@ -1124,7 +1124,7 @@ do_expand: goto out_sig; if (offset > inode->i_sb->s_maxbytes) goto out; - inode->i_size = offset; + i_size_write(inode, offset); out_truncate: if (inode->i_op && inode->i_op->truncate) { --- 2.4.19rc1aa3/mm/swapfile.c.~1~ Tue Jul 16 11:03:36 2002 +++ 2.4.19rc1aa3/mm/swapfile.c Tue Jul 16 11:44:17 2002 @@ -957,7 +957,7 @@ asmlinkage long sys_swapon(const char * swapfilesize = blk_size[MAJOR(dev)][MINOR(dev)] >> (PAGE_SHIFT - 10); } else if (S_ISREG(swap_inode->i_mode)) - swapfilesize = swap_inode->i_size >> PAGE_SHIFT; + swapfilesize = i_size_read(swap_inode) >> PAGE_SHIFT; else goto bad_swap;