convert btrfs to ->evict_inode()
Subsystems (2)
PATCH 45/58 convert btrfs to ->evict_inode()
Signed-off-by Al Viro <[email protected]>
--- fs/btrfs/ctree.h | 2 +- fs/btrfs/inode.c | 7 +++++-- fs/btrfs/super.c | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-)
fs/btrfs/ctree.h +1 -1
@@ -2389,7 +2389,7 @@ unsigned long btrfs_force_ra(struct address_space *mapping, pgoff_t offset, pgoff_t last_index);int btrfs_page_mkwrite (struct vm_area_struct *vma,struct vm_fault *vmf);int btrfs_readpage (struct file *file,struct page *page); -void btrfs_delete_inode (struct inode *inode); +void btrfs_evict_inode (struct inode *inode);void btrfs_put_inode (struct inode *inode);int btrfs_write_inode (struct inode *inode,struct writeback_control *wbc);void btrfs_dirty_inode (struct inode *inode);
fs/btrfs/inode.c +5 -2
@@ -3668,7 +3668,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)return err; } -void btrfs_delete_inode (struct inode *inode) +void btrfs_evict_inode (struct inode *inode) {struct btrfs_trans_handle *trans;struct btrfs_root *root =BTRFS_I (inode)->root;
@@ -3676,6 +3676,9 @@ void btrfs_delete_inode(struct inode *inode)int ret;truncate_inode_pages (&inode->i_data,0 ); +if (inode->i_nlink) + goto no_delete; +if (is_bad_inode (inode)) {btrfs_orphan_del (NULL , inode); goto no_delete;
@@ -3729,7 +3732,7 @@ void btrfs_delete_inode(struct inode *inode)btrfs_end_transaction (trans, root);btrfs_btree_balance_dirty (root, nr); no_delete: -clear_inode (inode); +end_writeback (inode);return ; }
fs/btrfs/super.c +1 -1
@@ -795,7 +795,7 @@ static int btrfs_unfreeze(struct super_block *sb)static const struct super_operations btrfs_super_ops = { .drop_inode = btrfs_drop_inode, - .delete_inode = btrfs_delete_inode, + .evict_inode = btrfs_evict_inode, .put_super = btrfs_put_super, .sync_fs = btrfs_sync_fs, .show_options = btrfs_show_options,
Signature · 1 line
1.5.6.5
Al Viro
maintainerPATCH v2 45/58 convert btrfs to ->evict_inode()
[original variant of patch changed behaviour; fixed]
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 <[email protected]>
fs/btrfs/ctree.h +1 -1
@@ -2389,7 +2389,7 @@ unsigned long btrfs_force_ra(struct address_space *mapping, pgoff_t offset, pgoff_t last_index);int btrfs_page_mkwrite (struct vm_area_struct *vma,struct vm_fault *vmf);int btrfs_readpage (struct file *file,struct page *page); -void btrfs_delete_inode (struct inode *inode); +void btrfs_evict_inode (struct inode *inode);void btrfs_put_inode (struct inode *inode);int btrfs_write_inode (struct inode *inode,struct writeback_control *wbc);void btrfs_dirty_inode (struct inode *inode);
fs/btrfs/inode.c +6 -2
@@ -3668,7 +3668,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)return err; } -void btrfs_delete_inode (struct inode *inode) +void btrfs_evict_inode (struct inode *inode) {struct btrfs_trans_handle *trans;struct btrfs_root *root =BTRFS_I (inode)->root;
@@ -3676,10 +3676,14 @@ void btrfs_delete_inode(struct inode *inode)int ret;truncate_inode_pages (&inode->i_data,0 ); +if (inode->i_nlink &&btrfs_root_refs (&root->root_item) !=0 ) + goto no_delete; +if (is_bad_inode (inode)) {btrfs_orphan_del (NULL , inode); goto no_delete; } +/* do we really want it for ->i_nlink > 0 and zero btrfs_root_refs? */ btrfs_wait_ordered_range (inode,0 , (u64)-1 );if (root->fs_info->log_root_recovering) {
@@ -3729,7 +3733,7 @@ void btrfs_delete_inode(struct inode *inode)btrfs_end_transaction (trans, root);btrfs_btree_balance_dirty (root, nr); no_delete: -clear_inode (inode); +end_writeback (inode);return ; }
fs/btrfs/super.c +1 -1
@@ -795,7 +795,7 @@ static int btrfs_unfreeze(struct super_block *sb)static const struct super_operations btrfs_super_ops = { .drop_inode = btrfs_drop_inode, - .delete_inode = btrfs_delete_inode, + .evict_inode = btrfs_evict_inode, .put_super = btrfs_put_super, .sync_fs = btrfs_sync_fs, .show_options = btrfs_show_options,