inode.c (6a797d2737838906f2ea0a31686e87c3151e21ca) | inode.c (e2b911c53584a92266943f3b7f2cdbc19c1a4e80) |
---|---|
1/* 2 * linux/fs/ext4/inode.c 3 * 4 * Copyright (C) 1992, 1993, 1994, 1995 5 * Remy Card (card@masi.ibp.fr) 6 * Laboratoire MASI - Institut Blaise Pascal 7 * Universite Pierre et Marie Curie (Paris VI) 8 * --- 2628 unchanged lines hidden (view full) --- 2637 return 1; 2638 } 2639 return 0; 2640} 2641 2642/* We always reserve for an inode update; the superblock could be there too */ 2643static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len) 2644{ | 1/* 2 * linux/fs/ext4/inode.c 3 * 4 * Copyright (C) 1992, 1993, 1994, 1995 5 * Remy Card (card@masi.ibp.fr) 6 * Laboratoire MASI - Institut Blaise Pascal 7 * Universite Pierre et Marie Curie (Paris VI) 8 * --- 2628 unchanged lines hidden (view full) --- 2637 return 1; 2638 } 2639 return 0; 2640} 2641 2642/* We always reserve for an inode update; the superblock could be there too */ 2643static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len) 2644{ |
2645 if (likely(EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb, 2646 EXT4_FEATURE_RO_COMPAT_LARGE_FILE))) | 2645 if (likely(ext4_has_feature_large_file(inode->i_sb))) |
2647 return 1; 2648 2649 if (pos + len <= 0x7fffffffULL) 2650 return 1; 2651 2652 /* We might need to update the superblock to set LARGE_FILE */ 2653 return 2; 2654} --- 1389 unchanged lines hidden (view full) --- 4044 4045static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode, 4046 struct ext4_inode_info *ei) 4047{ 4048 blkcnt_t i_blocks ; 4049 struct inode *inode = &(ei->vfs_inode); 4050 struct super_block *sb = inode->i_sb; 4051 | 2646 return 1; 2647 2648 if (pos + len <= 0x7fffffffULL) 2649 return 1; 2650 2651 /* We might need to update the superblock to set LARGE_FILE */ 2652 return 2; 2653} --- 1389 unchanged lines hidden (view full) --- 4043 4044static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode, 4045 struct ext4_inode_info *ei) 4046{ 4047 blkcnt_t i_blocks ; 4048 struct inode *inode = &(ei->vfs_inode); 4049 struct super_block *sb = inode->i_sb; 4050 |
4052 if (EXT4_HAS_RO_COMPAT_FEATURE(sb, 4053 EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) { | 4051 if (ext4_has_feature_huge_file(sb)) { |
4054 /* we are using combined 48 bit field */ 4055 i_blocks = ((u64)le16_to_cpu(raw_inode->i_blocks_high)) << 32 | 4056 le32_to_cpu(raw_inode->i_blocks_lo); 4057 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) { 4058 /* i_blocks represent file system block size */ 4059 return i_blocks << (inode->i_blkbits - 9); 4060 } else { 4061 return i_blocks; --- 106 unchanged lines hidden (view full) --- 4168 * recovery code: that's fine, we're about to complete 4169 * the process of deleting those. 4170 * OR it is the EXT4_BOOT_LOADER_INO which is 4171 * not initialized on a new filesystem. */ 4172 } 4173 ei->i_flags = le32_to_cpu(raw_inode->i_flags); 4174 inode->i_blocks = ext4_inode_blocks(raw_inode, ei); 4175 ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo); | 4052 /* we are using combined 48 bit field */ 4053 i_blocks = ((u64)le16_to_cpu(raw_inode->i_blocks_high)) << 32 | 4054 le32_to_cpu(raw_inode->i_blocks_lo); 4055 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) { 4056 /* i_blocks represent file system block size */ 4057 return i_blocks << (inode->i_blkbits - 9); 4058 } else { 4059 return i_blocks; --- 106 unchanged lines hidden (view full) --- 4166 * recovery code: that's fine, we're about to complete 4167 * the process of deleting those. 4168 * OR it is the EXT4_BOOT_LOADER_INO which is 4169 * not initialized on a new filesystem. */ 4170 } 4171 ei->i_flags = le32_to_cpu(raw_inode->i_flags); 4172 inode->i_blocks = ext4_inode_blocks(raw_inode, ei); 4173 ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo); |
4176 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT)) | 4174 if (ext4_has_feature_64bit(sb)) |
4177 ei->i_file_acl |= 4178 ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32; 4179 inode->i_size = ext4_isize(raw_inode); 4180 ei->i_disksize = inode->i_size; 4181#ifdef CONFIG_QUOTA 4182 ei->i_reserved_quota = 0; 4183#endif 4184 inode->i_generation = le32_to_cpu(raw_inode->i_generation); --- 147 unchanged lines hidden (view full) --- 4332 * i_blocks can be represented in a 32 bit variable 4333 * as multiple of 512 bytes 4334 */ 4335 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks); 4336 raw_inode->i_blocks_high = 0; 4337 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); 4338 return 0; 4339 } | 4175 ei->i_file_acl |= 4176 ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32; 4177 inode->i_size = ext4_isize(raw_inode); 4178 ei->i_disksize = inode->i_size; 4179#ifdef CONFIG_QUOTA 4180 ei->i_reserved_quota = 0; 4181#endif 4182 inode->i_generation = le32_to_cpu(raw_inode->i_generation); --- 147 unchanged lines hidden (view full) --- 4330 * i_blocks can be represented in a 32 bit variable 4331 * as multiple of 512 bytes 4332 */ 4333 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks); 4334 raw_inode->i_blocks_high = 0; 4335 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE); 4336 return 0; 4337 } |
4340 if (!EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) | 4338 if (!ext4_has_feature_huge_file(sb)) |
4341 return -EFBIG; 4342 4343 if (i_blocks <= 0xffffffffffffULL) { 4344 /* 4345 * i_blocks can be represented in a 48 bit variable 4346 * as multiple of 512 bytes 4347 */ 4348 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks); --- 144 unchanged lines hidden (view full) --- 4493 raw_inode->i_file_acl_high = 4494 cpu_to_le16(ei->i_file_acl >> 32); 4495 raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl); 4496 if (ei->i_disksize != ext4_isize(raw_inode)) { 4497 ext4_isize_set(raw_inode, ei->i_disksize); 4498 need_datasync = 1; 4499 } 4500 if (ei->i_disksize > 0x7fffffffULL) { | 4339 return -EFBIG; 4340 4341 if (i_blocks <= 0xffffffffffffULL) { 4342 /* 4343 * i_blocks can be represented in a 48 bit variable 4344 * as multiple of 512 bytes 4345 */ 4346 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks); --- 144 unchanged lines hidden (view full) --- 4491 raw_inode->i_file_acl_high = 4492 cpu_to_le16(ei->i_file_acl >> 32); 4493 raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl); 4494 if (ei->i_disksize != ext4_isize(raw_inode)) { 4495 ext4_isize_set(raw_inode, ei->i_disksize); 4496 need_datasync = 1; 4497 } 4498 if (ei->i_disksize > 0x7fffffffULL) { |
4501 if (!EXT4_HAS_RO_COMPAT_FEATURE(sb, 4502 EXT4_FEATURE_RO_COMPAT_LARGE_FILE) || | 4499 if (!ext4_has_feature_large_file(sb) || |
4503 EXT4_SB(sb)->s_es->s_rev_level == 4504 cpu_to_le32(EXT4_GOOD_OLD_REV)) 4505 set_large_file = 1; 4506 } 4507 raw_inode->i_generation = cpu_to_le32(inode->i_generation); 4508 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { 4509 if (old_valid_dev(inode->i_rdev)) { 4510 raw_inode->i_block[0] = --- 32 unchanged lines hidden (view full) --- 4543 err = rc; 4544 ext4_clear_inode_state(inode, EXT4_STATE_NEW); 4545 if (set_large_file) { 4546 BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access"); 4547 err = ext4_journal_get_write_access(handle, EXT4_SB(sb)->s_sbh); 4548 if (err) 4549 goto out_brelse; 4550 ext4_update_dynamic_rev(sb); | 4500 EXT4_SB(sb)->s_es->s_rev_level == 4501 cpu_to_le32(EXT4_GOOD_OLD_REV)) 4502 set_large_file = 1; 4503 } 4504 raw_inode->i_generation = cpu_to_le32(inode->i_generation); 4505 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { 4506 if (old_valid_dev(inode->i_rdev)) { 4507 raw_inode->i_block[0] = --- 32 unchanged lines hidden (view full) --- 4540 err = rc; 4541 ext4_clear_inode_state(inode, EXT4_STATE_NEW); 4542 if (set_large_file) { 4543 BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access"); 4544 err = ext4_journal_get_write_access(handle, EXT4_SB(sb)->s_sbh); 4545 if (err) 4546 goto out_brelse; 4547 ext4_update_dynamic_rev(sb); |
4551 EXT4_SET_RO_COMPAT_FEATURE(sb, 4552 EXT4_FEATURE_RO_COMPAT_LARGE_FILE); | 4548 ext4_set_feature_large_file(sb); |
4553 ext4_handle_sync(handle); 4554 err = ext4_handle_dirty_super(handle, sb); 4555 } 4556 ext4_update_inode_fsync_trans(handle, inode, need_datasync); 4557out_brelse: 4558 brelse(bh); 4559 ext4_std_error(inode->i_sb, err); 4560 return err; --- 796 unchanged lines hidden --- | 4549 ext4_handle_sync(handle); 4550 err = ext4_handle_dirty_super(handle, sb); 4551 } 4552 ext4_update_inode_fsync_trans(handle, inode, need_datasync); 4553out_brelse: 4554 brelse(bh); 4555 ext4_std_error(inode->i_sb, err); 4556 return err; --- 796 unchanged lines hidden --- |