forked from Minki/linux
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>
This commit is contained in:
parent
d5c1515cf3
commit
bd55597520
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -797,7 +797,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,
|
||||
|
Loading…
Reference in New Issue
Block a user