Skip to content

Commit 2aa756e

Browse files
committed
btrfs: uninline some static inline helpers from backref.h
There are many helpers doing simple things but not simple enough to justify the static inline. None of them seems to be on a hot path so move them to .c. Signed-off-by: David Sterba <dsterba@suse.com>
1 parent ef92344 commit 2aa756e

2 files changed

Lines changed: 102 additions & 92 deletions

File tree

fs/btrfs/backref.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,6 +2856,16 @@ struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_inf
28562856
return ret;
28572857
}
28582858

2859+
static void btrfs_backref_iter_release(struct btrfs_backref_iter *iter)
2860+
{
2861+
iter->bytenr = 0;
2862+
iter->item_ptr = 0;
2863+
iter->cur_ptr = 0;
2864+
iter->end_ptr = 0;
2865+
btrfs_release_path(iter->path);
2866+
memset(&iter->cur_key, 0, sizeof(iter->cur_key));
2867+
}
2868+
28592869
int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr)
28602870
{
28612871
struct btrfs_fs_info *fs_info = iter->fs_info;
@@ -2948,6 +2958,14 @@ int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr)
29482958
return ret;
29492959
}
29502960

2961+
static bool btrfs_backref_iter_is_inline_ref(struct btrfs_backref_iter *iter)
2962+
{
2963+
if (iter->cur_key.type == BTRFS_EXTENT_ITEM_KEY ||
2964+
iter->cur_key.type == BTRFS_METADATA_ITEM_KEY)
2965+
return true;
2966+
return false;
2967+
}
2968+
29512969
/*
29522970
* Go to the next backref item of current bytenr, can be either inlined or
29532971
* keyed.
@@ -3048,6 +3066,19 @@ struct btrfs_backref_node *btrfs_backref_alloc_node(
30483066
return node;
30493067
}
30503068

3069+
void btrfs_backref_free_node(struct btrfs_backref_cache *cache,
3070+
struct btrfs_backref_node *node)
3071+
{
3072+
if (node) {
3073+
ASSERT(list_empty(&node->list));
3074+
ASSERT(list_empty(&node->lower));
3075+
ASSERT(node->eb == NULL);
3076+
cache->nr_nodes--;
3077+
btrfs_put_root(node->root);
3078+
kfree(node);
3079+
}
3080+
}
3081+
30513082
struct btrfs_backref_edge *btrfs_backref_alloc_edge(
30523083
struct btrfs_backref_cache *cache)
30533084
{
@@ -3059,6 +3090,52 @@ struct btrfs_backref_edge *btrfs_backref_alloc_edge(
30593090
return edge;
30603091
}
30613092

3093+
void btrfs_backref_free_edge(struct btrfs_backref_cache *cache,
3094+
struct btrfs_backref_edge *edge)
3095+
{
3096+
if (edge) {
3097+
cache->nr_edges--;
3098+
kfree(edge);
3099+
}
3100+
}
3101+
3102+
void btrfs_backref_unlock_node_buffer(struct btrfs_backref_node *node)
3103+
{
3104+
if (node->locked) {
3105+
btrfs_tree_unlock(node->eb);
3106+
node->locked = 0;
3107+
}
3108+
}
3109+
3110+
void btrfs_backref_drop_node_buffer(struct btrfs_backref_node *node)
3111+
{
3112+
if (node->eb) {
3113+
btrfs_backref_unlock_node_buffer(node);
3114+
free_extent_buffer(node->eb);
3115+
node->eb = NULL;
3116+
}
3117+
}
3118+
3119+
/*
3120+
* Drop the backref node from cache without cleaning up its children
3121+
* edges.
3122+
*
3123+
* This can only be called on node without parent edges.
3124+
* The children edges are still kept as is.
3125+
*/
3126+
void btrfs_backref_drop_node(struct btrfs_backref_cache *tree,
3127+
struct btrfs_backref_node *node)
3128+
{
3129+
ASSERT(list_empty(&node->upper));
3130+
3131+
btrfs_backref_drop_node_buffer(node);
3132+
list_del_init(&node->list);
3133+
list_del_init(&node->lower);
3134+
if (!RB_EMPTY_NODE(&node->rb_node))
3135+
rb_erase(&node->rb_node, &tree->rb_root);
3136+
btrfs_backref_free_node(tree, node);
3137+
}
3138+
30623139
/*
30633140
* Drop the backref node from cache, also cleaning up all its
30643141
* upper edges and any uncached nodes in the path.
@@ -3130,6 +3207,19 @@ void btrfs_backref_release_cache(struct btrfs_backref_cache *cache)
31303207
ASSERT(!cache->nr_edges);
31313208
}
31323209

3210+
void btrfs_backref_link_edge(struct btrfs_backref_edge *edge,
3211+
struct btrfs_backref_node *lower,
3212+
struct btrfs_backref_node *upper,
3213+
int link_which)
3214+
{
3215+
ASSERT(upper && lower && upper->level == lower->level + 1);
3216+
edge->node[LOWER] = lower;
3217+
edge->node[UPPER] = upper;
3218+
if (link_which & LINK_LOWER)
3219+
list_add_tail(&edge->list[LOWER], &lower->upper);
3220+
if (link_which & LINK_UPPER)
3221+
list_add_tail(&edge->list[UPPER], &upper->lower);
3222+
}
31333223
/*
31343224
* Handle direct tree backref
31353225
*

fs/btrfs/backref.h

Lines changed: 12 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -302,25 +302,6 @@ int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr);
302302

303303
int btrfs_backref_iter_next(struct btrfs_backref_iter *iter);
304304

305-
static inline bool btrfs_backref_iter_is_inline_ref(
306-
struct btrfs_backref_iter *iter)
307-
{
308-
if (iter->cur_key.type == BTRFS_EXTENT_ITEM_KEY ||
309-
iter->cur_key.type == BTRFS_METADATA_ITEM_KEY)
310-
return true;
311-
return false;
312-
}
313-
314-
static inline void btrfs_backref_iter_release(struct btrfs_backref_iter *iter)
315-
{
316-
iter->bytenr = 0;
317-
iter->item_ptr = 0;
318-
iter->cur_ptr = 0;
319-
iter->end_ptr = 0;
320-
btrfs_release_path(iter->path);
321-
memset(&iter->cur_key, 0, sizeof(iter->cur_key));
322-
}
323-
324305
/*
325306
* Backref cache related structures
326307
*
@@ -448,83 +429,22 @@ struct btrfs_backref_edge *btrfs_backref_alloc_edge(
448429

449430
#define LINK_LOWER (1 << 0)
450431
#define LINK_UPPER (1 << 1)
451-
static inline void btrfs_backref_link_edge(struct btrfs_backref_edge *edge,
452-
struct btrfs_backref_node *lower,
453-
struct btrfs_backref_node *upper,
454-
int link_which)
455-
{
456-
ASSERT(upper && lower && upper->level == lower->level + 1);
457-
edge->node[LOWER] = lower;
458-
edge->node[UPPER] = upper;
459-
if (link_which & LINK_LOWER)
460-
list_add_tail(&edge->list[LOWER], &lower->upper);
461-
if (link_which & LINK_UPPER)
462-
list_add_tail(&edge->list[UPPER], &upper->lower);
463-
}
464-
465-
static inline void btrfs_backref_free_node(struct btrfs_backref_cache *cache,
466-
struct btrfs_backref_node *node)
467-
{
468-
if (node) {
469-
ASSERT(list_empty(&node->list));
470-
ASSERT(list_empty(&node->lower));
471-
ASSERT(node->eb == NULL);
472-
cache->nr_nodes--;
473-
btrfs_put_root(node->root);
474-
kfree(node);
475-
}
476-
}
477432

478-
static inline void btrfs_backref_free_edge(struct btrfs_backref_cache *cache,
479-
struct btrfs_backref_edge *edge)
480-
{
481-
if (edge) {
482-
cache->nr_edges--;
483-
kfree(edge);
484-
}
485-
}
486-
487-
static inline void btrfs_backref_unlock_node_buffer(
488-
struct btrfs_backref_node *node)
489-
{
490-
if (node->locked) {
491-
btrfs_tree_unlock(node->eb);
492-
node->locked = 0;
493-
}
494-
}
495-
496-
static inline void btrfs_backref_drop_node_buffer(
497-
struct btrfs_backref_node *node)
498-
{
499-
if (node->eb) {
500-
btrfs_backref_unlock_node_buffer(node);
501-
free_extent_buffer(node->eb);
502-
node->eb = NULL;
503-
}
504-
}
505-
506-
/*
507-
* Drop the backref node from cache without cleaning up its children
508-
* edges.
509-
*
510-
* This can only be called on node without parent edges.
511-
* The children edges are still kept as is.
512-
*/
513-
static inline void btrfs_backref_drop_node(struct btrfs_backref_cache *tree,
514-
struct btrfs_backref_node *node)
515-
{
516-
ASSERT(list_empty(&node->upper));
517-
518-
btrfs_backref_drop_node_buffer(node);
519-
list_del_init(&node->list);
520-
list_del_init(&node->lower);
521-
if (!RB_EMPTY_NODE(&node->rb_node))
522-
rb_erase(&node->rb_node, &tree->rb_root);
523-
btrfs_backref_free_node(tree, node);
524-
}
433+
void btrfs_backref_link_edge(struct btrfs_backref_edge *edge,
434+
struct btrfs_backref_node *lower,
435+
struct btrfs_backref_node *upper,
436+
int link_which);
437+
void btrfs_backref_free_node(struct btrfs_backref_cache *cache,
438+
struct btrfs_backref_node *node);
439+
void btrfs_backref_free_edge(struct btrfs_backref_cache *cache,
440+
struct btrfs_backref_edge *edge);
441+
void btrfs_backref_unlock_node_buffer(struct btrfs_backref_node *node);
442+
void btrfs_backref_drop_node_buffer(struct btrfs_backref_node *node);
525443

526444
void btrfs_backref_cleanup_node(struct btrfs_backref_cache *cache,
527445
struct btrfs_backref_node *node);
446+
void btrfs_backref_drop_node(struct btrfs_backref_cache *tree,
447+
struct btrfs_backref_node *node);
528448

529449
void btrfs_backref_release_cache(struct btrfs_backref_cache *cache);
530450

0 commit comments

Comments
 (0)