diff options
author | Josef Bacik <josef@redhat.com> | 2012-04-05 15:03:02 -0400 |
---|---|---|
committer | Josef Bacik <josef@redhat.com> | 2012-05-30 10:23:27 -0400 |
commit | 0c4d2d95d06e920e0c61707e62c7fffc9c57f63a (patch) | |
tree | 5d6fa736c7fea0a0afd60eda8e6e0586df6fb606 /fs/btrfs/inode.c | |
parent | a25c75d5ad04df0a7abd09585231b4021a91a358 (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.c | 16 |
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); |
2757 | out: | 2759 | out: |
@@ -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) && |