Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd555975 authored by Al Viro's avatar Al Viro
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d5c1515c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+6 −2
Original line number Diff line number Diff line
@@ -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;
}

+1 −1
Original line number Diff line number Diff line
@@ -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,