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 | |
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')
-rw-r--r-- | fs/btrfs/btrfs_inode.h | 3 | ||||
-rw-r--r-- | fs/btrfs/delayed-inode.c | 4 | ||||
-rw-r--r-- | fs/btrfs/file.c | 1 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 16 | ||||
-rw-r--r-- | fs/btrfs/ioctl.c | 2 | ||||
-rw-r--r-- | fs/btrfs/super.c | 2 | ||||
-rw-r--r-- | fs/btrfs/xattr.c | 1 |
7 files changed, 19 insertions, 10 deletions
diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h index 9b9b15fd5204..3771b8543a7e 100644 --- a/fs/btrfs/btrfs_inode.h +++ b/fs/btrfs/btrfs_inode.h | |||
@@ -83,9 +83,6 @@ struct btrfs_inode { | |||
83 | */ | 83 | */ |
84 | u64 generation; | 84 | u64 generation; |
85 | 85 | ||
86 | /* sequence number for NFS changes */ | ||
87 | u64 sequence; | ||
88 | |||
89 | /* | 86 | /* |
90 | * transid of the trans_handle that last modified this inode | 87 | * transid of the trans_handle that last modified this inode |
91 | */ | 88 | */ |
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 03e3748d84d0..bcd40c7109fa 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
@@ -1706,7 +1706,7 @@ static void fill_stack_inode_item(struct btrfs_trans_handle *trans, | |||
1706 | btrfs_set_stack_inode_nbytes(inode_item, inode_get_bytes(inode)); | 1706 | btrfs_set_stack_inode_nbytes(inode_item, inode_get_bytes(inode)); |
1707 | btrfs_set_stack_inode_generation(inode_item, | 1707 | btrfs_set_stack_inode_generation(inode_item, |
1708 | BTRFS_I(inode)->generation); | 1708 | BTRFS_I(inode)->generation); |
1709 | btrfs_set_stack_inode_sequence(inode_item, BTRFS_I(inode)->sequence); | 1709 | btrfs_set_stack_inode_sequence(inode_item, inode->i_version); |
1710 | btrfs_set_stack_inode_transid(inode_item, trans->transid); | 1710 | btrfs_set_stack_inode_transid(inode_item, trans->transid); |
1711 | btrfs_set_stack_inode_rdev(inode_item, inode->i_rdev); | 1711 | btrfs_set_stack_inode_rdev(inode_item, inode->i_rdev); |
1712 | btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags); | 1712 | btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags); |
@@ -1754,7 +1754,7 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev) | |||
1754 | set_nlink(inode, btrfs_stack_inode_nlink(inode_item)); | 1754 | set_nlink(inode, btrfs_stack_inode_nlink(inode_item)); |
1755 | inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)); | 1755 | inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)); |
1756 | BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); | 1756 | BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); |
1757 | BTRFS_I(inode)->sequence = btrfs_stack_inode_sequence(inode_item); | 1757 | inode->i_version = btrfs_stack_inode_sequence(inode_item); |
1758 | inode->i_rdev = 0; | 1758 | inode->i_rdev = 0; |
1759 | *rdev = btrfs_stack_inode_rdev(inode_item); | 1759 | *rdev = btrfs_stack_inode_rdev(inode_item); |
1760 | BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item); | 1760 | BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item); |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 53bf2d764bbc..8aa8d7fe74d7 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1409,7 +1409,6 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb, | |||
1409 | mutex_unlock(&inode->i_mutex); | 1409 | mutex_unlock(&inode->i_mutex); |
1410 | goto out; | 1410 | goto out; |
1411 | } | 1411 | } |
1412 | BTRFS_I(inode)->sequence++; | ||
1413 | 1412 | ||
1414 | start_pos = round_down(pos, root->sectorsize); | 1413 | start_pos = round_down(pos, root->sectorsize); |
1415 | if (start_pos > i_size_read(inode)) { | 1414 | if (start_pos > i_size_read(inode)) { |
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) && |
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 14f8e1faa46e..fccde7402cfe 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
@@ -261,6 +261,7 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg) | |||
261 | } | 261 | } |
262 | 262 | ||
263 | btrfs_update_iflags(inode); | 263 | btrfs_update_iflags(inode); |
264 | inode_inc_iversion(inode); | ||
264 | inode->i_ctime = CURRENT_TIME; | 265 | inode->i_ctime = CURRENT_TIME; |
265 | ret = btrfs_update_inode(trans, root, inode); | 266 | ret = btrfs_update_inode(trans, root, inode); |
266 | 267 | ||
@@ -2622,6 +2623,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd, | |||
2622 | btrfs_mark_buffer_dirty(leaf); | 2623 | btrfs_mark_buffer_dirty(leaf); |
2623 | btrfs_release_path(path); | 2624 | btrfs_release_path(path); |
2624 | 2625 | ||
2626 | inode_inc_iversion(inode); | ||
2625 | inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 2627 | inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
2626 | 2628 | ||
2627 | /* | 2629 | /* |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index c5f8fca4195f..bd6d143cea85 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -769,7 +769,7 @@ static int btrfs_fill_super(struct super_block *sb, | |||
769 | #ifdef CONFIG_BTRFS_FS_POSIX_ACL | 769 | #ifdef CONFIG_BTRFS_FS_POSIX_ACL |
770 | sb->s_flags |= MS_POSIXACL; | 770 | sb->s_flags |= MS_POSIXACL; |
771 | #endif | 771 | #endif |
772 | 772 | sb->s_flags |= MS_I_VERSION; | |
773 | err = open_ctree(sb, fs_devices, (char *)data); | 773 | err = open_ctree(sb, fs_devices, (char *)data); |
774 | if (err) { | 774 | if (err) { |
775 | printk("btrfs: open_ctree failed\n"); | 775 | printk("btrfs: open_ctree failed\n"); |
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index e7a5659087e6..3f4e2d69e83a 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c | |||
@@ -196,6 +196,7 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans, | |||
196 | if (ret) | 196 | if (ret) |
197 | goto out; | 197 | goto out; |
198 | 198 | ||
199 | inode_inc_iversion(inode); | ||
199 | inode->i_ctime = CURRENT_TIME; | 200 | inode->i_ctime = CURRENT_TIME; |
200 | ret = btrfs_update_inode(trans, root, inode); | 201 | ret = btrfs_update_inode(trans, root, inode); |
201 | BUG_ON(ret); | 202 | BUG_ON(ret); |