btrfs: Unexport and rename btrfs_invalidate_inodes
This function is no longer used outside of inode.c so just make it static. At the same time give a more becoming name, since it's not really invalidating the inodes but just calling d_prune_alias. Last, but not least - move the function above the sole caller to avoid introducing yet-another-pointless forward declaration. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
093258e6eb
commit
20a6800402
|
@ -3231,7 +3231,6 @@ int btrfs_orphan_cleanup(struct btrfs_root *root);
|
||||||
void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
|
void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root);
|
struct btrfs_root *root);
|
||||||
int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
|
int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
|
||||||
void btrfs_invalidate_inodes(struct btrfs_root *root);
|
|
||||||
void btrfs_add_delayed_iput(struct inode *inode);
|
void btrfs_add_delayed_iput(struct inode *inode);
|
||||||
void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info);
|
void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info);
|
||||||
int btrfs_prealloc_file_range(struct inode *inode, int mode,
|
int btrfs_prealloc_file_range(struct inode *inode, int mode,
|
||||||
|
|
129
fs/btrfs/inode.c
129
fs/btrfs/inode.c
|
@ -4379,6 +4379,70 @@ static noinline int may_destroy_subvol(struct btrfs_root *root)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Delete all dentries for inodes belonging to the root */
|
||||||
|
static void btrfs_prune_dentries(struct btrfs_root *root)
|
||||||
|
{
|
||||||
|
struct btrfs_fs_info *fs_info = root->fs_info;
|
||||||
|
struct rb_node *node;
|
||||||
|
struct rb_node *prev;
|
||||||
|
struct btrfs_inode *entry;
|
||||||
|
struct inode *inode;
|
||||||
|
u64 objectid = 0;
|
||||||
|
|
||||||
|
if (!test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state))
|
||||||
|
WARN_ON(btrfs_root_refs(&root->root_item) != 0);
|
||||||
|
|
||||||
|
spin_lock(&root->inode_lock);
|
||||||
|
again:
|
||||||
|
node = root->inode_tree.rb_node;
|
||||||
|
prev = NULL;
|
||||||
|
while (node) {
|
||||||
|
prev = node;
|
||||||
|
entry = rb_entry(node, struct btrfs_inode, rb_node);
|
||||||
|
|
||||||
|
if (objectid < btrfs_ino(BTRFS_I(&entry->vfs_inode)))
|
||||||
|
node = node->rb_left;
|
||||||
|
else if (objectid > btrfs_ino(BTRFS_I(&entry->vfs_inode)))
|
||||||
|
node = node->rb_right;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!node) {
|
||||||
|
while (prev) {
|
||||||
|
entry = rb_entry(prev, struct btrfs_inode, rb_node);
|
||||||
|
if (objectid <= btrfs_ino(BTRFS_I(&entry->vfs_inode))) {
|
||||||
|
node = prev;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
prev = rb_next(prev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (node) {
|
||||||
|
entry = rb_entry(node, struct btrfs_inode, rb_node);
|
||||||
|
objectid = btrfs_ino(BTRFS_I(&entry->vfs_inode)) + 1;
|
||||||
|
inode = igrab(&entry->vfs_inode);
|
||||||
|
if (inode) {
|
||||||
|
spin_unlock(&root->inode_lock);
|
||||||
|
if (atomic_read(&inode->i_count) > 1)
|
||||||
|
d_prune_aliases(inode);
|
||||||
|
/*
|
||||||
|
* btrfs_drop_inode will have it removed from the inode
|
||||||
|
* cache when its usage count hits zero.
|
||||||
|
*/
|
||||||
|
iput(inode);
|
||||||
|
cond_resched();
|
||||||
|
spin_lock(&root->inode_lock);
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cond_resched_lock(&root->inode_lock))
|
||||||
|
goto again;
|
||||||
|
|
||||||
|
node = rb_next(node);
|
||||||
|
}
|
||||||
|
spin_unlock(&root->inode_lock);
|
||||||
|
}
|
||||||
|
|
||||||
int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry)
|
int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
struct btrfs_fs_info *fs_info = btrfs_sb(dentry->d_sb);
|
struct btrfs_fs_info *fs_info = btrfs_sb(dentry->d_sb);
|
||||||
|
@ -4505,7 +4569,7 @@ int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry)
|
||||||
spin_unlock(&dest->root_item_lock);
|
spin_unlock(&dest->root_item_lock);
|
||||||
} else {
|
} else {
|
||||||
d_invalidate(dentry);
|
d_invalidate(dentry);
|
||||||
btrfs_invalidate_inodes(dest);
|
btrfs_prune_dentries(dest);
|
||||||
ASSERT(dest->send_in_progress == 0);
|
ASSERT(dest->send_in_progress == 0);
|
||||||
|
|
||||||
/* the last ref */
|
/* the last ref */
|
||||||
|
@ -5818,69 +5882,6 @@ static void inode_tree_del(struct inode *inode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void btrfs_invalidate_inodes(struct btrfs_root *root)
|
|
||||||
{
|
|
||||||
struct btrfs_fs_info *fs_info = root->fs_info;
|
|
||||||
struct rb_node *node;
|
|
||||||
struct rb_node *prev;
|
|
||||||
struct btrfs_inode *entry;
|
|
||||||
struct inode *inode;
|
|
||||||
u64 objectid = 0;
|
|
||||||
|
|
||||||
if (!test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state))
|
|
||||||
WARN_ON(btrfs_root_refs(&root->root_item) != 0);
|
|
||||||
|
|
||||||
spin_lock(&root->inode_lock);
|
|
||||||
again:
|
|
||||||
node = root->inode_tree.rb_node;
|
|
||||||
prev = NULL;
|
|
||||||
while (node) {
|
|
||||||
prev = node;
|
|
||||||
entry = rb_entry(node, struct btrfs_inode, rb_node);
|
|
||||||
|
|
||||||
if (objectid < btrfs_ino(BTRFS_I(&entry->vfs_inode)))
|
|
||||||
node = node->rb_left;
|
|
||||||
else if (objectid > btrfs_ino(BTRFS_I(&entry->vfs_inode)))
|
|
||||||
node = node->rb_right;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!node) {
|
|
||||||
while (prev) {
|
|
||||||
entry = rb_entry(prev, struct btrfs_inode, rb_node);
|
|
||||||
if (objectid <= btrfs_ino(BTRFS_I(&entry->vfs_inode))) {
|
|
||||||
node = prev;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
prev = rb_next(prev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (node) {
|
|
||||||
entry = rb_entry(node, struct btrfs_inode, rb_node);
|
|
||||||
objectid = btrfs_ino(BTRFS_I(&entry->vfs_inode)) + 1;
|
|
||||||
inode = igrab(&entry->vfs_inode);
|
|
||||||
if (inode) {
|
|
||||||
spin_unlock(&root->inode_lock);
|
|
||||||
if (atomic_read(&inode->i_count) > 1)
|
|
||||||
d_prune_aliases(inode);
|
|
||||||
/*
|
|
||||||
* btrfs_drop_inode will have it removed from
|
|
||||||
* the inode cache when its usage count
|
|
||||||
* hits zero.
|
|
||||||
*/
|
|
||||||
iput(inode);
|
|
||||||
cond_resched();
|
|
||||||
spin_lock(&root->inode_lock);
|
|
||||||
goto again;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cond_resched_lock(&root->inode_lock))
|
|
||||||
goto again;
|
|
||||||
|
|
||||||
node = rb_next(node);
|
|
||||||
}
|
|
||||||
spin_unlock(&root->inode_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int btrfs_init_locked_inode(struct inode *inode, void *p)
|
static int btrfs_init_locked_inode(struct inode *inode, void *p)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue