aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2012-04-05 15:03:02 -0400
committerJosef Bacik <josef@redhat.com>2012-05-30 10:23:27 -0400
commit0c4d2d95d06e920e0c61707e62c7fffc9c57f63a (patch)
tree5d6fa736c7fea0a0afd60eda8e6e0586df6fb606 /fs/btrfs/inode.c
parenta25c75d5ad04df0a7abd09585231b4021a91a358 (diff)
Btrfs: use i_version instead of our own sequence
We've been keeping around the inode sequence number in hopes that somebody would use it, but nobody uses it and people actually use i_version which serves the same purpose, so use i_version where we used the incore inode's sequence number and that way the sequence is updated properly across the board, and not just in file write. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 61b16c641ce0..41a62e6954c2 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2510,7 +2510,7 @@ static void btrfs_read_locked_inode(struct inode *inode)
2510 2510
2511 inode_set_bytes(inode, btrfs_inode_nbytes(leaf, inode_item)); 2511 inode_set_bytes(inode, btrfs_inode_nbytes(leaf, inode_item));
2512 BTRFS_I(inode)->generation = btrfs_inode_generation(leaf, inode_item); 2512 BTRFS_I(inode)->generation = btrfs_inode_generation(leaf, inode_item);
2513 BTRFS_I(inode)->sequence = btrfs_inode_sequence(leaf, inode_item); 2513 inode->i_version = btrfs_inode_sequence(leaf, inode_item);
2514 inode->i_generation = BTRFS_I(inode)->generation; 2514 inode->i_generation = BTRFS_I(inode)->generation;
2515 inode->i_rdev = 0; 2515 inode->i_rdev = 0;
2516 rdev = btrfs_inode_rdev(leaf, inode_item); 2516 rdev = btrfs_inode_rdev(leaf, inode_item);
@@ -2594,7 +2594,7 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
2594 2594
2595 btrfs_set_inode_nbytes(leaf, item, inode_get_bytes(inode)); 2595 btrfs_set_inode_nbytes(leaf, item, inode_get_bytes(inode));
2596 btrfs_set_inode_generation(leaf, item, BTRFS_I(inode)->generation); 2596 btrfs_set_inode_generation(leaf, item, BTRFS_I(inode)->generation);
2597 btrfs_set_inode_sequence(leaf, item, BTRFS_I(inode)->sequence); 2597 btrfs_set_inode_sequence(leaf, item, inode->i_version);
2598 btrfs_set_inode_transid(leaf, item, trans->transid); 2598 btrfs_set_inode_transid(leaf, item, trans->transid);
2599 btrfs_set_inode_rdev(leaf, item, inode->i_rdev); 2599 btrfs_set_inode_rdev(leaf, item, inode->i_rdev);
2600 btrfs_set_inode_flags(leaf, item, BTRFS_I(inode)->flags); 2600 btrfs_set_inode_flags(leaf, item, BTRFS_I(inode)->flags);
@@ -2752,6 +2752,8 @@ err:
2752 goto out; 2752 goto out;
2753 2753
2754 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 2754 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
2755 inode_inc_iversion(inode);
2756 inode_inc_iversion(dir);
2755 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME; 2757 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME;
2756 btrfs_update_inode(trans, root, dir); 2758 btrfs_update_inode(trans, root, dir);
2757out: 2759out:
@@ -3089,6 +3091,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
3089 } 3091 }
3090 3092
3091 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 3093 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
3094 inode_inc_iversion(dir);
3092 dir->i_mtime = dir->i_ctime = CURRENT_TIME; 3095 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
3093 ret = btrfs_update_inode(trans, root, dir); 3096 ret = btrfs_update_inode(trans, root, dir);
3094 if (ret) 3097 if (ret)
@@ -3638,6 +3641,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
3638 3641
3639 if (attr->ia_valid) { 3642 if (attr->ia_valid) {
3640 setattr_copy(inode, attr); 3643 setattr_copy(inode, attr);
3644 inode_inc_iversion(inode);
3641 err = btrfs_dirty_inode(inode); 3645 err = btrfs_dirty_inode(inode);
3642 3646
3643 if (!err && attr->ia_valid & ATTR_MODE) 3647 if (!err && attr->ia_valid & ATTR_MODE)
@@ -4730,6 +4734,7 @@ int btrfs_add_link(struct btrfs_trans_handle *trans,
4730 4734
4731 btrfs_i_size_write(parent_inode, parent_inode->i_size + 4735 btrfs_i_size_write(parent_inode, parent_inode->i_size +
4732 name_len * 2); 4736 name_len * 2);
4737 inode_inc_iversion(parent_inode);
4733 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME; 4738 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
4734 ret = btrfs_update_inode(trans, root, parent_inode); 4739 ret = btrfs_update_inode(trans, root, parent_inode);
4735 if (ret) 4740 if (ret)
@@ -4937,6 +4942,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4937 } 4942 }
4938 4943
4939 btrfs_inc_nlink(inode); 4944 btrfs_inc_nlink(inode);
4945 inode_inc_iversion(inode);
4940 inode->i_ctime = CURRENT_TIME; 4946 inode->i_ctime = CURRENT_TIME;
4941 ihold(inode); 4947 ihold(inode);
4942 4948
@@ -6894,7 +6900,6 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
6894 ei->root = NULL; 6900 ei->root = NULL;
6895 ei->space_info = NULL; 6901 ei->space_info = NULL;
6896 ei->generation = 0; 6902 ei->generation = 0;
6897 ei->sequence = 0;
6898 ei->last_trans = 0; 6903 ei->last_trans = 0;
6899 ei->last_sub_trans = 0; 6904 ei->last_sub_trans = 0;
6900 ei->logged_trans = 0; 6905 ei->logged_trans = 0;
@@ -7193,6 +7198,9 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
7193 if (new_inode && new_inode->i_size && S_ISREG(old_inode->i_mode)) 7198 if (new_inode && new_inode->i_size && S_ISREG(old_inode->i_mode))
7194 btrfs_add_ordered_operation(trans, root, old_inode); 7199 btrfs_add_ordered_operation(trans, root, old_inode);
7195 7200
7201 inode_inc_iversion(old_dir);
7202 inode_inc_iversion(new_dir);
7203 inode_inc_iversion(old_inode);
7196 old_dir->i_ctime = old_dir->i_mtime = ctime; 7204 old_dir->i_ctime = old_dir->i_mtime = ctime;
7197 new_dir->i_ctime = new_dir->i_mtime = ctime; 7205 new_dir->i_ctime = new_dir->i_mtime = ctime;
7198 old_inode->i_ctime = ctime; 7206 old_inode->i_ctime = ctime;
@@ -7219,6 +7227,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
7219 } 7227 }
7220 7228
7221 if (new_inode) { 7229 if (new_inode) {
7230 inode_inc_iversion(new_inode);
7222 new_inode->i_ctime = CURRENT_TIME; 7231 new_inode->i_ctime = CURRENT_TIME;
7223 if (unlikely(btrfs_ino(new_inode) == 7232 if (unlikely(btrfs_ino(new_inode) ==
7224 BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) { 7233 BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
@@ -7490,6 +7499,7 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
7490 cur_offset += ins.offset; 7499 cur_offset += ins.offset;
7491 *alloc_hint = ins.objectid + ins.offset; 7500 *alloc_hint = ins.objectid + ins.offset;
7492 7501
7502 inode_inc_iversion(inode);
7493 inode->i_ctime = CURRENT_TIME; 7503 inode->i_ctime = CURRENT_TIME;
7494 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC; 7504 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC;
7495 if (!(mode & FALLOC_FL_KEEP_SIZE) && 7505 if (!(mode & FALLOC_FL_KEEP_SIZE) &&