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 ---