diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2010-06-07 11:35:40 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-08-09 16:48:22 -0400 |
commit | bd55597520a2eaa0d71dd7683513a14bfd1bdf5c (patch) | |
tree | b99685fe2d9b6c9ad87b7d3e6a8fc47a5ac248ce /fs/btrfs | |
parent | d5c1515cf374951f07e5bf97b6ff3718d3401b6f (diff) |
convert btrfs to ->evict_inode()
NB: do we want btrfs_wait_ordered_range() on eviction of
inodes with positive i_nlink on subvolume with zero root_refs?
If not, btrfs_evict_inode() can be simplified by unconditionally
bailing out in case of i_nlink > 0 in the very beginning...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/ctree.h | 2 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 8 | ||||
-rw-r--r-- | fs/btrfs/super.c | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 29c20092847e..394d5422ab6a 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -2389,7 +2389,7 @@ unsigned long btrfs_force_ra(struct address_space *mapping, | |||
2389 | pgoff_t offset, pgoff_t last_index); | 2389 | pgoff_t offset, pgoff_t last_index); |
2390 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | 2390 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); |
2391 | int btrfs_readpage(struct file *file, struct page *page); | 2391 | int btrfs_readpage(struct file *file, struct page *page); |
2392 | void btrfs_delete_inode(struct inode *inode); | 2392 | void btrfs_evict_inode(struct inode *inode); |
2393 | void btrfs_put_inode(struct inode *inode); | 2393 | void btrfs_put_inode(struct inode *inode); |
2394 | int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); | 2394 | int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); |
2395 | void btrfs_dirty_inode(struct inode *inode); | 2395 | void btrfs_dirty_inode(struct inode *inode); |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 95eac0116963..ce02199ec4e5 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3668,7 +3668,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
3668 | return err; | 3668 | return err; |
3669 | } | 3669 | } |
3670 | 3670 | ||
3671 | void btrfs_delete_inode(struct inode *inode) | 3671 | void btrfs_evict_inode(struct inode *inode) |
3672 | { | 3672 | { |
3673 | struct btrfs_trans_handle *trans; | 3673 | struct btrfs_trans_handle *trans; |
3674 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3674 | struct btrfs_root *root = BTRFS_I(inode)->root; |
@@ -3676,10 +3676,14 @@ void btrfs_delete_inode(struct inode *inode) | |||
3676 | int ret; | 3676 | int ret; |
3677 | 3677 | ||
3678 | truncate_inode_pages(&inode->i_data, 0); | 3678 | truncate_inode_pages(&inode->i_data, 0); |
3679 | if (inode->i_nlink && btrfs_root_refs(&root->root_item) != 0) | ||
3680 | goto no_delete; | ||
3681 | |||
3679 | if (is_bad_inode(inode)) { | 3682 | if (is_bad_inode(inode)) { |
3680 | btrfs_orphan_del(NULL, inode); | 3683 | btrfs_orphan_del(NULL, inode); |
3681 | goto no_delete; | 3684 | goto no_delete; |
3682 | } | 3685 | } |
3686 | /* do we really want it for ->i_nlink > 0 and zero btrfs_root_refs? */ | ||
3683 | btrfs_wait_ordered_range(inode, 0, (u64)-1); | 3687 | btrfs_wait_ordered_range(inode, 0, (u64)-1); |
3684 | 3688 | ||
3685 | if (root->fs_info->log_root_recovering) { | 3689 | if (root->fs_info->log_root_recovering) { |
@@ -3729,7 +3733,7 @@ void btrfs_delete_inode(struct inode *inode) | |||
3729 | btrfs_end_transaction(trans, root); | 3733 | btrfs_end_transaction(trans, root); |
3730 | btrfs_btree_balance_dirty(root, nr); | 3734 | btrfs_btree_balance_dirty(root, nr); |
3731 | no_delete: | 3735 | no_delete: |
3732 | clear_inode(inode); | 3736 | end_writeback(inode); |
3733 | return; | 3737 | return; |
3734 | } | 3738 | } |
3735 | 3739 | ||
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index f2393b390318..1776dbd8dc98 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -797,7 +797,7 @@ static int btrfs_unfreeze(struct super_block *sb) | |||
797 | 797 | ||
798 | static const struct super_operations btrfs_super_ops = { | 798 | static const struct super_operations btrfs_super_ops = { |
799 | .drop_inode = btrfs_drop_inode, | 799 | .drop_inode = btrfs_drop_inode, |
800 | .delete_inode = btrfs_delete_inode, | 800 | .evict_inode = btrfs_evict_inode, |
801 | .put_super = btrfs_put_super, | 801 | .put_super = btrfs_put_super, |
802 | .sync_fs = btrfs_sync_fs, | 802 | .sync_fs = btrfs_sync_fs, |
803 | .show_options = btrfs_show_options, | 803 | .show_options = btrfs_show_options, |