summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Borisov <n.borisov.lkml@gmail.com>2017-01-17 17:31:31 -0500
committerDavid Sterba <dsterba@suse.com>2017-02-14 09:50:54 -0500
commit9ca5fbfbb92e91933510f0903b2492e5e7b45464 (patch)
tree0122a6e124b56a00c227c2ec266efec79717670a
parent0f8939b8ac8623760c078d41282526de143ee623 (diff)
btrfs: Make btrfs_log_new_name take btrfs_inode
Signed-off-by: Nikolay Borisov <n.borisov.lkml@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/inode.c8
-rw-r--r--fs/btrfs/tree-log.c18
-rw-r--r--fs/btrfs/tree-log.h2
3 files changed, 13 insertions, 15 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 45134a1519a6..fe8da3974ff8 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -6597,7 +6597,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
6597 goto fail; 6597 goto fail;
6598 } 6598 }
6599 d_instantiate(dentry, inode); 6599 d_instantiate(dentry, inode);
6600 btrfs_log_new_name(trans, inode, NULL, parent); 6600 btrfs_log_new_name(trans, BTRFS_I(inode), NULL, parent);
6601 } 6601 }
6602 6602
6603 btrfs_balance_delayed_items(fs_info); 6603 btrfs_balance_delayed_items(fs_info);
@@ -9654,13 +9654,13 @@ static int btrfs_rename_exchange(struct inode *old_dir,
9654 9654
9655 if (root_log_pinned) { 9655 if (root_log_pinned) {
9656 parent = new_dentry->d_parent; 9656 parent = new_dentry->d_parent;
9657 btrfs_log_new_name(trans, old_inode, old_dir, parent); 9657 btrfs_log_new_name(trans, BTRFS_I(old_inode), BTRFS_I(old_dir), parent);
9658 btrfs_end_log_trans(root); 9658 btrfs_end_log_trans(root);
9659 root_log_pinned = false; 9659 root_log_pinned = false;
9660 } 9660 }
9661 if (dest_log_pinned) { 9661 if (dest_log_pinned) {
9662 parent = old_dentry->d_parent; 9662 parent = old_dentry->d_parent;
9663 btrfs_log_new_name(trans, new_inode, new_dir, parent); 9663 btrfs_log_new_name(trans, BTRFS_I(new_inode), BTRFS_I(new_dir), parent);
9664 btrfs_end_log_trans(dest); 9664 btrfs_end_log_trans(dest);
9665 dest_log_pinned = false; 9665 dest_log_pinned = false;
9666 } 9666 }
@@ -9926,7 +9926,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
9926 if (log_pinned) { 9926 if (log_pinned) {
9927 struct dentry *parent = new_dentry->d_parent; 9927 struct dentry *parent = new_dentry->d_parent;
9928 9928
9929 btrfs_log_new_name(trans, old_inode, old_dir, parent); 9929 btrfs_log_new_name(trans, BTRFS_I(old_inode), BTRFS_I(old_dir), parent);
9930 btrfs_end_log_trans(root); 9930 btrfs_end_log_trans(root);
9931 log_pinned = false; 9931 log_pinned = false;
9932 } 9932 }
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 37adad5dabd6..df822908f2be 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -5809,30 +5809,28 @@ void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
5809 * full transaction commit is required. 5809 * full transaction commit is required.
5810 */ 5810 */
5811int btrfs_log_new_name(struct btrfs_trans_handle *trans, 5811int btrfs_log_new_name(struct btrfs_trans_handle *trans,
5812 struct inode *inode, struct inode *old_dir, 5812 struct btrfs_inode *inode, struct btrfs_inode *old_dir,
5813 struct dentry *parent) 5813 struct dentry *parent)
5814{ 5814{
5815 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); 5815 struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb);
5816 struct btrfs_root * root = BTRFS_I(inode)->root; 5816 struct btrfs_root * root = inode->root;
5817 5817
5818 /* 5818 /*
5819 * this will force the logging code to walk the dentry chain 5819 * this will force the logging code to walk the dentry chain
5820 * up for the file 5820 * up for the file
5821 */ 5821 */
5822 if (S_ISREG(inode->i_mode)) 5822 if (S_ISREG(inode->vfs_inode.i_mode))
5823 BTRFS_I(inode)->last_unlink_trans = trans->transid; 5823 inode->last_unlink_trans = trans->transid;
5824 5824
5825 /* 5825 /*
5826 * if this inode hasn't been logged and directory we're renaming it 5826 * if this inode hasn't been logged and directory we're renaming it
5827 * from hasn't been logged, we don't need to log it 5827 * from hasn't been logged, we don't need to log it
5828 */ 5828 */
5829 if (BTRFS_I(inode)->logged_trans <= 5829 if (inode->logged_trans <= fs_info->last_trans_committed &&
5830 fs_info->last_trans_committed && 5830 (!old_dir || old_dir->logged_trans <= fs_info->last_trans_committed))
5831 (!old_dir || BTRFS_I(old_dir)->logged_trans <=
5832 fs_info->last_trans_committed))
5833 return 0; 5831 return 0;
5834 5832
5835 return btrfs_log_inode_parent(trans, root, inode, parent, 0, 5833 return btrfs_log_inode_parent(trans, root, &inode->vfs_inode, parent, 0,
5836 LLONG_MAX, 1, NULL); 5834 LLONG_MAX, 1, NULL);
5837} 5835}
5838 5836
diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h
index 9b5bf904d511..7f34d2d77865 100644
--- a/fs/btrfs/tree-log.h
+++ b/fs/btrfs/tree-log.h
@@ -85,6 +85,6 @@ void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
85void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans, 85void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
86 struct btrfs_inode *dir); 86 struct btrfs_inode *dir);
87int btrfs_log_new_name(struct btrfs_trans_handle *trans, 87int btrfs_log_new_name(struct btrfs_trans_handle *trans,
88 struct inode *inode, struct inode *old_dir, 88 struct btrfs_inode *inode, struct btrfs_inode *old_dir,
89 struct dentry *parent); 89 struct dentry *parent);
90#endif 90#endif